diff --git a/crates/dbx-core/src/sql_dialect/capabilities.rs b/crates/dbx-core/src/sql_dialect/capabilities.rs index ae235462b9..cb7b788af3 100644 --- a/crates/dbx-core/src/sql_dialect/capabilities.rs +++ b/crates/dbx-core/src/sql_dialect/capabilities.rs @@ -30,6 +30,7 @@ pub fn is_schema_aware(database_type: DatabaseType) -> bool { | DatabaseType::Hive | DatabaseType::Db2 | DatabaseType::Tdengine + | DatabaseType::Xugu | DatabaseType::DuckDb | DatabaseType::Iris ) diff --git a/crates/dbx-core/src/sql_dialect/tests.rs b/crates/dbx-core/src/sql_dialect/tests.rs index a1f74300da..76a463a1d3 100644 --- a/crates/dbx-core/src/sql_dialect/tests.rs +++ b/crates/dbx-core/src/sql_dialect/tests.rs @@ -32,6 +32,10 @@ fn qualifies_schema_only_for_schema_aware_databases() { assert_eq!(qualified_table_name(Some(DatabaseType::Mysql), Some("public"), "users"), "`users`"); assert_eq!(qualified_table_name(Some(DatabaseType::Goldendb), Some("public"), "users"), "`users`"); assert_eq!(qualified_table_name(Some(DatabaseType::Databend), Some("dbx_test"), "users"), "`dbx_test`.`users`"); + assert_eq!( + qualified_table_name(Some(DatabaseType::Xugu), Some("DBX_TEST"), "PRODUCTS"), + "\"DBX_TEST\".\"PRODUCTS\"" + ); assert_eq!(qualified_table_name(Some(DatabaseType::Jdbc), Some("cbsdw_dwd"), "dwd_test_df"), "dwd_test_df"); assert_eq!(qualified_table_name(Some(DatabaseType::Iotdb), Some("root.test"), "device2"), "root.test.device2"); assert_eq!( @@ -100,6 +104,17 @@ fn builds_select_sql_with_limit_syntax_for_database_type() { }), "SELECT * FROM `dbx_test`.`jdbc_probe` LIMIT 500;" ); + assert_eq!( + build_table_select_sql(TableSelectSqlOptions { + database_type: Some(DatabaseType::Xugu), + schema: Some("DBX_TEST"), + table_name: "PRODUCTS", + columns: &[], + order_columns: &[], + limit: 100, + }), + "SELECT * FROM \"DBX_TEST\".\"PRODUCTS\" LIMIT 100;" + ); assert_eq!( build_table_select_sql(TableSelectSqlOptions { database_type: Some(DatabaseType::Hive), @@ -196,6 +211,22 @@ fn builds_table_data_where_and_schema_queries() { }), "SELECT * FROM \"public\".\"orders\" WHERE (amount > 10) LIMIT 50 OFFSET 100;" ); + assert_eq!( + build_table_data_select_sql(TableDataSelectSqlOptions { + database_type: Some(DatabaseType::Xugu), + schema: Some("DBX_TEST".to_string()), + table_name: "PRODUCTS".to_string(), + primary_keys: Vec::new(), + columns: Vec::new(), + fallback_order_columns: Vec::new(), + order_by: None, + limit: Some(100), + offset: None, + where_input: None, + include_row_id: false, + }), + "SELECT * FROM \"DBX_TEST\".\"PRODUCTS\" LIMIT 100;" + ); assert_eq!( build_table_data_select_sql(TableDataSelectSqlOptions { database_type: Some(DatabaseType::StarRocks),