diff --git a/crates/dbx-core/src/table_structure_sql/columns.rs b/crates/dbx-core/src/table_structure_sql/columns.rs index 1a3e7fae6f..7d964fbf23 100644 --- a/crates/dbx-core/src/table_structure_sql/columns.rs +++ b/crates/dbx-core/src/table_structure_sql/columns.rs @@ -65,6 +65,7 @@ pub(super) fn build_column_sql(options: &TableStructureSqlOptions, warnings: &mu } statements.extend(build_add_column_sql( dialect, + options.database_type, &table, column, &position_clause, @@ -200,6 +201,7 @@ pub(super) fn build_primary_key_sql( pub(super) fn build_add_column_sql( dialect: StructureDialect, + database_type: Option, table: &str, column: &EditableStructureColumn, position_clause: &str, @@ -210,7 +212,13 @@ pub(super) fn build_add_column_sql( let mut statements = if dialect == StructureDialect::Oracle || dialect == StructureDialect::Informix { vec![format!("ALTER TABLE {table} ADD ({definition});")] } else { - let add_keyword = if dialect == StructureDialect::SqlServer { "ADD" } else { "ADD COLUMN" }; + let add_keyword = if dialect == StructureDialect::SqlServer + || database_type == Some(crate::models::connection::DatabaseType::Kingbase) + { + "ADD" + } else { + "ADD COLUMN" + }; vec![format!("ALTER TABLE {table} {add_keyword} {definition}{position_clause};")] }; if matches!(dialect, StructureDialect::Postgres | StructureDialect::Oracle) && !clean(&column.comment).is_empty() { diff --git a/crates/dbx-core/src/table_structure_sql/tests.rs b/crates/dbx-core/src/table_structure_sql/tests.rs index 1f59dbd4f9..399884e67a 100644 --- a/crates/dbx-core/src/table_structure_sql/tests.rs +++ b/crates/dbx-core/src/table_structure_sql/tests.rs @@ -802,6 +802,27 @@ fn builds_rqlite_changes_with_sqlite_dialect() { ); } +#[test] +fn builds_kingbase_add_column_without_column_keyword() { + let mut flag = column("flag"); + flag.data_type = "varchar(100)".to_string(); + + let result = build_table_structure_change_sql(TableStructureSqlOptions { + database_type: Some(DatabaseType::Kingbase), + schema: Some("dbo".to_string()), + table_name: "dw_bill_info_copy".to_string(), + columns: vec![flag], + indexes: Vec::new(), + foreign_keys: Vec::new(), + triggers: Vec::new(), + table_comment: None, + original_table_comment: None, + }); + + assert_eq!(result.warnings, Vec::::new()); + assert_eq!(result.statements, vec!["ALTER TABLE \"dbo\".\"dw_bill_info_copy\" ADD \"flag\" varchar(100);"]); +} + #[test] fn builds_mysql_column_reorder_statements() { let mut id = column("id");