diff --git a/crates/ndc-sqlserver/src/configuration/version1.rs b/crates/ndc-sqlserver/src/configuration/version1.rs index 80b98f2e..9ad89263 100644 --- a/crates/ndc-sqlserver/src/configuration/version1.rs +++ b/crates/ndc-sqlserver/src/configuration/version1.rs @@ -14,6 +14,8 @@ use tiberius::Query; const TABLE_CONFIGURATION_QUERY: &str = include_str!("table_configuration.sql"); +const TYPES_QUERY: &str = "SELECT name FROM sys.types FOR JSON PATH"; + const CURRENT_VERSION: u32 = 1; /// User configuration. @@ -100,28 +102,37 @@ async fn create_mssql_pool( bb8::Pool::builder().max_size(2).build(mgr).await } -/// Construct the deployment configuration by introspecting the database. -pub async fn configure( - configuration: &RawConfiguration, -) -> Result { - let mssql_pool = create_mssql_pool(configuration).await.unwrap(); - +async fn select_first_row( + mssql_pool: &bb8::Pool, + query: &str, +) -> tiberius::Row { let mut connection = mssql_pool.get().await.unwrap(); // let's do a query to check everything is ok - let select = Query::new(TABLE_CONFIGURATION_QUERY); + let select = Query::new(query); // go! let stream = select.query(&mut connection).await.unwrap(); // Nothing is fetched, the first result set starts. - let row = stream.into_row().await.unwrap().unwrap(); + stream.into_row().await.unwrap().unwrap() +} + +/// Construct the deployment configuration by introspecting the database. +pub async fn configure( + configuration: &RawConfiguration, +) -> Result { + let mssql_pool = create_mssql_pool(configuration).await.unwrap(); + + let tables_row = select_first_row(&mssql_pool, TABLE_CONFIGURATION_QUERY).await; let decoded: Vec = - serde_json::from_str(row.get(0).unwrap()).unwrap(); + serde_json::from_str(tables_row.get(0).unwrap()).unwrap(); let mut metadata = query_engine_metadata::metadata::Metadata::default(); + metadata.comparison_operators = get_comparison_operators(&mssql_pool).await; + metadata.tables = get_tables_info(decoded); metadata.native_queries = configuration.metadata.native_queries.clone(); @@ -133,6 +144,115 @@ pub async fn configure( }) } +#[derive(Deserialize, Debug)] +struct TypeItem { + name: database::ScalarType, +} + +// we lookup all types in sys.types, then use our hardcoded ideas about each one to attach +// comparison operators +async fn get_comparison_operators( + mssql_pool: &bb8::Pool, +) -> database::ComparisonOperators { + let types_row = select_first_row(mssql_pool, TYPES_QUERY).await; + + let decoded: Vec = serde_json::from_str(types_row.get(0).unwrap()).unwrap(); + + let mut comparison_operators = BTreeMap::new(); + + for type_name in decoded { + comparison_operators.insert( + type_name.name.clone(), + get_comparison_operators_for_type(type_name.name), + ); + } + database::ComparisonOperators(comparison_operators) +} + +const CHARACTER_STRINGS: [&str; 3] = ["char", "text", "varchar"]; +const UNICODE_CHARACTER_STRINGS: [&str; 3] = ["nchar", "ntext", "nvarchar"]; +const CANNOT_COMPARE: [&str; 3] = ["text", "ntext", "image"]; + +// we hard code these, essentially +// we look up available types in `sys.types` but hard code their behaviour by looking them up below +// categories taken from https://learn.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql +fn get_comparison_operators_for_type( + type_name: database::ScalarType, +) -> BTreeMap { + let mut comparison_operators = BTreeMap::new(); + + // in ndc-spec, all things can be `==` + comparison_operators.insert( + "_eq".to_string(), + database::ComparisonOperator { + operator_name: "=".to_string(), + argument_type: type_name.clone(), + }, + ); + + // include LIKE and NOT LIKE for string-ish types + if CHARACTER_STRINGS.contains(&type_name.0.as_str()) + || UNICODE_CHARACTER_STRINGS.contains(&type_name.0.as_str()) + { + comparison_operators.insert( + "_like".to_string(), + database::ComparisonOperator { + operator_name: "LIKE".to_string(), + argument_type: type_name.clone(), + }, + ); + comparison_operators.insert( + "_nlike".to_string(), + database::ComparisonOperator { + operator_name: "NOT LIKE".to_string(), + argument_type: type_name.clone(), + }, + ); + } + + // include comparison operators for types that are comparable, according to + // https://learn.microsoft.com/en-us/sql/t-sql/language-elements/comparison-operators-transact-sql?view=sql-server-ver16 + if !CANNOT_COMPARE.contains(&type_name.0.as_str()) { + comparison_operators.insert( + "_neq".to_string(), + database::ComparisonOperator { + operator_name: "!=".to_string(), + argument_type: type_name.clone(), + }, + ); + comparison_operators.insert( + "_lt".to_string(), + database::ComparisonOperator { + operator_name: "<".to_string(), + argument_type: type_name.clone(), + }, + ); + comparison_operators.insert( + "_gt".to_string(), + database::ComparisonOperator { + operator_name: ">".to_string(), + argument_type: type_name.clone(), + }, + ); + + comparison_operators.insert( + "_gte".to_string(), + database::ComparisonOperator { + operator_name: ">=".to_string(), + argument_type: type_name.clone(), + }, + ); + comparison_operators.insert( + "_lte".to_string(), + database::ComparisonOperator { + operator_name: "<=".to_string(), + argument_type: type_name, + }, + ); + } + comparison_operators +} + fn get_tables_info( introspection_tables: Vec, ) -> database::TablesInfo { diff --git a/crates/ndc-sqlserver/tests/configuration_tests.rs b/crates/ndc-sqlserver/tests/configuration_tests.rs new file mode 100644 index 00000000..f8f209a8 --- /dev/null +++ b/crates/ndc-sqlserver/tests/configuration_tests.rs @@ -0,0 +1,71 @@ +use std::fs; +use std::path::{Path, PathBuf}; + +use ndc_sqlserver::configuration; +use similar_asserts::assert_eq; + +const CONNECTION_STRING: &str ="DRIVER={ODBC Driver 18 for SQL Server};SERVER=127.0.0.1,64003;Uid=SA;Database=Chinook;Pwd=Password!"; + +const CHINOOK_DEPLOYMENT_PATH: &str = "static/chinook-deployment.json"; + +#[tokio::test] +async fn test_configure_is_idempotent() { + configure_is_idempotent(CONNECTION_STRING, CHINOOK_DEPLOYMENT_PATH).await +} + +// Tests that configuration generation has not changed. +// +// This test does not use insta snapshots because it checks the deployment file that is shared with +// other tests. +// +// If you have changed it intentionally, run `just generate-chinook-configuration`. +pub async fn configure_is_idempotent( + connection_string: &str, + chinook_deployment_path: impl AsRef, +) { + let expected_value = read_configuration(chinook_deployment_path); + + let mut args: configuration::RawConfiguration = serde_json::from_value(expected_value.clone()) + .expect("Unable to deserialize as RawConfiguration"); + + args.mssql_connection_string = connection_string.to_string(); + + let actual = configuration::configure(&args) + .await + .expect("configuration::configure"); + + let actual_value = serde_json::to_value(actual).expect("serde_json::to_value"); + + assert_eq!(expected_value, actual_value); +} + +pub async fn configure_initial_configuration_is_unchanged( + connection_string: &str, +) -> ndc_sqlserver::configuration::RawConfiguration { + let args = configuration::RawConfiguration { + mssql_connection_string: connection_string.to_string(), + + ..configuration::RawConfiguration::empty() + }; + + configuration::configure(&args) + .await + .expect("configuration::configure") +} + +fn read_configuration(chinook_deployment_path: impl AsRef) -> serde_json::Value { + let file = fs::File::open(get_path_from_project_root(chinook_deployment_path)) + .expect("fs::File::open"); + serde_json::from_reader(file).expect("serde_json::from_reader") +} + +/// Find the project root via the crate root provided by `cargo test`, +/// and get our single static configuration file. +/// This depends on the convention that all our crates live in `/crates/` +/// and will break in the unlikely case that we change this +pub fn get_path_from_project_root(deployment_path: impl AsRef) -> PathBuf { + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("../../"); + d.push(deployment_path); + d +} diff --git a/crates/ndc-sqlserver/tests/snapshots/schema_tests__get_schema.snap b/crates/ndc-sqlserver/tests/snapshots/schema_tests__get_schema.snap index c3a6cf59..91ded408 100644 --- a/crates/ndc-sqlserver/tests/snapshots/schema_tests__get_schema.snap +++ b/crates/ndc-sqlserver/tests/snapshots/schema_tests__get_schema.snap @@ -5,64 +5,8 @@ expression: result { "scalar_types": { "bool": { - "aggregate_functions": { - "bool_and": { - "result_type": { - "type": "named", - "name": "bool" - } - }, - "bool_or": { - "result_type": { - "type": "named", - "name": "bool" - } - }, - "every": { - "result_type": { - "type": "named", - "name": "bool" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "bool" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "bool" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "bool" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "bool" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "bool" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "bool" - } - } - }, + "aggregate_functions": {}, + "comparison_operators": {}, "update_operators": {} }, "char": { @@ -86,18 +30,6 @@ expression: result "name": "char" } }, - "_ilike": { - "argument_type": { - "type": "named", - "name": "char" - } - }, - "_iregex": { - "argument_type": { - "type": "named", - "name": "char" - } - }, "_like": { "argument_type": { "type": "named", @@ -122,54 +54,17 @@ expression: result "name": "char" } }, - "_nilike": { - "argument_type": { - "type": "named", - "name": "char" - } - }, - "_niregex": { - "argument_type": { - "type": "named", - "name": "char" - } - }, "_nlike": { "argument_type": { "type": "named", "name": "char" } - }, - "_nregex": { - "argument_type": { - "type": "named", - "name": "char" - } - }, - "_regex": { - "argument_type": { - "type": "named", - "name": "char" - } } }, "update_operators": {} }, "date": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "date" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "date" - } - } - }, + "aggregate_functions": {}, "comparison_operators": { "_eq": { "argument_type": { @@ -210,1519 +105,410 @@ expression: result }, "update_operators": {} }, - "float4": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "float4" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "float4" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "stddev_pop": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "stddev_samp": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "sum": { - "result_type": { - "type": "named", - "name": "float4" - } - }, - "var_pop": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "var_samp": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "variance": { - "result_type": { - "type": "named", - "name": "float8" - } - } - }, + "datetime": { + "aggregate_functions": {}, "comparison_operators": { "_eq": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } }, "_gt": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } }, "_gte": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } }, "_lt": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } }, "_lte": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } }, "_neq": { "argument_type": { "type": "named", - "name": "float4" + "name": "datetime" } } }, "update_operators": {} }, + "float4": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, "float8": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "float8" - } - }, - "stddev_pop": { - "result_type": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, + "int": { + "aggregate_functions": {}, + "comparison_operators": { + "_eq": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } }, - "stddev_samp": { - "result_type": { + "_gt": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } }, - "sum": { - "result_type": { + "_gte": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } }, - "var_pop": { - "result_type": { + "_lt": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } }, - "var_samp": { - "result_type": { + "_lte": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } }, - "variance": { - "result_type": { + "_neq": { + "argument_type": { "type": "named", - "name": "float8" + "name": "int" } } }, + "update_operators": {} + }, + "int2": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, + "int8": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, + "numeric": { + "aggregate_functions": {}, "comparison_operators": { "_eq": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } }, "_gt": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } }, "_gte": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } }, "_lt": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } }, "_lte": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } }, "_neq": { "argument_type": { "type": "named", - "name": "float8" + "name": "numeric" } } }, "update_operators": {} }, - "int": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "bit_and": { - "result_type": { - "type": "named", - "name": "int" - } - }, - "bit_or": { - "result_type": { + "nvarchar": { + "aggregate_functions": {}, + "comparison_operators": { + "_eq": { + "argument_type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "bit_xor": { - "result_type": { + "_gt": { + "argument_type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "max": { - "result_type": { + "_gte": { + "argument_type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "min": { - "result_type": { + "_like": { + "argument_type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "stddev": { - "result_type": { + "_lt": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "nvarchar" } }, - "stddev_pop": { - "result_type": { + "_lte": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "nvarchar" } }, - "stddev_samp": { - "result_type": { + "_neq": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "nvarchar" } }, - "sum": { - "result_type": { + "_nlike": { + "argument_type": { "type": "named", - "name": "int8" + "name": "nvarchar" } - }, - "var_pop": { - "result_type": { + } + }, + "update_operators": {} + }, + "text": { + "aggregate_functions": {}, + "comparison_operators": { + "_eq": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "text" } }, - "var_samp": { - "result_type": { + "_like": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "text" } }, - "variance": { - "result_type": { + "_nlike": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "text" } } }, + "update_operators": {} + }, + "time": { + "aggregate_functions": {}, "comparison_operators": { "_eq": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } }, "_gt": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } }, "_gte": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } }, "_lt": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } }, "_lte": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } }, "_neq": { "argument_type": { "type": "named", - "name": "int" + "name": "time" } } }, "update_operators": {} }, - "int2": { - "aggregate_functions": { - "avg": { - "result_type": { + "timestamp": { + "aggregate_functions": {}, + "comparison_operators": { + "_eq": { + "argument_type": { "type": "named", - "name": "numeric" + "name": "timestamp" } }, - "bit_and": { - "result_type": { + "_gt": { + "argument_type": { "type": "named", - "name": "int2" - } - }, - "bit_or": { - "result_type": { - "type": "named", - "name": "int2" - } - }, - "bit_xor": { - "result_type": { - "type": "named", - "name": "int2" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "int2" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "int2" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "sum": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "var_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "variance": { - "result_type": { - "type": "named", - "name": "numeric" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "int2" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "int2" + "name": "timestamp" } }, "_gte": { "argument_type": { "type": "named", - "name": "int2" + "name": "timestamp" } }, "_lt": { "argument_type": { "type": "named", - "name": "int2" + "name": "timestamp" } }, "_lte": { "argument_type": { "type": "named", - "name": "int2" + "name": "timestamp" } }, "_neq": { "argument_type": { "type": "named", - "name": "int2" + "name": "timestamp" } } }, "update_operators": {} }, - "int8": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "bit_and": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "bit_or": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "bit_xor": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "int8" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "sum": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "variance": { - "result_type": { - "type": "named", - "name": "numeric" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "int8" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "int8" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "int8" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "int8" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "int8" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "int8" - } - } - }, + "timestamptz": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, + "timetz": { + "aggregate_functions": {}, + "comparison_operators": {}, + "update_operators": {} + }, + "uuid": { + "aggregate_functions": {}, + "comparison_operators": {}, "update_operators": {} }, - "name": { + "varchar": { "aggregate_functions": {}, "comparison_operators": { "_eq": { "argument_type": { "type": "named", - "name": "name" + "name": "varchar" } }, "_gt": { "argument_type": { "type": "named", - "name": "name" + "name": "varchar" } }, "_gte": { "argument_type": { "type": "named", - "name": "name" - } - }, - "_ilike": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_iregex": { - "argument_type": { - "type": "named", - "name": "name" + "name": "varchar" } }, "_like": { "argument_type": { "type": "named", - "name": "name" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_nilike": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_niregex": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_nlike": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_nregex": { - "argument_type": { - "type": "named", - "name": "name" - } - }, - "_regex": { - "argument_type": { - "type": "named", - "name": "name" - } - } - }, - "update_operators": {} - }, - "numeric": { - "aggregate_functions": { - "avg": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "max": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "stddev_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "sum": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_pop": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "var_samp": { - "result_type": { - "type": "named", - "name": "numeric" - } - }, - "variance": { - "result_type": { - "type": "named", - "name": "numeric" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "numeric" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "numeric" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "numeric" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "numeric" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "numeric" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "numeric" - } - } - }, - "update_operators": {} - }, - "text": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "text" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "text" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_ilike": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_iregex": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_like": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_nilike": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_niregex": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_nlike": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_nregex": { - "argument_type": { - "type": "named", - "name": "text" - } - }, - "_regex": { - "argument_type": { - "type": "named", - "name": "text" - } - } - }, - "update_operators": {} - }, - "time": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "time" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "time" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "time" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "time" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "time" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "time" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "time" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "time" - } - } - }, - "update_operators": {} - }, - "timestamp": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "timestamp" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "timestamp" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "timestamp" - } - } - }, - "update_operators": {} - }, - "timestamptz": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "timestamptz" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "timestamptz" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "timestamptz" - } - } - }, - "update_operators": {} - }, - "timetz": { - "aggregate_functions": { - "max": { - "result_type": { - "type": "named", - "name": "timetz" - } - }, - "min": { - "result_type": { - "type": "named", - "name": "timetz" - } - } - }, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "timetz" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "timetz" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "timetz" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "timetz" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "timetz" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "timetz" - } - } - }, - "update_operators": {} - }, - "uuid": { - "aggregate_functions": {}, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "uuid" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "uuid" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "uuid" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "uuid" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "uuid" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "uuid" - } - } - }, - "update_operators": {} - }, - "varchar": { - "aggregate_functions": {}, - "comparison_operators": { - "_eq": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_gt": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_gte": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_ilike": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_iregex": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_like": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_lt": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_lte": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_neq": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_nilike": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_niregex": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_nlike": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_nregex": { - "argument_type": { - "type": "named", - "name": "varchar" - } - }, - "_regex": { - "argument_type": { - "type": "named", - "name": "varchar" - } - } - }, - "update_operators": {} - } - }, - "object_types": { - "Album": { - "description": "The record of all albums", - "fields": { - "AlbumId": { - "description": "The identifier of an album", - "type": { - "type": "named", - "name": "int" - } - }, - "ArtistId": { - "description": "The id of the artist that authored the album", - "type": { - "type": "named", - "name": "int" - } - }, - "Title": { - "description": "The title of an album", - "type": { - "type": "named", - "name": "varchar" - } - } - } - }, - "Artist": { - "description": "The record of all artists", - "fields": { - "ArtistId": { - "description": "The identifier of an artist", - "type": { - "type": "named", - "name": "int" - } - }, - "Name": { - "description": "The name of an artist", - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - } - } - }, - "Customer": { - "description": "The record of all customers", - "fields": { - "Address": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "City": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "Company": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "Country": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "CustomerId": { - "description": "The identifier of customer", - "type": { - "type": "named", - "name": "int" - } - }, - "Email": { - "type": { - "type": "named", - "name": "varchar" - } - }, - "Fax": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "FirstName": { - "description": "The first name of a customer", - "type": { - "type": "named", - "name": "varchar" - } - }, - "LastName": { - "description": "The last name of a customer", - "type": { - "type": "named", - "name": "varchar" - } - }, - "Phone": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "PostalCode": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "State": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "SupportRepId": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int" - } - } - } - } - }, - "Employee": { - "fields": { - "Address": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "BirthDate": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "timestamp" - } - } - }, - "City": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "Country": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "Email": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "EmployeeId": { - "type": { - "type": "named", - "name": "int" - } - }, - "Fax": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "FirstName": { - "type": { - "type": "named", - "name": "varchar" - } - }, - "HireDate": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "timestamp" - } + "name": "varchar" } }, - "LastName": { - "type": { + "_lt": { + "argument_type": { "type": "named", "name": "varchar" } }, - "Phone": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } + "_lte": { + "argument_type": { + "type": "named", + "name": "varchar" } }, - "PostalCode": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } + "_neq": { + "argument_type": { + "type": "named", + "name": "varchar" } }, - "ReportsTo": { + "_nlike": { + "argument_type": { + "type": "named", + "name": "varchar" + } + } + }, + "update_operators": {} + } + }, + "object_types": { + "Album": { + "fields": { + "AlbumId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int" - } + "type": "named", + "name": "int" } }, - "State": { + "ArtistId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } + "type": "named", + "name": "int" } }, "Title": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } + "type": "named", + "name": "nvarchar" } } } }, - "Genre": { + "Artist": { "fields": { - "GenreId": { + "ArtistId": { "type": { "type": "named", "name": "int" @@ -1733,56 +519,47 @@ expression: result "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } } } }, - "Invoice": { + "Customer": { "fields": { - "BillingAddress": { - "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "varchar" - } - } - }, - "BillingCity": { + "Address": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, - "BillingCountry": { + "City": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, - "BillingPostalCode": { + "Company": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, - "BillingState": { + "Country": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, @@ -1792,246 +569,207 @@ expression: result "name": "int" } }, - "InvoiceDate": { + "Email": { "type": { "type": "named", - "name": "timestamp" + "name": "nvarchar" } }, - "InvoiceId": { + "Fax": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "nvarchar" + } } }, - "Total": { - "type": { - "type": "named", - "name": "numeric" - } - } - } - }, - "InvoiceLine": { - "fields": { - "InvoiceId": { + "FirstName": { "type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "InvoiceLineId": { + "LastName": { "type": { "type": "named", - "name": "int" + "name": "nvarchar" } }, - "Quantity": { + "Phone": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "nvarchar" + } } }, - "TrackId": { + "PostalCode": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "nvarchar" + } } }, - "UnitPrice": { - "type": { - "type": "named", - "name": "numeric" - } - } - } - }, - "MediaType": { - "fields": { - "MediaTypeId": { + "State": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "nvarchar" + } } }, - "Name": { + "SupportRepId": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "int" } } } } }, - "Playlist": { + "Employee": { "fields": { - "Name": { + "Address": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, - "PlaylistId": { - "type": { - "type": "named", - "name": "int" - } - } - } - }, - "PlaylistTrack": { - "fields": { - "PlaylistId": { - "type": { - "type": "named", - "name": "int" - } - }, - "TrackId": { - "type": { - "type": "named", - "name": "int" - } - } - } - }, - "Track": { - "fields": { - "AlbumId": { + "BirthDate": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "datetime" } } }, - "Bytes": { + "City": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "Composer": { + "Country": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } }, - "GenreId": { + "Email": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "MediaTypeId": { + "EmployeeId": { "type": { "type": "named", "name": "int" } }, - "Milliseconds": { + "Fax": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "nvarchar" + } } }, - "Name": { + "FirstName": { "type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } }, - "TrackId": { + "HireDate": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "datetime" + } } }, - "UnitPrice": { + "LastName": { "type": { "type": "named", - "name": "numeric" + "name": "nvarchar" } - } - } - }, - "album_by_title": { - "fields": { - "AlbumId": { + }, + "Phone": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "ArtistId": { + "PostalCode": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "Title": { + "ReportsTo": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "int" } } - } - } - }, - "artist": { - "fields": { - "ArtistId": { + }, + "State": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "Name": { + "Title": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } } } }, - "artist_below_id": { + "Genre": { "fields": { - "ArtistId": { + "GenreId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int" - } + "type": "named", + "name": "int" } }, "Name": { @@ -2039,127 +777,185 @@ expression: result "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } } } }, - "geography_columns": { + "Invoice": { "fields": { - "coord_dimension": { + "BillingAddress": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "int" + "name": "nvarchar" } } }, - "f_geography_column": { + "BillingCity": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "nvarchar" } } }, - "f_table_catalog": { + "BillingCountry": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "nvarchar" } } }, - "f_table_name": { + "BillingPostalCode": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "nvarchar" } } }, - "f_table_schema": { + "BillingState": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "nvarchar" } } }, - "srid": { + "CustomerId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int" - } + "type": "named", + "name": "int" } }, - "type": { + "InvoiceDate": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "text" - } + "type": "named", + "name": "datetime" + } + }, + "InvoiceId": { + "type": { + "type": "named", + "name": "int" + } + }, + "Total": { + "type": { + "type": "named", + "name": "numeric" } } } }, - "geometry_columns": { + "InvoiceLine": { "fields": { - "coord_dimension": { + "InvoiceId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "int" - } + "type": "named", + "name": "int" } }, - "f_geometry_column": { + "InvoiceLineId": { "type": { - "type": "nullable", - "underlying_type": { - "type": "named", - "name": "name" - } + "type": "named", + "name": "int" + } + }, + "Quantity": { + "type": { + "type": "named", + "name": "int" } }, - "f_table_catalog": { + "TrackId": { + "type": { + "type": "named", + "name": "int" + } + }, + "UnitPrice": { + "type": { + "type": "named", + "name": "numeric" + } + } + } + }, + "MediaType": { + "fields": { + "MediaTypeId": { + "type": { + "type": "named", + "name": "int" + } + }, + "Name": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } - }, - "f_table_name": { + } + } + }, + "Playlist": { + "fields": { + "Name": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "nvarchar" } } }, - "f_table_schema": { + "PlaylistId": { + "type": { + "type": "named", + "name": "int" + } + } + } + }, + "PlaylistTrack": { + "fields": { + "PlaylistId": { + "type": { + "type": "named", + "name": "int" + } + }, + "TrackId": { + "type": { + "type": "named", + "name": "int" + } + } + } + }, + "Track": { + "fields": { + "AlbumId": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "name" + "name": "int" } } }, - "srid": { + "Bytes": { "type": { "type": "nullable", "underlying_type": { @@ -2168,20 +964,16 @@ expression: result } } }, - "type": { + "Composer": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } } - } - } - }, - "layer": { - "fields": { - "child_id": { + }, + "GenreId": { "type": { "type": "nullable", "underlying_type": { @@ -2190,62 +982,50 @@ expression: result } } }, - "feature_column": { - "type": { - "type": "named", - "name": "varchar" - } - }, - "feature_type": { - "type": { - "type": "named", - "name": "int" - } - }, - "layer_id": { + "MediaTypeId": { "type": { "type": "named", "name": "int" } }, - "level": { + "Milliseconds": { "type": { "type": "named", "name": "int" } }, - "schema_name": { + "Name": { "type": { "type": "named", - "name": "varchar" + "name": "nvarchar" } }, - "table_name": { + "TrackId": { "type": { "type": "named", - "name": "varchar" + "name": "int" } }, - "topology_id": { + "UnitPrice": { "type": { "type": "named", - "name": "int" + "name": "numeric" } } } }, - "spatial_ref_sys": { + "album_by_title": { "fields": { - "auth_name": { + "AlbumId": { "type": { "type": "nullable", "underlying_type": { "type": "named", - "name": "varchar" + "name": "int" } } }, - "auth_srid": { + "ArtistId": { "type": { "type": "nullable", "underlying_type": { @@ -2254,7 +1034,7 @@ expression: result } } }, - "proj4text": { + "Title": { "type": { "type": "nullable", "underlying_type": { @@ -2262,14 +1042,21 @@ expression: result "name": "varchar" } } - }, - "srid": { + } + } + }, + "artist": { + "fields": { + "ArtistId": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int" + } } }, - "srtext": { + "Name": { "type": { "type": "nullable", "underlying_type": { @@ -2280,36 +1067,24 @@ expression: result } } }, - "topology": { + "artist_below_id": { "fields": { - "hasz": { - "type": { - "type": "named", - "name": "bool" - } - }, - "id": { - "type": { - "type": "named", - "name": "int" - } - }, - "name": { - "type": { - "type": "named", - "name": "varchar" - } - }, - "precision": { + "ArtistId": { "type": { - "type": "named", - "name": "float8" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "int" + } } }, - "srid": { + "Name": { "type": { - "type": "named", - "name": "int" + "type": "nullable", + "underlying_type": { + "type": "named", + "name": "varchar" + } } } } @@ -2466,7 +1241,6 @@ expression: result "collections": [ { "name": "Album", - "description": "The record of all albums", "arguments": {}, "type": "Album", "deletable": false, @@ -2478,7 +1252,7 @@ expression: result } }, "foreign_keys": { - "FK_AlbumArtistId": { + "FK_ArtistId0": { "column_mapping": { "ArtistId": "ArtistId" }, @@ -2488,7 +1262,6 @@ expression: result }, { "name": "Artist", - "description": "The record of all artists", "arguments": {}, "type": "Artist", "deletable": false, @@ -2503,7 +1276,6 @@ expression: result }, { "name": "Customer", - "description": "The record of all customers", "arguments": {}, "type": "Customer", "deletable": false, @@ -2515,7 +1287,7 @@ expression: result } }, "foreign_keys": { - "FK_CustomerSupportRepId": { + "FK_SupportRepId0": { "column_mapping": { "SupportRepId": "EmployeeId" }, @@ -2536,7 +1308,7 @@ expression: result } }, "foreign_keys": { - "FK_EmployeeReportsTo": { + "FK_ReportsTo0": { "column_mapping": { "ReportsTo": "EmployeeId" }, @@ -2571,7 +1343,7 @@ expression: result } }, "foreign_keys": { - "FK_InvoiceCustomerId": { + "FK_CustomerId0": { "column_mapping": { "CustomerId": "CustomerId" }, @@ -2592,13 +1364,13 @@ expression: result } }, "foreign_keys": { - "FK_InvoiceLineInvoiceId": { + "FK_InvoiceId0": { "column_mapping": { "InvoiceId": "InvoiceId" }, "foreign_collection": "Invoice" }, - "FK_InvoiceLineTrackId": { + "FK_TrackId0": { "column_mapping": { "TrackId": "TrackId" }, @@ -2648,13 +1420,13 @@ expression: result } }, "foreign_keys": { - "FK_PlaylistTrackPlaylistId": { + "FK_PlaylistId0": { "column_mapping": { "PlaylistId": "PlaylistId" }, "foreign_collection": "Playlist" }, - "FK_PlaylistTrackTrackId": { + "FK_TrackId0": { "column_mapping": { "TrackId": "TrackId" }, @@ -2675,19 +1447,19 @@ expression: result } }, "foreign_keys": { - "FK_TrackAlbumId": { + "FK_AlbumId0": { "column_mapping": { "AlbumId": "AlbumId" }, "foreign_collection": "Album" }, - "FK_TrackGenreId": { + "FK_GenreId0": { "column_mapping": { "GenreId": "GenreId" }, "foreign_collection": "Genre" }, - "FK_TrackMediaTypeId": { + "FK_MediaTypeId0": { "column_mapping": { "MediaTypeId": "MediaTypeId" }, @@ -2695,84 +1467,6 @@ expression: result } } }, - { - "name": "geography_columns", - "arguments": {}, - "type": "geography_columns", - "deletable": false, - "uniqueness_constraints": {}, - "foreign_keys": {} - }, - { - "name": "geometry_columns", - "arguments": {}, - "type": "geometry_columns", - "deletable": false, - "uniqueness_constraints": {}, - "foreign_keys": {} - }, - { - "name": "layer", - "arguments": {}, - "type": "layer", - "deletable": false, - "uniqueness_constraints": { - "layer_pkey": { - "unique_columns": [ - "layer_id", - "topology_id" - ] - }, - "layer_schema_name_table_name_feature_column_key": { - "unique_columns": [ - "feature_column", - "schema_name", - "table_name" - ] - } - }, - "foreign_keys": { - "layer_topology_id_fkey": { - "column_mapping": { - "topology_id": "id" - }, - "foreign_collection": "topology" - } - } - }, - { - "name": "spatial_ref_sys", - "arguments": {}, - "type": "spatial_ref_sys", - "deletable": false, - "uniqueness_constraints": { - "spatial_ref_sys_pkey": { - "unique_columns": [ - "srid" - ] - } - }, - "foreign_keys": {} - }, - { - "name": "topology", - "arguments": {}, - "type": "topology", - "deletable": false, - "uniqueness_constraints": { - "topology_name_key": { - "unique_columns": [ - "name" - ] - }, - "topology_pkey": { - "unique_columns": [ - "id" - ] - } - }, - "foreign_keys": {} - }, { "name": "album_by_title", "arguments": { diff --git a/justfile b/justfile index 388ee532..5f088dbb 100644 --- a/justfile +++ b/justfile @@ -34,10 +34,14 @@ dev-config: start-dependencies RUST_LOG=DEBUG \ cargo watch -i "tests/snapshots/*" \ -c \ - -x test \ -x clippy \ -x 'run -- configuration serve' +# re-generate the deployment configuration file +generate-chinook-configuration: build start-dependencies + ./scripts/archive-old-deployment.sh '{{CHINOOK_DEPLOYMENT}}' + ./scripts/generate-chinook-configuration.sh 'ndc-sqlserver' '{{SQLSERVER_CONNECTION_STRING}}' '{{CHINOOK_DEPLOYMENT}}' + test-introspection: #!/bin/bash diff --git a/scripts/archive-old-deployment.sh b/scripts/archive-old-deployment.sh new file mode 100755 index 00000000..1f4adf65 --- /dev/null +++ b/scripts/archive-old-deployment.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -e -u -o pipefail + +# before we generate a new deployment, save the current one in +# `/static/deployment-snapshots` so we can ensure they can all be read over +# time + +CHINOOK_DEPLOYMENT="$1" + +CURRENT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" > /dev/null && echo "$PWD")" + +SNAPSHOT_DIR="$(realpath ${CURRENT_DIR}/../static/deployment-snapshots)" + +# create snapshot dir if does not exist +mkdir -p "$SNAPSHOT_DIR" + +# create filename from hash of contents +NEW_FILENAME="$(sha256sum "${CHINOOK_DEPLOYMENT}" | cut -f1 -d' ').json" + +# copy current deployment to new filename +cp "${CHINOOK_DEPLOYMENT}" "${SNAPSHOT_DIR}/${NEW_FILENAME}" diff --git a/scripts/generate-chinook-configuration.sh b/scripts/generate-chinook-configuration.sh new file mode 100755 index 00000000..4d54883f --- /dev/null +++ b/scripts/generate-chinook-configuration.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -e -u -o pipefail + +CURRENT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" > /dev/null && echo "$PWD")" + +EXECUTABLE="$1" +CONNECTION_STRING="$2" +CHINOOK_DEPLOYMENT="$3" + +# ensure we clean up +function stop { + if [[ "${CONFIGURATION_SERVER_PID+x}" ]]; then + kill "$CONFIGURATION_SERVER_PID" + fi + if [[ "${NEW_FILE+x}" ]]; then + rm -f "$NEW_FILE" + fi +} + +trap stop EXIT + +# start the configuration server +cargo run --bin "$EXECUTABLE" --quiet -- configuration serve & +CONFIGURATION_SERVER_PID=$! +./scripts/wait-until --timeout=30 --report -- cargo run --bin "$EXECUTABLE" --quiet -- check-health --port=9100 +if ! kill -0 "$CONFIGURATION_SERVER_PID"; then + echo >&2 'The server stopped abruptly.' + exit 1 +fi + +# We want to preserve the connectionUri unchanged in the deployment file, for secrets templating purposes +PRESERVED_DATA="$(jq '{"mssql_connection_string": .mssql_connection_string}' "$CHINOOK_DEPLOYMENT")" + +# Native queries should inform the initial configuration call +INITIAL_DATA="$(jq '{"metadata": {"nativeQueries": .metadata.nativeQueries}}' "$CHINOOK_DEPLOYMENT")" + +# create a temporary file for the output so we don't overwrite data by accident +NEW_FILE="$(mktemp)" + +# 1. Generate the configuration +# 2. Splice in the preserved data from above +# 3. Format the file +# +# Because we `set -o pipefail` above, this will fail if any of the steps fail, +# and we will abort without overwriting the original file. +"${CURRENT_DIR}/new-configuration.sh" 'localhost:9100' "$CONNECTION_STRING" "$INITIAL_DATA" \ + | jq --argjson preserved_data "$PRESERVED_DATA" '. + $preserved_data' \ + | prettier --parser=json \ + > "$NEW_FILE" + +# If the above command succeeded, overwrite the original file. +mv -f "$NEW_FILE" "$CHINOOK_DEPLOYMENT" diff --git a/scripts/new-configuration.sh b/scripts/new-configuration.sh new file mode 100755 index 00000000..76e14ddc --- /dev/null +++ b/scripts/new-configuration.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + +CURRENT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" > /dev/null && echo "$PWD")" + +if [[ $# -lt 2 ]]; then + echo >&2 "Usage: $0 CONFIGURATION-SERVER SQLSERVER-CONNECTION-URI [EXTRA-CONFIG]" + echo >&2 + echo >&2 ' The configuration server should be in the form "HOST:PORT".' + exit 2 +fi + +export CONFIGURATION_SERVER="$1" # exported to use in the `wait-until` call +SQLSERVER_CONNECTION_URI="$2" +EXTRA_CONFIG="${3:-{\}}" # this defaults to '{}' + +# wait until the server is up and running +"${CURRENT_DIR}/wait-until" --timeout=30 --report -- sh -c 'curl -fsS "http://${CONFIGURATION_SERVER}/health" > /dev/null' + +function get { + # write HTTP responses to this file + OUTPUT_FILE="$(mktemp)" + trap 'rm -f "$OUTPUT_FILE"' RETURN + + # capture the status in the variable, and the body in $OUTPUT_FILE + response_status="$(curl --silent --output "$OUTPUT_FILE" --write-out '%{http_code}\n' "$@")" + if [[ "$response_status" -ge 200 && "$response_status" -lt 300 ]]; then + cat "$OUTPUT_FILE" + else + # on failure, log the response status and body + echo >&2 "Request to ${1} failed with status ${response_status}." + echo >&2 "Response body:" + cat "$OUTPUT_FILE" >&2 + echo >&2 + echo >&2 + return 1 + fi +} + +# 1. Get an empty configuration. +# 2. Splice in the connection URI and extra config. +# 3. Send that configuration back to get the real thing. +# 4. Reformat with `jq`. +# 5. Print the generated configuration to STDOUT. +get "http://${CONFIGURATION_SERVER}/" \ + | jq --arg uri "$SQLSERVER_CONNECTION_URI" --argjson extra "$EXTRA_CONFIG" '. * $extra + {"mssql_connection_string": $uri}' \ + | get "http://${CONFIGURATION_SERVER}/" -H 'Content-Type: application/json' -d @- \ + | jq . diff --git a/static/chinook-deployment.json b/static/chinook-deployment.json index 6a40ebd9..1805d2f2 100644 --- a/static/chinook-deployment.json +++ b/static/chinook-deployment.json @@ -11,33 +11,33 @@ "name": "AlbumId", "type": "int", "nullable": "nonNullable", - "description": "The identifier of an album" + "description": null }, "ArtistId": { "name": "ArtistId", "type": "int", "nullable": "nonNullable", - "description": "The id of the artist that authored the album" + "description": null }, "Title": { "name": "Title", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", - "description": "The title of an album" + "description": null } }, "uniquenessConstraints": { "PK_Album": ["AlbumId"] }, "foreignRelations": { - "FK_AlbumArtistId": { + "FK_ArtistId0": { "foreignTable": "Artist", "columnMapping": { "ArtistId": "ArtistId" } } }, - "description": "The record of all albums" + "description": null }, "Artist": { "schemaName": "dbo", @@ -47,20 +47,20 @@ "name": "ArtistId", "type": "int", "nullable": "nonNullable", - "description": "The identifier of an artist" + "description": null }, "Name": { "name": "Name", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", - "description": "The name of an artist" + "description": null } }, "uniquenessConstraints": { "PK_Artist": ["ArtistId"] }, "foreignRelations": {}, - "description": "The record of all artists" + "description": null }, "Customer": { "schemaName": "dbo", @@ -68,25 +68,25 @@ "columns": { "Address": { "name": "Address", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "City": { "name": "City", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "Company": { "name": "Company", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "Country": { "name": "Country", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -94,47 +94,47 @@ "name": "CustomerId", "type": "int", "nullable": "nonNullable", - "description": "The identifier of customer" + "description": null }, "Email": { "name": "Email", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", "description": null }, "Fax": { "name": "Fax", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "FirstName": { "name": "FirstName", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", - "description": "The first name of a customer" + "description": null }, "LastName": { "name": "LastName", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", - "description": "The last name of a customer" + "description": null }, "Phone": { "name": "Phone", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "PostalCode": { "name": "PostalCode", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "State": { "name": "State", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -149,14 +149,14 @@ "PK_Customer": ["CustomerId"] }, "foreignRelations": { - "FK_CustomerSupportRepId": { + "FK_SupportRepId0": { "foreignTable": "Employee", "columnMapping": { "SupportRepId": "EmployeeId" } } }, - "description": "The record of all customers" + "description": null }, "Employee": { "schemaName": "dbo", @@ -164,31 +164,31 @@ "columns": { "Address": { "name": "Address", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "BirthDate": { "name": "BirthDate", - "type": "timestamp", + "type": "datetime", "nullable": "nullable", "description": null }, "City": { "name": "City", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "Country": { "name": "Country", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "Email": { "name": "Email", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -200,37 +200,37 @@ }, "Fax": { "name": "Fax", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "FirstName": { "name": "FirstName", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", "description": null }, "HireDate": { "name": "HireDate", - "type": "timestamp", + "type": "datetime", "nullable": "nullable", "description": null }, "LastName": { "name": "LastName", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", "description": null }, "Phone": { "name": "Phone", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "PostalCode": { "name": "PostalCode", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -242,13 +242,13 @@ }, "State": { "name": "State", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "Title": { "name": "Title", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null } @@ -257,7 +257,7 @@ "PK_Employee": ["EmployeeId"] }, "foreignRelations": { - "FK_EmployeeReportsTo": { + "FK_ReportsTo0": { "foreignTable": "Employee", "columnMapping": { "ReportsTo": "EmployeeId" @@ -278,7 +278,7 @@ }, "Name": { "name": "Name", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null } @@ -295,31 +295,31 @@ "columns": { "BillingAddress": { "name": "BillingAddress", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "BillingCity": { "name": "BillingCity", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "BillingCountry": { "name": "BillingCountry", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "BillingPostalCode": { "name": "BillingPostalCode", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, "BillingState": { "name": "BillingState", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -331,7 +331,7 @@ }, "InvoiceDate": { "name": "InvoiceDate", - "type": "timestamp", + "type": "datetime", "nullable": "nonNullable", "description": null }, @@ -352,7 +352,7 @@ "PK_Invoice": ["InvoiceId"] }, "foreignRelations": { - "FK_InvoiceCustomerId": { + "FK_CustomerId0": { "foreignTable": "Customer", "columnMapping": { "CustomerId": "CustomerId" @@ -400,13 +400,13 @@ "PK_InvoiceLine": ["InvoiceLineId"] }, "foreignRelations": { - "FK_InvoiceLineInvoiceId": { + "FK_InvoiceId0": { "foreignTable": "Invoice", "columnMapping": { "InvoiceId": "InvoiceId" } }, - "FK_InvoiceLineTrackId": { + "FK_TrackId0": { "foreignTable": "Track", "columnMapping": { "TrackId": "TrackId" @@ -427,7 +427,7 @@ }, "Name": { "name": "Name", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null } @@ -444,7 +444,7 @@ "columns": { "Name": { "name": "Name", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -482,13 +482,13 @@ "PK_PlaylistTrack": ["PlaylistId", "TrackId"] }, "foreignRelations": { - "FK_PlaylistTrackPlaylistId": { + "FK_PlaylistId0": { "foreignTable": "Playlist", "columnMapping": { "PlaylistId": "PlaylistId" } }, - "FK_PlaylistTrackTrackId": { + "FK_TrackId0": { "foreignTable": "Track", "columnMapping": { "TrackId": "TrackId" @@ -515,7 +515,7 @@ }, "Composer": { "name": "Composer", - "type": "varchar", + "type": "nvarchar", "nullable": "nullable", "description": null }, @@ -539,7 +539,7 @@ }, "Name": { "name": "Name", - "type": "varchar", + "type": "nvarchar", "nullable": "nonNullable", "description": null }, @@ -560,19 +560,19 @@ "PK_Track": ["TrackId"] }, "foreignRelations": { - "FK_TrackAlbumId": { + "FK_AlbumId0": { "foreignTable": "Album", "columnMapping": { "AlbumId": "AlbumId" } }, - "FK_TrackGenreId": { + "FK_GenreId0": { "foreignTable": "Genre", "columnMapping": { "GenreId": "GenreId" } }, - "FK_TrackMediaTypeId": { + "FK_MediaTypeId0": { "foreignTable": "MediaType", "columnMapping": { "MediaTypeId": "MediaTypeId" @@ -580,262 +580,6 @@ } }, "description": null - }, - "geography_columns": { - "schemaName": "dbo", - "tableName": "geography_columns", - "columns": { - "coord_dimension": { - "name": "coord_dimension", - "type": "int", - "nullable": "nullable", - "description": null - }, - "f_geography_column": { - "name": "f_geography_column", - "type": "name", - "nullable": "nullable", - "description": null - }, - "f_table_catalog": { - "name": "f_table_catalog", - "type": "name", - "nullable": "nullable", - "description": null - }, - "f_table_name": { - "name": "f_table_name", - "type": "name", - "nullable": "nullable", - "description": null - }, - "f_table_schema": { - "name": "f_table_schema", - "type": "name", - "nullable": "nullable", - "description": null - }, - "srid": { - "name": "srid", - "type": "int", - "nullable": "nullable", - "description": null - }, - "type": { - "name": "type", - "type": "text", - "nullable": "nullable", - "description": null - } - }, - "uniquenessConstraints": {}, - "foreignRelations": {}, - "description": null - }, - "geometry_columns": { - "schemaName": "dbo", - "tableName": "geometry_columns", - "columns": { - "coord_dimension": { - "name": "coord_dimension", - "type": "int", - "nullable": "nullable", - "description": null - }, - "f_geometry_column": { - "name": "f_geometry_column", - "type": "name", - "nullable": "nullable", - "description": null - }, - "f_table_catalog": { - "name": "f_table_catalog", - "type": "varchar", - "nullable": "nullable", - "description": null - }, - "f_table_name": { - "name": "f_table_name", - "type": "name", - "nullable": "nullable", - "description": null - }, - "f_table_schema": { - "name": "f_table_schema", - "type": "name", - "nullable": "nullable", - "description": null - }, - "srid": { - "name": "srid", - "type": "int", - "nullable": "nullable", - "description": null - }, - "type": { - "name": "type", - "type": "varchar", - "nullable": "nullable", - "description": null - } - }, - "uniquenessConstraints": {}, - "foreignRelations": {}, - "description": null - }, - "layer": { - "schemaName": "topology", - "tableName": "layer", - "columns": { - "child_id": { - "name": "child_id", - "type": "int", - "nullable": "nullable", - "description": null - }, - "feature_column": { - "name": "feature_column", - "type": "varchar", - "nullable": "nonNullable", - "description": null - }, - "feature_type": { - "name": "feature_type", - "type": "int", - "nullable": "nonNullable", - "description": null - }, - "layer_id": { - "name": "layer_id", - "type": "int", - "nullable": "nonNullable", - "description": null - }, - "level": { - "name": "level", - "type": "int", - "nullable": "nonNullable", - "description": null - }, - "schema_name": { - "name": "schema_name", - "type": "varchar", - "nullable": "nonNullable", - "description": null - }, - "table_name": { - "name": "table_name", - "type": "varchar", - "nullable": "nonNullable", - "description": null - }, - "topology_id": { - "name": "topology_id", - "type": "int", - "nullable": "nonNullable", - "description": null - } - }, - "uniquenessConstraints": { - "layer_pkey": ["layer_id", "topology_id"], - "layer_schema_name_table_name_feature_column_key": [ - "feature_column", - "schema_name", - "table_name" - ] - }, - "foreignRelations": { - "layer_topology_id_fkey": { - "foreignTable": "topology", - "columnMapping": { - "topology_id": "id" - } - } - }, - "description": null - }, - "spatial_ref_sys": { - "schemaName": "dbo", - "tableName": "spatial_ref_sys", - "columns": { - "auth_name": { - "name": "auth_name", - "type": "varchar", - "nullable": "nullable", - "description": null - }, - "auth_srid": { - "name": "auth_srid", - "type": "int", - "nullable": "nullable", - "description": null - }, - "proj4text": { - "name": "proj4text", - "type": "varchar", - "nullable": "nullable", - "description": null - }, - "srid": { - "name": "srid", - "type": "int", - "nullable": "nonNullable", - "description": null - }, - "srtext": { - "name": "srtext", - "type": "varchar", - "nullable": "nullable", - "description": null - } - }, - "uniquenessConstraints": { - "spatial_ref_sys_pkey": ["srid"] - }, - "foreignRelations": {}, - "description": null - }, - "topology": { - "schemaName": "topology", - "tableName": "topology", - "columns": { - "hasz": { - "name": "hasz", - "type": "bool", - "nullable": "nonNullable", - "description": null - }, - "id": { - "name": "id", - "type": "int", - "nullable": "nonNullable", - "description": null - }, - "name": { - "name": "name", - "type": "varchar", - "nullable": "nonNullable", - "description": null - }, - "precision": { - "name": "precision", - "type": "float8", - "nullable": "nonNullable", - "description": null - }, - "srid": { - "name": "srid", - "type": "int", - "nullable": "nonNullable", - "description": null - } - }, - "uniquenessConstraints": { - "topology_name_key": ["name"], - "topology_pkey": ["id"] - }, - "foreignRelations": {}, - "description": null } }, "nativeQueries": { @@ -955,18 +699,18 @@ "nullable": "nullable", "description": null }, - "int2": { - "name": "int2", - "type": "int2", - "nullable": "nullable", - "description": null - }, "int": { "name": "int", "type": "int", "nullable": "nullable", "description": null }, + "int2": { + "name": "int2", + "type": "int2", + "nullable": "nullable", + "description": null + }, "int8": { "name": "int8", "type": "int8", @@ -1053,18 +797,18 @@ "nullable": "nullable", "description": null }, - "int2": { - "name": "int2", - "type": "int2", - "nullable": "nullable", - "description": null - }, "int": { "name": "int", "type": "int", "nullable": "nullable", "description": null }, + "int2": { + "name": "int2", + "type": "int2", + "nullable": "nullable", + "description": null + }, "int8": { "name": "int8", "type": "int8", @@ -1123,666 +867,687 @@ "description": null } }, - "aggregateFunctions": { - "bool": { - "bool_and": { - "returnType": "bool" + "aggregateFunctions": {}, + "comparisonOperators": { + "bigint": { + "_eq": { + "operatorName": "=", + "argumentType": "bigint" }, - "bool_or": { - "returnType": "bool" + "_gt": { + "operatorName": ">", + "argumentType": "bigint" }, - "every": { - "returnType": "bool" - } - }, - "date": { - "max": { - "returnType": "date" + "_gte": { + "operatorName": ">=", + "argumentType": "bigint" + }, + "_lt": { + "operatorName": "<", + "argumentType": "bigint" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "bigint" }, - "min": { - "returnType": "date" + "_neq": { + "operatorName": "!=", + "argumentType": "bigint" } }, - "float4": { - "avg": { - "returnType": "float8" + "binary": { + "_eq": { + "operatorName": "=", + "argumentType": "binary" }, - "max": { - "returnType": "float4" + "_gt": { + "operatorName": ">", + "argumentType": "binary" }, - "min": { - "returnType": "float4" + "_gte": { + "operatorName": ">=", + "argumentType": "binary" }, - "stddev": { - "returnType": "float8" - }, - "stddev_pop": { - "returnType": "float8" - }, - "stddev_samp": { - "returnType": "float8" - }, - "sum": { - "returnType": "float4" - }, - "var_pop": { - "returnType": "float8" + "_lt": { + "operatorName": "<", + "argumentType": "binary" }, - "var_samp": { - "returnType": "float8" + "_lte": { + "operatorName": "<=", + "argumentType": "binary" }, - "variance": { - "returnType": "float8" + "_neq": { + "operatorName": "!=", + "argumentType": "binary" } }, - "float8": { - "avg": { - "returnType": "float8" - }, - "max": { - "returnType": "float8" - }, - "min": { - "returnType": "float8" - }, - "stddev": { - "returnType": "float8" - }, - "stddev_pop": { - "returnType": "float8" + "bit": { + "_eq": { + "operatorName": "=", + "argumentType": "bit" }, - "stddev_samp": { - "returnType": "float8" + "_gt": { + "operatorName": ">", + "argumentType": "bit" }, - "sum": { - "returnType": "float8" + "_gte": { + "operatorName": ">=", + "argumentType": "bit" }, - "var_pop": { - "returnType": "float8" + "_lt": { + "operatorName": "<", + "argumentType": "bit" }, - "var_samp": { - "returnType": "float8" + "_lte": { + "operatorName": "<=", + "argumentType": "bit" }, - "variance": { - "returnType": "float8" + "_neq": { + "operatorName": "!=", + "argumentType": "bit" } }, - "int2": { - "avg": { - "returnType": "numeric" + "char": { + "_eq": { + "operatorName": "=", + "argumentType": "char" }, - "bit_and": { - "returnType": "int2" + "_gt": { + "operatorName": ">", + "argumentType": "char" }, - "bit_or": { - "returnType": "int2" + "_gte": { + "operatorName": ">=", + "argumentType": "char" }, - "bit_xor": { - "returnType": "int2" + "_like": { + "operatorName": "LIKE", + "argumentType": "char" }, - "max": { - "returnType": "int2" + "_lt": { + "operatorName": "<", + "argumentType": "char" }, - "min": { - "returnType": "int2" + "_lte": { + "operatorName": "<=", + "argumentType": "char" }, - "stddev": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "char" }, - "stddev_pop": { - "returnType": "numeric" + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "char" + } + }, + "date": { + "_eq": { + "operatorName": "=", + "argumentType": "date" }, - "stddev_samp": { - "returnType": "numeric" + "_gt": { + "operatorName": ">", + "argumentType": "date" }, - "sum": { - "returnType": "int8" + "_gte": { + "operatorName": ">=", + "argumentType": "date" }, - "var_pop": { - "returnType": "numeric" + "_lt": { + "operatorName": "<", + "argumentType": "date" }, - "var_samp": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "date" }, - "variance": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "date" } }, - "int": { - "avg": { - "returnType": "numeric" - }, - "bit_and": { - "returnType": "int" - }, - "bit_or": { - "returnType": "int" + "datetime": { + "_eq": { + "operatorName": "=", + "argumentType": "datetime" }, - "bit_xor": { - "returnType": "int" + "_gt": { + "operatorName": ">", + "argumentType": "datetime" }, - "max": { - "returnType": "int" + "_gte": { + "operatorName": ">=", + "argumentType": "datetime" }, - "min": { - "returnType": "int" + "_lt": { + "operatorName": "<", + "argumentType": "datetime" }, - "stddev": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "datetime" }, - "stddev_pop": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "datetime" + } + }, + "datetime2": { + "_eq": { + "operatorName": "=", + "argumentType": "datetime2" }, - "stddev_samp": { - "returnType": "numeric" + "_gt": { + "operatorName": ">", + "argumentType": "datetime2" }, - "sum": { - "returnType": "int8" + "_gte": { + "operatorName": ">=", + "argumentType": "datetime2" }, - "var_pop": { - "returnType": "numeric" + "_lt": { + "operatorName": "<", + "argumentType": "datetime2" }, - "var_samp": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "datetime2" }, - "variance": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "datetime2" } }, - "int8": { - "avg": { - "returnType": "numeric" - }, - "bit_and": { - "returnType": "int8" - }, - "bit_or": { - "returnType": "int8" + "datetimeoffset": { + "_eq": { + "operatorName": "=", + "argumentType": "datetimeoffset" }, - "bit_xor": { - "returnType": "int8" + "_gt": { + "operatorName": ">", + "argumentType": "datetimeoffset" }, - "max": { - "returnType": "int8" + "_gte": { + "operatorName": ">=", + "argumentType": "datetimeoffset" }, - "min": { - "returnType": "int8" + "_lt": { + "operatorName": "<", + "argumentType": "datetimeoffset" }, - "stddev": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "datetimeoffset" }, - "stddev_pop": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "datetimeoffset" + } + }, + "decimal": { + "_eq": { + "operatorName": "=", + "argumentType": "decimal" }, - "stddev_samp": { - "returnType": "numeric" + "_gt": { + "operatorName": ">", + "argumentType": "decimal" }, - "sum": { - "returnType": "numeric" + "_gte": { + "operatorName": ">=", + "argumentType": "decimal" }, - "var_pop": { - "returnType": "numeric" + "_lt": { + "operatorName": "<", + "argumentType": "decimal" }, - "var_samp": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "decimal" }, - "variance": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "decimal" } }, - "numeric": { - "avg": { - "returnType": "numeric" - }, - "max": { - "returnType": "numeric" - }, - "min": { - "returnType": "numeric" - }, - "stddev": { - "returnType": "numeric" - }, - "stddev_pop": { - "returnType": "numeric" + "float": { + "_eq": { + "operatorName": "=", + "argumentType": "float" }, - "stddev_samp": { - "returnType": "numeric" + "_gt": { + "operatorName": ">", + "argumentType": "float" }, - "sum": { - "returnType": "numeric" + "_gte": { + "operatorName": ">=", + "argumentType": "float" }, - "var_pop": { - "returnType": "numeric" + "_lt": { + "operatorName": "<", + "argumentType": "float" }, - "var_samp": { - "returnType": "numeric" + "_lte": { + "operatorName": "<=", + "argumentType": "float" }, - "variance": { - "returnType": "numeric" + "_neq": { + "operatorName": "!=", + "argumentType": "float" } }, - "text": { - "max": { - "returnType": "text" + "geography": { + "_eq": { + "operatorName": "=", + "argumentType": "geography" }, - "min": { - "returnType": "text" - } - }, - "time": { - "max": { - "returnType": "time" + "_gt": { + "operatorName": ">", + "argumentType": "geography" }, - "min": { - "returnType": "time" - } - }, - "timestamp": { - "max": { - "returnType": "timestamp" + "_gte": { + "operatorName": ">=", + "argumentType": "geography" }, - "min": { - "returnType": "timestamp" - } - }, - "timestamptz": { - "max": { - "returnType": "timestamptz" + "_lt": { + "operatorName": "<", + "argumentType": "geography" }, - "min": { - "returnType": "timestamptz" - } - }, - "timetz": { - "max": { - "returnType": "timetz" + "_lte": { + "operatorName": "<=", + "argumentType": "geography" }, - "min": { - "returnType": "timetz" + "_neq": { + "operatorName": "!=", + "argumentType": "geography" } - } - }, - "comparisonOperators": { - "bool": { + }, + "geometry": { "_eq": { "operatorName": "=", - "argumentType": "bool" + "argumentType": "geometry" }, "_gt": { "operatorName": ">", - "argumentType": "bool" + "argumentType": "geometry" }, "_gte": { "operatorName": ">=", - "argumentType": "bool" + "argumentType": "geometry" }, "_lt": { "operatorName": "<", - "argumentType": "bool" + "argumentType": "geometry" }, "_lte": { "operatorName": "<=", - "argumentType": "bool" + "argumentType": "geometry" }, "_neq": { - "operatorName": "<>", - "argumentType": "bool" + "operatorName": "!=", + "argumentType": "geometry" } }, - "char": { + "hierarchyid": { "_eq": { "operatorName": "=", - "argumentType": "char" + "argumentType": "hierarchyid" }, "_gt": { "operatorName": ">", - "argumentType": "char" + "argumentType": "hierarchyid" }, "_gte": { "operatorName": ">=", - "argumentType": "char" - }, - "_ilike": { - "operatorName": "~~*", - "argumentType": "char" - }, - "_iregex": { - "operatorName": "~*", - "argumentType": "char" - }, - "_like": { - "operatorName": "LIKE", - "argumentType": "char" + "argumentType": "hierarchyid" }, "_lt": { "operatorName": "<", - "argumentType": "char" + "argumentType": "hierarchyid" }, "_lte": { "operatorName": "<=", - "argumentType": "char" + "argumentType": "hierarchyid" }, "_neq": { - "operatorName": "<>", - "argumentType": "char" + "operatorName": "!=", + "argumentType": "hierarchyid" + } + }, + "image": { + "_eq": { + "operatorName": "=", + "argumentType": "image" + } + }, + "int": { + "_eq": { + "operatorName": "=", + "argumentType": "int" }, - "_nilike": { - "operatorName": "!~~*", - "argumentType": "char" + "_gt": { + "operatorName": ">", + "argumentType": "int" }, - "_niregex": { - "operatorName": "!~*", - "argumentType": "char" + "_gte": { + "operatorName": ">=", + "argumentType": "int" }, - "_nlike": { - "operatorName": "!~~", - "argumentType": "char" + "_lt": { + "operatorName": "<", + "argumentType": "int" }, - "_nregex": { - "operatorName": "!~", - "argumentType": "char" + "_lte": { + "operatorName": "<=", + "argumentType": "int" }, - "_regex": { - "operatorName": "~", - "argumentType": "char" + "_neq": { + "operatorName": "!=", + "argumentType": "int" } }, - "date": { + "money": { "_eq": { "operatorName": "=", - "argumentType": "date" + "argumentType": "money" }, "_gt": { "operatorName": ">", - "argumentType": "date" + "argumentType": "money" }, "_gte": { "operatorName": ">=", - "argumentType": "date" + "argumentType": "money" }, "_lt": { "operatorName": "<", - "argumentType": "date" + "argumentType": "money" }, "_lte": { "operatorName": "<=", - "argumentType": "date" + "argumentType": "money" }, "_neq": { - "operatorName": "<>", - "argumentType": "date" + "operatorName": "!=", + "argumentType": "money" } }, - "float4": { + "nchar": { "_eq": { "operatorName": "=", - "argumentType": "float4" + "argumentType": "nchar" }, "_gt": { "operatorName": ">", - "argumentType": "float4" + "argumentType": "nchar" }, "_gte": { "operatorName": ">=", - "argumentType": "float4" + "argumentType": "nchar" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "nchar" }, "_lt": { "operatorName": "<", - "argumentType": "float4" + "argumentType": "nchar" }, "_lte": { "operatorName": "<=", - "argumentType": "float4" + "argumentType": "nchar" }, "_neq": { - "operatorName": "<>", - "argumentType": "float4" + "operatorName": "!=", + "argumentType": "nchar" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "nchar" + } + }, + "ntext": { + "_eq": { + "operatorName": "=", + "argumentType": "ntext" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "ntext" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "ntext" } }, - "float8": { + "numeric": { "_eq": { "operatorName": "=", - "argumentType": "float8" + "argumentType": "numeric" }, "_gt": { "operatorName": ">", - "argumentType": "float8" + "argumentType": "numeric" }, "_gte": { "operatorName": ">=", - "argumentType": "float8" + "argumentType": "numeric" }, "_lt": { "operatorName": "<", - "argumentType": "float8" + "argumentType": "numeric" }, "_lte": { "operatorName": "<=", - "argumentType": "float8" + "argumentType": "numeric" }, "_neq": { - "operatorName": "<>", - "argumentType": "float8" + "operatorName": "!=", + "argumentType": "numeric" } }, - "int2": { + "nvarchar": { "_eq": { "operatorName": "=", - "argumentType": "int2" + "argumentType": "nvarchar" }, "_gt": { "operatorName": ">", - "argumentType": "int2" + "argumentType": "nvarchar" }, "_gte": { "operatorName": ">=", - "argumentType": "int2" + "argumentType": "nvarchar" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "nvarchar" }, "_lt": { "operatorName": "<", - "argumentType": "int2" + "argumentType": "nvarchar" }, "_lte": { "operatorName": "<=", - "argumentType": "int2" + "argumentType": "nvarchar" }, "_neq": { - "operatorName": "<>", - "argumentType": "int2" + "operatorName": "!=", + "argumentType": "nvarchar" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "nvarchar" } }, - "int": { + "real": { "_eq": { "operatorName": "=", - "argumentType": "int" + "argumentType": "real" }, "_gt": { "operatorName": ">", - "argumentType": "int" + "argumentType": "real" }, "_gte": { "operatorName": ">=", - "argumentType": "int" + "argumentType": "real" }, "_lt": { "operatorName": "<", - "argumentType": "int" + "argumentType": "real" }, "_lte": { "operatorName": "<=", - "argumentType": "int" + "argumentType": "real" }, "_neq": { - "operatorName": "<>", - "argumentType": "int" + "operatorName": "!=", + "argumentType": "real" } }, - "int8": { + "smalldatetime": { "_eq": { "operatorName": "=", - "argumentType": "int8" + "argumentType": "smalldatetime" }, "_gt": { "operatorName": ">", - "argumentType": "int8" + "argumentType": "smalldatetime" }, "_gte": { "operatorName": ">=", - "argumentType": "int8" + "argumentType": "smalldatetime" }, "_lt": { "operatorName": "<", - "argumentType": "int8" + "argumentType": "smalldatetime" }, "_lte": { "operatorName": "<=", - "argumentType": "int8" + "argumentType": "smalldatetime" }, "_neq": { - "operatorName": "<>", - "argumentType": "int8" + "operatorName": "!=", + "argumentType": "smalldatetime" } }, - "name": { + "smallint": { "_eq": { "operatorName": "=", - "argumentType": "name" + "argumentType": "smallint" }, "_gt": { "operatorName": ">", - "argumentType": "name" + "argumentType": "smallint" }, "_gte": { "operatorName": ">=", - "argumentType": "name" - }, - "_ilike": { - "operatorName": "~~*", - "argumentType": "name" - }, - "_iregex": { - "operatorName": "~*", - "argumentType": "name" - }, - "_like": { - "operatorName": "LIKE", - "argumentType": "name" + "argumentType": "smallint" }, "_lt": { "operatorName": "<", - "argumentType": "name" + "argumentType": "smallint" }, "_lte": { "operatorName": "<=", - "argumentType": "name" + "argumentType": "smallint" }, "_neq": { - "operatorName": "<>", - "argumentType": "name" + "operatorName": "!=", + "argumentType": "smallint" + } + }, + "smallmoney": { + "_eq": { + "operatorName": "=", + "argumentType": "smallmoney" }, - "_nilike": { - "operatorName": "!~~*", - "argumentType": "name" + "_gt": { + "operatorName": ">", + "argumentType": "smallmoney" }, - "_niregex": { - "operatorName": "!~*", - "argumentType": "name" + "_gte": { + "operatorName": ">=", + "argumentType": "smallmoney" }, - "_nlike": { - "operatorName": "!~~", - "argumentType": "name" + "_lt": { + "operatorName": "<", + "argumentType": "smallmoney" }, - "_nregex": { - "operatorName": "!~", - "argumentType": "name" + "_lte": { + "operatorName": "<=", + "argumentType": "smallmoney" }, - "_regex": { - "operatorName": "~", - "argumentType": "name" + "_neq": { + "operatorName": "!=", + "argumentType": "smallmoney" } }, - "numeric": { + "sql_variant": { "_eq": { "operatorName": "=", - "argumentType": "numeric" + "argumentType": "sql_variant" }, "_gt": { "operatorName": ">", - "argumentType": "numeric" + "argumentType": "sql_variant" }, "_gte": { "operatorName": ">=", - "argumentType": "numeric" + "argumentType": "sql_variant" }, "_lt": { "operatorName": "<", - "argumentType": "numeric" + "argumentType": "sql_variant" }, "_lte": { "operatorName": "<=", - "argumentType": "numeric" + "argumentType": "sql_variant" }, "_neq": { - "operatorName": "<>", - "argumentType": "numeric" + "operatorName": "!=", + "argumentType": "sql_variant" } }, - "text": { + "sysname": { "_eq": { "operatorName": "=", - "argumentType": "text" + "argumentType": "sysname" }, "_gt": { "operatorName": ">", - "argumentType": "text" + "argumentType": "sysname" }, "_gte": { "operatorName": ">=", - "argumentType": "text" - }, - "_ilike": { - "operatorName": "~~*", - "argumentType": "text" - }, - "_iregex": { - "operatorName": "~*", - "argumentType": "text" - }, - "_like": { - "operatorName": "LIKE", - "argumentType": "text" + "argumentType": "sysname" }, "_lt": { "operatorName": "<", - "argumentType": "text" + "argumentType": "sysname" }, "_lte": { "operatorName": "<=", - "argumentType": "text" + "argumentType": "sysname" }, "_neq": { - "operatorName": "<>", - "argumentType": "text" - }, - "_nilike": { - "operatorName": "!~~*", + "operatorName": "!=", + "argumentType": "sysname" + } + }, + "text": { + "_eq": { + "operatorName": "=", "argumentType": "text" }, - "_niregex": { - "operatorName": "!~*", + "_like": { + "operatorName": "LIKE", "argumentType": "text" }, "_nlike": { - "operatorName": "!~~", - "argumentType": "text" - }, - "_nregex": { - "operatorName": "!~", - "argumentType": "text" - }, - "_regex": { - "operatorName": "~", + "operatorName": "NOT LIKE", "argumentType": "text" } }, @@ -1808,7 +1573,7 @@ "argumentType": "time" }, "_neq": { - "operatorName": "<>", + "operatorName": "!=", "argumentType": "time" } }, @@ -1834,86 +1599,86 @@ "argumentType": "timestamp" }, "_neq": { - "operatorName": "<>", + "operatorName": "!=", "argumentType": "timestamp" } }, - "timestamptz": { + "tinyint": { "_eq": { "operatorName": "=", - "argumentType": "timestamptz" + "argumentType": "tinyint" }, "_gt": { "operatorName": ">", - "argumentType": "timestamptz" + "argumentType": "tinyint" }, "_gte": { "operatorName": ">=", - "argumentType": "timestamptz" + "argumentType": "tinyint" }, "_lt": { "operatorName": "<", - "argumentType": "timestamptz" + "argumentType": "tinyint" }, "_lte": { "operatorName": "<=", - "argumentType": "timestamptz" + "argumentType": "tinyint" }, "_neq": { - "operatorName": "<>", - "argumentType": "timestamptz" + "operatorName": "!=", + "argumentType": "tinyint" } }, - "timetz": { + "uniqueidentifier": { "_eq": { "operatorName": "=", - "argumentType": "timetz" + "argumentType": "uniqueidentifier" }, "_gt": { "operatorName": ">", - "argumentType": "timetz" + "argumentType": "uniqueidentifier" }, "_gte": { "operatorName": ">=", - "argumentType": "timetz" + "argumentType": "uniqueidentifier" }, "_lt": { "operatorName": "<", - "argumentType": "timetz" + "argumentType": "uniqueidentifier" }, "_lte": { "operatorName": "<=", - "argumentType": "timetz" + "argumentType": "uniqueidentifier" }, "_neq": { - "operatorName": "<>", - "argumentType": "timetz" + "operatorName": "!=", + "argumentType": "uniqueidentifier" } }, - "uuid": { + "varbinary": { "_eq": { "operatorName": "=", - "argumentType": "uuid" + "argumentType": "varbinary" }, "_gt": { "operatorName": ">", - "argumentType": "uuid" + "argumentType": "varbinary" }, "_gte": { "operatorName": ">=", - "argumentType": "uuid" + "argumentType": "varbinary" }, "_lt": { "operatorName": "<", - "argumentType": "uuid" + "argumentType": "varbinary" }, "_lte": { "operatorName": "<=", - "argumentType": "uuid" + "argumentType": "varbinary" }, "_neq": { - "operatorName": "<>", - "argumentType": "uuid" + "operatorName": "!=", + "argumentType": "varbinary" } }, "varchar": { @@ -1929,14 +1694,6 @@ "operatorName": ">=", "argumentType": "varchar" }, - "_ilike": { - "operatorName": "~~*", - "argumentType": "varchar" - }, - "_iregex": { - "operatorName": "~*", - "argumentType": "varchar" - }, "_like": { "operatorName": "LIKE", "argumentType": "varchar" @@ -1950,126 +1707,40 @@ "argumentType": "varchar" }, "_neq": { - "operatorName": "<>", + "operatorName": "!=", "argumentType": "varchar" }, - "_nilike": { - "operatorName": "!~~*", + "_nlike": { + "operatorName": "NOT LIKE", "argumentType": "varchar" + } + }, + "xml": { + "_eq": { + "operatorName": "=", + "argumentType": "xml" }, - "_niregex": { - "operatorName": "!~*", - "argumentType": "varchar" + "_gt": { + "operatorName": ">", + "argumentType": "xml" }, - "_nlike": { - "operatorName": "!~~", - "argumentType": "varchar" + "_gte": { + "operatorName": ">=", + "argumentType": "xml" }, - "_nregex": { - "operatorName": "!~", - "argumentType": "varchar" + "_lt": { + "operatorName": "<", + "argumentType": "xml" }, - "_regex": { - "operatorName": "~", - "argumentType": "varchar" + "_lte": { + "operatorName": "<=", + "argumentType": "xml" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "xml" } } } - }, - "configureOptions": { - "excludedSchemas": [ - "information_schema", - "pg_catalog", - "tiger", - "crdb_internal", - "columnar", - "columnar_internal" - ], - "comparisonOperatorMapping": [ - { - "operatorName": "=", - "exposedName": "_eq" - }, - { - "operatorName": "<=", - "exposedName": "_lte" - }, - { - "operatorName": ">", - "exposedName": "_gt" - }, - { - "operatorName": ">=", - "exposedName": "_gte" - }, - { - "operatorName": "<", - "exposedName": "_lt" - }, - { - "operatorName": "!=", - "exposedName": "_neq" - }, - { - "operatorName": "LIKE", - "exposedName": "_like" - }, - { - "operatorName": "NOT LIKE", - "exposedName": "_nlike" - }, - { - "operatorName": "ILIKE", - "exposedName": "_ilike" - }, - { - "operatorName": "NOT ILIKE", - "exposedName": "_nilike" - }, - { - "operatorName": "SIMILAR TO", - "exposedName": "_similar" - }, - { - "operatorName": "NOT SIMILAR TO", - "exposedName": "_nsimilar" - }, - { - "operatorName": "<>", - "exposedName": "_neq" - }, - { - "operatorName": "LIKE", - "exposedName": "_like" - }, - { - "operatorName": "!~~", - "exposedName": "_nlike" - }, - { - "operatorName": "~~*", - "exposedName": "_ilike" - }, - { - "operatorName": "!~~*", - "exposedName": "_nilike" - }, - { - "operatorName": "~", - "exposedName": "_regex" - }, - { - "operatorName": "!~", - "exposedName": "_nregex" - }, - { - "operatorName": "~*", - "exposedName": "_iregex" - }, - { - "operatorName": "!~*", - "exposedName": "_niregex" - } - ] } } diff --git a/static/deployment-snapshots/9feb1c7131e5b3425ef6474759e1dd1ab3237ecfb4a1d4afcfb57b31fc5cb0a4.json b/static/deployment-snapshots/9feb1c7131e5b3425ef6474759e1dd1ab3237ecfb4a1d4afcfb57b31fc5cb0a4.json new file mode 100644 index 00000000..1805d2f2 --- /dev/null +++ b/static/deployment-snapshots/9feb1c7131e5b3425ef6474759e1dd1ab3237ecfb4a1d4afcfb57b31fc5cb0a4.json @@ -0,0 +1,1746 @@ +{ + "version": 1, + "mssql_connection_string": "DRIVER={ODBC Driver 18 for SQL Server};SERVER=127.0.0.1,64003;Uid=SA;Database=Chinook;Pwd=Password!", + "metadata": { + "tables": { + "Album": { + "schemaName": "dbo", + "tableName": "Album", + "columns": { + "AlbumId": { + "name": "AlbumId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "ArtistId": { + "name": "ArtistId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Title": { + "name": "Title", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Album": ["AlbumId"] + }, + "foreignRelations": { + "FK_ArtistId0": { + "foreignTable": "Artist", + "columnMapping": { + "ArtistId": "ArtistId" + } + } + }, + "description": null + }, + "Artist": { + "schemaName": "dbo", + "tableName": "Artist", + "columns": { + "ArtistId": { + "name": "ArtistId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "nvarchar", + "nullable": "nullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Artist": ["ArtistId"] + }, + "foreignRelations": {}, + "description": null + }, + "Customer": { + "schemaName": "dbo", + "tableName": "Customer", + "columns": { + "Address": { + "name": "Address", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "City": { + "name": "City", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "Company": { + "name": "Company", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "Country": { + "name": "Country", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "CustomerId": { + "name": "CustomerId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Email": { + "name": "Email", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "Fax": { + "name": "Fax", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "FirstName": { + "name": "FirstName", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "LastName": { + "name": "LastName", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "Phone": { + "name": "Phone", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "PostalCode": { + "name": "PostalCode", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "State": { + "name": "State", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "SupportRepId": { + "name": "SupportRepId", + "type": "int", + "nullable": "nullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Customer": ["CustomerId"] + }, + "foreignRelations": { + "FK_SupportRepId0": { + "foreignTable": "Employee", + "columnMapping": { + "SupportRepId": "EmployeeId" + } + } + }, + "description": null + }, + "Employee": { + "schemaName": "dbo", + "tableName": "Employee", + "columns": { + "Address": { + "name": "Address", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "BirthDate": { + "name": "BirthDate", + "type": "datetime", + "nullable": "nullable", + "description": null + }, + "City": { + "name": "City", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "Country": { + "name": "Country", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "Email": { + "name": "Email", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "EmployeeId": { + "name": "EmployeeId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Fax": { + "name": "Fax", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "FirstName": { + "name": "FirstName", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "HireDate": { + "name": "HireDate", + "type": "datetime", + "nullable": "nullable", + "description": null + }, + "LastName": { + "name": "LastName", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "Phone": { + "name": "Phone", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "PostalCode": { + "name": "PostalCode", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "ReportsTo": { + "name": "ReportsTo", + "type": "int", + "nullable": "nullable", + "description": null + }, + "State": { + "name": "State", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "Title": { + "name": "Title", + "type": "nvarchar", + "nullable": "nullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Employee": ["EmployeeId"] + }, + "foreignRelations": { + "FK_ReportsTo0": { + "foreignTable": "Employee", + "columnMapping": { + "ReportsTo": "EmployeeId" + } + } + }, + "description": null + }, + "Genre": { + "schemaName": "dbo", + "tableName": "Genre", + "columns": { + "GenreId": { + "name": "GenreId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "nvarchar", + "nullable": "nullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Genre": ["GenreId"] + }, + "foreignRelations": {}, + "description": null + }, + "Invoice": { + "schemaName": "dbo", + "tableName": "Invoice", + "columns": { + "BillingAddress": { + "name": "BillingAddress", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "BillingCity": { + "name": "BillingCity", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "BillingCountry": { + "name": "BillingCountry", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "BillingPostalCode": { + "name": "BillingPostalCode", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "BillingState": { + "name": "BillingState", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "CustomerId": { + "name": "CustomerId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "InvoiceDate": { + "name": "InvoiceDate", + "type": "datetime", + "nullable": "nonNullable", + "description": null + }, + "InvoiceId": { + "name": "InvoiceId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Total": { + "name": "Total", + "type": "numeric", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Invoice": ["InvoiceId"] + }, + "foreignRelations": { + "FK_CustomerId0": { + "foreignTable": "Customer", + "columnMapping": { + "CustomerId": "CustomerId" + } + } + }, + "description": null + }, + "InvoiceLine": { + "schemaName": "dbo", + "tableName": "InvoiceLine", + "columns": { + "InvoiceId": { + "name": "InvoiceId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "InvoiceLineId": { + "name": "InvoiceLineId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Quantity": { + "name": "Quantity", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "TrackId": { + "name": "TrackId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "UnitPrice": { + "name": "UnitPrice", + "type": "numeric", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_InvoiceLine": ["InvoiceLineId"] + }, + "foreignRelations": { + "FK_InvoiceId0": { + "foreignTable": "Invoice", + "columnMapping": { + "InvoiceId": "InvoiceId" + } + }, + "FK_TrackId0": { + "foreignTable": "Track", + "columnMapping": { + "TrackId": "TrackId" + } + } + }, + "description": null + }, + "MediaType": { + "schemaName": "dbo", + "tableName": "MediaType", + "columns": { + "MediaTypeId": { + "name": "MediaTypeId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "nvarchar", + "nullable": "nullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_MediaType": ["MediaTypeId"] + }, + "foreignRelations": {}, + "description": null + }, + "Playlist": { + "schemaName": "dbo", + "tableName": "Playlist", + "columns": { + "Name": { + "name": "Name", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "PlaylistId": { + "name": "PlaylistId", + "type": "int", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Playlist": ["PlaylistId"] + }, + "foreignRelations": {}, + "description": null + }, + "PlaylistTrack": { + "schemaName": "dbo", + "tableName": "PlaylistTrack", + "columns": { + "PlaylistId": { + "name": "PlaylistId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "TrackId": { + "name": "TrackId", + "type": "int", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_PlaylistTrack": ["PlaylistId", "TrackId"] + }, + "foreignRelations": { + "FK_PlaylistId0": { + "foreignTable": "Playlist", + "columnMapping": { + "PlaylistId": "PlaylistId" + } + }, + "FK_TrackId0": { + "foreignTable": "Track", + "columnMapping": { + "TrackId": "TrackId" + } + } + }, + "description": null + }, + "Track": { + "schemaName": "dbo", + "tableName": "Track", + "columns": { + "AlbumId": { + "name": "AlbumId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "Bytes": { + "name": "Bytes", + "type": "int", + "nullable": "nullable", + "description": null + }, + "Composer": { + "name": "Composer", + "type": "nvarchar", + "nullable": "nullable", + "description": null + }, + "GenreId": { + "name": "GenreId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "MediaTypeId": { + "name": "MediaTypeId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Milliseconds": { + "name": "Milliseconds", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "nvarchar", + "nullable": "nonNullable", + "description": null + }, + "TrackId": { + "name": "TrackId", + "type": "int", + "nullable": "nonNullable", + "description": null + }, + "UnitPrice": { + "name": "UnitPrice", + "type": "numeric", + "nullable": "nonNullable", + "description": null + } + }, + "uniquenessConstraints": { + "PK_Track": ["TrackId"] + }, + "foreignRelations": { + "FK_AlbumId0": { + "foreignTable": "Album", + "columnMapping": { + "AlbumId": "AlbumId" + } + }, + "FK_GenreId0": { + "foreignTable": "Genre", + "columnMapping": { + "GenreId": "GenreId" + } + }, + "FK_MediaTypeId0": { + "foreignTable": "MediaType", + "columnMapping": { + "MediaTypeId": "MediaTypeId" + } + } + }, + "description": null + } + }, + "nativeQueries": { + "album_by_title": { + "sql": "SELECT * FROM dbo.\"Album\" WHERE \"Title\" LIKE {{title}} AND \"AlbumId\" < {{id}}", + "columns": { + "AlbumId": { + "name": "AlbumId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "ArtistId": { + "name": "ArtistId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "Title": { + "name": "Title", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "arguments": { + "id": { + "name": "id", + "type": "int", + "nullable": "nullable", + "description": null + }, + "title": { + "name": "title", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "description": null + }, + "artist": { + "sql": "SELECT * FROM dbo.\"Artist\"", + "columns": { + "ArtistId": { + "name": "ArtistId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "arguments": {}, + "description": null + }, + "artist_below_id": { + "sql": "SELECT * FROM dbo.\"Artist\" WHERE \"ArtistId\" < {{id}}", + "columns": { + "ArtistId": { + "name": "ArtistId", + "type": "int", + "nullable": "nullable", + "description": null + }, + "Name": { + "name": "Name", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "arguments": { + "id": { + "name": "id", + "type": "int", + "nullable": "nullable", + "description": null + } + }, + "description": null + }, + "value_types": { + "sql": "SELECT {{bool}} as bool, {{int}} as int, {{int2}} as int2, {{int8}} as int8, {{float4}} as float4, {{float8}} as \"float8\", {{numeric}} as numeric, {{char}} as char, {{varchar}} as \"varchar\", {{text}} as text, {{date}} as date, {{time}} as time, {{timetz}} as timetz, {{timestamp}} as timestamp, {{timestamptz}} as timestamptz, {{uuid}} as uuid", + "columns": { + "bool": { + "name": "bool", + "type": "bool", + "nullable": "nullable", + "description": null + }, + "char": { + "name": "char", + "type": "char", + "nullable": "nullable", + "description": null + }, + "date": { + "name": "date", + "type": "date", + "nullable": "nullable", + "description": null + }, + "float4": { + "name": "float4", + "type": "float4", + "nullable": "nullable", + "description": null + }, + "float8": { + "name": "float8", + "type": "float8", + "nullable": "nullable", + "description": null + }, + "int": { + "name": "int", + "type": "int", + "nullable": "nullable", + "description": null + }, + "int2": { + "name": "int2", + "type": "int2", + "nullable": "nullable", + "description": null + }, + "int8": { + "name": "int8", + "type": "int8", + "nullable": "nullable", + "description": null + }, + "numeric": { + "name": "numeric", + "type": "numeric", + "nullable": "nullable", + "description": null + }, + "text": { + "name": "text", + "type": "text", + "nullable": "nullable", + "description": null + }, + "time": { + "name": "time", + "type": "time", + "nullable": "nullable", + "description": null + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "nullable": "nullable", + "description": null + }, + "timestamptz": { + "name": "timestamptz", + "type": "timestamptz", + "nullable": "nullable", + "description": null + }, + "timetz": { + "name": "timetz", + "type": "timetz", + "nullable": "nullable", + "description": null + }, + "uuid": { + "name": "uuid", + "type": "uuid", + "nullable": "nullable", + "description": null + }, + "varchar": { + "name": "varchar", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "arguments": { + "bool": { + "name": "bool", + "type": "bool", + "nullable": "nullable", + "description": null + }, + "char": { + "name": "char", + "type": "char", + "nullable": "nullable", + "description": null + }, + "date": { + "name": "date", + "type": "date", + "nullable": "nullable", + "description": null + }, + "float4": { + "name": "float4", + "type": "float4", + "nullable": "nullable", + "description": null + }, + "float8": { + "name": "float8", + "type": "float8", + "nullable": "nullable", + "description": null + }, + "int": { + "name": "int", + "type": "int", + "nullable": "nullable", + "description": null + }, + "int2": { + "name": "int2", + "type": "int2", + "nullable": "nullable", + "description": null + }, + "int8": { + "name": "int8", + "type": "int8", + "nullable": "nullable", + "description": null + }, + "numeric": { + "name": "numeric", + "type": "numeric", + "nullable": "nullable", + "description": null + }, + "text": { + "name": "text", + "type": "text", + "nullable": "nullable", + "description": null + }, + "time": { + "name": "time", + "type": "time", + "nullable": "nullable", + "description": null + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "nullable": "nullable", + "description": null + }, + "timestamptz": { + "name": "timestamptz", + "type": "timestamptz", + "nullable": "nullable", + "description": null + }, + "timetz": { + "name": "timetz", + "type": "timetz", + "nullable": "nullable", + "description": null + }, + "uuid": { + "name": "uuid", + "type": "uuid", + "nullable": "nullable", + "description": null + }, + "varchar": { + "name": "varchar", + "type": "varchar", + "nullable": "nullable", + "description": null + } + }, + "description": null + } + }, + "aggregateFunctions": {}, + "comparisonOperators": { + "bigint": { + "_eq": { + "operatorName": "=", + "argumentType": "bigint" + }, + "_gt": { + "operatorName": ">", + "argumentType": "bigint" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "bigint" + }, + "_lt": { + "operatorName": "<", + "argumentType": "bigint" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "bigint" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "bigint" + } + }, + "binary": { + "_eq": { + "operatorName": "=", + "argumentType": "binary" + }, + "_gt": { + "operatorName": ">", + "argumentType": "binary" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "binary" + }, + "_lt": { + "operatorName": "<", + "argumentType": "binary" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "binary" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "binary" + } + }, + "bit": { + "_eq": { + "operatorName": "=", + "argumentType": "bit" + }, + "_gt": { + "operatorName": ">", + "argumentType": "bit" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "bit" + }, + "_lt": { + "operatorName": "<", + "argumentType": "bit" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "bit" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "bit" + } + }, + "char": { + "_eq": { + "operatorName": "=", + "argumentType": "char" + }, + "_gt": { + "operatorName": ">", + "argumentType": "char" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "char" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "char" + }, + "_lt": { + "operatorName": "<", + "argumentType": "char" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "char" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "char" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "char" + } + }, + "date": { + "_eq": { + "operatorName": "=", + "argumentType": "date" + }, + "_gt": { + "operatorName": ">", + "argumentType": "date" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "date" + }, + "_lt": { + "operatorName": "<", + "argumentType": "date" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "date" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "date" + } + }, + "datetime": { + "_eq": { + "operatorName": "=", + "argumentType": "datetime" + }, + "_gt": { + "operatorName": ">", + "argumentType": "datetime" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "datetime" + }, + "_lt": { + "operatorName": "<", + "argumentType": "datetime" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "datetime" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "datetime" + } + }, + "datetime2": { + "_eq": { + "operatorName": "=", + "argumentType": "datetime2" + }, + "_gt": { + "operatorName": ">", + "argumentType": "datetime2" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "datetime2" + }, + "_lt": { + "operatorName": "<", + "argumentType": "datetime2" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "datetime2" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "datetime2" + } + }, + "datetimeoffset": { + "_eq": { + "operatorName": "=", + "argumentType": "datetimeoffset" + }, + "_gt": { + "operatorName": ">", + "argumentType": "datetimeoffset" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "datetimeoffset" + }, + "_lt": { + "operatorName": "<", + "argumentType": "datetimeoffset" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "datetimeoffset" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "datetimeoffset" + } + }, + "decimal": { + "_eq": { + "operatorName": "=", + "argumentType": "decimal" + }, + "_gt": { + "operatorName": ">", + "argumentType": "decimal" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "decimal" + }, + "_lt": { + "operatorName": "<", + "argumentType": "decimal" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "decimal" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "decimal" + } + }, + "float": { + "_eq": { + "operatorName": "=", + "argumentType": "float" + }, + "_gt": { + "operatorName": ">", + "argumentType": "float" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "float" + }, + "_lt": { + "operatorName": "<", + "argumentType": "float" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "float" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "float" + } + }, + "geography": { + "_eq": { + "operatorName": "=", + "argumentType": "geography" + }, + "_gt": { + "operatorName": ">", + "argumentType": "geography" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "geography" + }, + "_lt": { + "operatorName": "<", + "argumentType": "geography" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "geography" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "geography" + } + }, + "geometry": { + "_eq": { + "operatorName": "=", + "argumentType": "geometry" + }, + "_gt": { + "operatorName": ">", + "argumentType": "geometry" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "geometry" + }, + "_lt": { + "operatorName": "<", + "argumentType": "geometry" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "geometry" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "geometry" + } + }, + "hierarchyid": { + "_eq": { + "operatorName": "=", + "argumentType": "hierarchyid" + }, + "_gt": { + "operatorName": ">", + "argumentType": "hierarchyid" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "hierarchyid" + }, + "_lt": { + "operatorName": "<", + "argumentType": "hierarchyid" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "hierarchyid" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "hierarchyid" + } + }, + "image": { + "_eq": { + "operatorName": "=", + "argumentType": "image" + } + }, + "int": { + "_eq": { + "operatorName": "=", + "argumentType": "int" + }, + "_gt": { + "operatorName": ">", + "argumentType": "int" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "int" + }, + "_lt": { + "operatorName": "<", + "argumentType": "int" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "int" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "int" + } + }, + "money": { + "_eq": { + "operatorName": "=", + "argumentType": "money" + }, + "_gt": { + "operatorName": ">", + "argumentType": "money" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "money" + }, + "_lt": { + "operatorName": "<", + "argumentType": "money" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "money" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "money" + } + }, + "nchar": { + "_eq": { + "operatorName": "=", + "argumentType": "nchar" + }, + "_gt": { + "operatorName": ">", + "argumentType": "nchar" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "nchar" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "nchar" + }, + "_lt": { + "operatorName": "<", + "argumentType": "nchar" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "nchar" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "nchar" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "nchar" + } + }, + "ntext": { + "_eq": { + "operatorName": "=", + "argumentType": "ntext" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "ntext" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "ntext" + } + }, + "numeric": { + "_eq": { + "operatorName": "=", + "argumentType": "numeric" + }, + "_gt": { + "operatorName": ">", + "argumentType": "numeric" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "numeric" + }, + "_lt": { + "operatorName": "<", + "argumentType": "numeric" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "numeric" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "numeric" + } + }, + "nvarchar": { + "_eq": { + "operatorName": "=", + "argumentType": "nvarchar" + }, + "_gt": { + "operatorName": ">", + "argumentType": "nvarchar" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "nvarchar" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "nvarchar" + }, + "_lt": { + "operatorName": "<", + "argumentType": "nvarchar" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "nvarchar" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "nvarchar" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "nvarchar" + } + }, + "real": { + "_eq": { + "operatorName": "=", + "argumentType": "real" + }, + "_gt": { + "operatorName": ">", + "argumentType": "real" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "real" + }, + "_lt": { + "operatorName": "<", + "argumentType": "real" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "real" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "real" + } + }, + "smalldatetime": { + "_eq": { + "operatorName": "=", + "argumentType": "smalldatetime" + }, + "_gt": { + "operatorName": ">", + "argumentType": "smalldatetime" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "smalldatetime" + }, + "_lt": { + "operatorName": "<", + "argumentType": "smalldatetime" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "smalldatetime" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "smalldatetime" + } + }, + "smallint": { + "_eq": { + "operatorName": "=", + "argumentType": "smallint" + }, + "_gt": { + "operatorName": ">", + "argumentType": "smallint" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "smallint" + }, + "_lt": { + "operatorName": "<", + "argumentType": "smallint" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "smallint" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "smallint" + } + }, + "smallmoney": { + "_eq": { + "operatorName": "=", + "argumentType": "smallmoney" + }, + "_gt": { + "operatorName": ">", + "argumentType": "smallmoney" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "smallmoney" + }, + "_lt": { + "operatorName": "<", + "argumentType": "smallmoney" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "smallmoney" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "smallmoney" + } + }, + "sql_variant": { + "_eq": { + "operatorName": "=", + "argumentType": "sql_variant" + }, + "_gt": { + "operatorName": ">", + "argumentType": "sql_variant" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "sql_variant" + }, + "_lt": { + "operatorName": "<", + "argumentType": "sql_variant" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "sql_variant" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "sql_variant" + } + }, + "sysname": { + "_eq": { + "operatorName": "=", + "argumentType": "sysname" + }, + "_gt": { + "operatorName": ">", + "argumentType": "sysname" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "sysname" + }, + "_lt": { + "operatorName": "<", + "argumentType": "sysname" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "sysname" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "sysname" + } + }, + "text": { + "_eq": { + "operatorName": "=", + "argumentType": "text" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "text" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "text" + } + }, + "time": { + "_eq": { + "operatorName": "=", + "argumentType": "time" + }, + "_gt": { + "operatorName": ">", + "argumentType": "time" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "time" + }, + "_lt": { + "operatorName": "<", + "argumentType": "time" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "time" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "time" + } + }, + "timestamp": { + "_eq": { + "operatorName": "=", + "argumentType": "timestamp" + }, + "_gt": { + "operatorName": ">", + "argumentType": "timestamp" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "timestamp" + }, + "_lt": { + "operatorName": "<", + "argumentType": "timestamp" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "timestamp" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "timestamp" + } + }, + "tinyint": { + "_eq": { + "operatorName": "=", + "argumentType": "tinyint" + }, + "_gt": { + "operatorName": ">", + "argumentType": "tinyint" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "tinyint" + }, + "_lt": { + "operatorName": "<", + "argumentType": "tinyint" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "tinyint" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "tinyint" + } + }, + "uniqueidentifier": { + "_eq": { + "operatorName": "=", + "argumentType": "uniqueidentifier" + }, + "_gt": { + "operatorName": ">", + "argumentType": "uniqueidentifier" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "uniqueidentifier" + }, + "_lt": { + "operatorName": "<", + "argumentType": "uniqueidentifier" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "uniqueidentifier" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "uniqueidentifier" + } + }, + "varbinary": { + "_eq": { + "operatorName": "=", + "argumentType": "varbinary" + }, + "_gt": { + "operatorName": ">", + "argumentType": "varbinary" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "varbinary" + }, + "_lt": { + "operatorName": "<", + "argumentType": "varbinary" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "varbinary" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "varbinary" + } + }, + "varchar": { + "_eq": { + "operatorName": "=", + "argumentType": "varchar" + }, + "_gt": { + "operatorName": ">", + "argumentType": "varchar" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "varchar" + }, + "_like": { + "operatorName": "LIKE", + "argumentType": "varchar" + }, + "_lt": { + "operatorName": "<", + "argumentType": "varchar" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "varchar" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "varchar" + }, + "_nlike": { + "operatorName": "NOT LIKE", + "argumentType": "varchar" + } + }, + "xml": { + "_eq": { + "operatorName": "=", + "argumentType": "xml" + }, + "_gt": { + "operatorName": ">", + "argumentType": "xml" + }, + "_gte": { + "operatorName": ">=", + "argumentType": "xml" + }, + "_lt": { + "operatorName": "<", + "argumentType": "xml" + }, + "_lte": { + "operatorName": "<=", + "argumentType": "xml" + }, + "_neq": { + "operatorName": "!=", + "argumentType": "xml" + } + } + } + } +}