From 2f2660fae994552ac30efa96ade22b0f33dc271a Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 4 Mar 2020 14:59:03 +0100 Subject: [PATCH] also recognize `int` as Integer on sqlite --- .../sqlite/tables_sqlite.rs | 4 +++- libs/sql-schema-describer/src/sqlite.rs | 2 ++ .../tests/sqlite_introspection_tests.rs | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/introspection-engine/connectors/sql-introspection-connector/tests/db_specific_introspection/sqlite/tables_sqlite.rs b/introspection-engine/connectors/sql-introspection-connector/tests/db_specific_introspection/sqlite/tables_sqlite.rs index 4404bba13f4b..de7682ed52e4 100644 --- a/introspection-engine/connectors/sql-introspection-connector/tests/db_specific_introspection/sqlite/tables_sqlite.rs +++ b/introspection-engine/connectors/sql-introspection-connector/tests/db_specific_introspection/sqlite/tables_sqlite.rs @@ -13,7 +13,8 @@ async fn introspecting_a_simple_table_with_gql_types_must_work(api: &TestApi) { t.add_column("float", types::float()); t.add_column("date", types::date()); t.add_column("id", types::primary()); - t.add_column("int", types::integer()); + t.add_column("integer", types::integer()); + t.inject_custom("int int not null"); t.add_column("string", types::text()); }); }) @@ -25,6 +26,7 @@ async fn introspecting_a_simple_table_with_gql_types_must_work(api: &TestApi) { float Float id Int @id @default(autoincrement()) int Int + integer Int string String } "#; diff --git a/libs/sql-schema-describer/src/sqlite.rs b/libs/sql-schema-describer/src/sqlite.rs index b489cdbca92a..70bbd82b6d76 100644 --- a/libs/sql-schema-describer/src/sqlite.rs +++ b/libs/sql-schema-describer/src/sqlite.rs @@ -341,6 +341,7 @@ fn get_column_type(tpe: &str, arity: ColumnArity) -> ColumnType { let family = match tpe_lower.as_ref() { // SQLite only has a few native data types: https://www.sqlite.org/datatype3.html // It's tolerant though, and you can assign any data type you like to columns + "int" => ColumnTypeFamily::Int, "integer" => ColumnTypeFamily::Int, "real" => ColumnTypeFamily::Float, "float" => ColumnTypeFamily::Float, @@ -359,6 +360,7 @@ fn get_column_type(tpe: &str, arity: ColumnArity) -> ColumnType { "datetime[]" => ColumnTypeFamily::DateTime, "double[]" => ColumnTypeFamily::Float, "float[]" => ColumnTypeFamily::Float, + "int[]" => ColumnTypeFamily::Int, "integer[]" => ColumnTypeFamily::Int, "text[]" => ColumnTypeFamily::String, _ => ColumnTypeFamily::Unknown, diff --git a/libs/sql-schema-describer/tests/sqlite_introspection_tests.rs b/libs/sql-schema-describer/tests/sqlite_introspection_tests.rs index c1dbabd2fabd..d134cf55801f 100644 --- a/libs/sql-schema-describer/tests/sqlite_introspection_tests.rs +++ b/libs/sql-schema-describer/tests/sqlite_introspection_tests.rs @@ -12,6 +12,7 @@ use sqlite::*; async fn sqlite_column_types_must_work() { let mut migration = Migration::new().schema(SCHEMA); migration.create_table("User", move |t| { + t.inject_custom("int_col int not null"); t.add_column("int4_col", types::integer()); t.add_column("text_col", types::text()); t.add_column("real_col", types::float()); @@ -23,6 +24,16 @@ async fn sqlite_column_types_must_work() { let result = inspector.describe(SCHEMA).await.expect("describing"); let table = result.get_table("User").expect("couldn't get User table"); let mut expected_columns = vec![ + Column { + name: "int_col".to_string(), + tpe: ColumnType { + raw: "int".to_string(), + family: ColumnTypeFamily::Int, + arity: ColumnArity::Required, + }, + default: None, + auto_increment: false, + }, Column { name: "int4_col".to_string(), tpe: ColumnType { @@ -227,7 +238,11 @@ async fn sqlite_text_primary_keys_must_be_inferred_on_table_and_not_as_separate_ }); let full_sql = migration.make::(); - let inspector = get_sqlite_describer(&full_sql, "sqlite_text_primary_keys_must_be_inferred_on_table_and_not_as_separate_indexes").await; + let inspector = get_sqlite_describer( + &full_sql, + "sqlite_text_primary_keys_must_be_inferred_on_table_and_not_as_separate_indexes", + ) + .await; let result = inspector.describe(SCHEMA).await.expect("describing"); let table = result.get_table("User").expect("couldn't get User table");