fix(transfer): create Dameng tables without IF NOT EXISTS

This commit is contained in:
t8y2 2026-07-31 01:33:35 +08:00
parent 99b1b73967
commit e25f2c762f
No known key found for this signature in database
1 changed files with 59 additions and 1 deletions

View File

@ -1991,7 +1991,7 @@ pub fn generate_create_table_ddl(
};
let create_prefix = match target_db {
DatabaseType::SqlServer => "CREATE TABLE",
DatabaseType::SqlServer | DatabaseType::Dameng => "CREATE TABLE",
_ => "CREATE TABLE IF NOT EXISTS",
};
@ -5461,6 +5461,64 @@ mod tests {
assert!(ddl.contains("PRIMARY KEY (`id`)"));
}
#[test]
fn dameng_create_table_omits_if_not_exists_without_changing_other_prefixes() {
let cols = vec![test_column("id", "int")];
let dameng = generate_create_table_ddl(
&cols,
"users",
"source",
"SYSDBA",
&DatabaseType::Dameng,
&DatabaseType::Mysql,
None,
None,
);
let mysql = generate_create_table_ddl(
&cols,
"users",
"",
"app",
&DatabaseType::Mysql,
&DatabaseType::Mysql,
None,
None,
);
let postgres = generate_create_table_ddl(
&cols,
"users",
"",
"public",
&DatabaseType::Postgres,
&DatabaseType::Mysql,
None,
None,
);
let sqlserver = generate_create_table_ddl(
&cols,
"users",
"",
"dbo",
&DatabaseType::SqlServer,
&DatabaseType::Mysql,
None,
None,
);
assert!(dameng.starts_with("CREATE TABLE \"SYSDBA\".\"users\" ("), "ddl: {dameng}");
assert!(!dameng.contains("IF NOT EXISTS"), "ddl: {dameng}");
assert!(dameng.contains("\"id\" INTEGER"), "ddl: {dameng}");
assert!(mysql.starts_with("CREATE TABLE IF NOT EXISTS `users` ("), "ddl: {mysql}");
assert!(postgres.starts_with("CREATE TABLE IF NOT EXISTS \"public\".\"users\" ("), "ddl: {postgres}");
assert!(
sqlserver.starts_with(
"IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'users')\nCREATE TABLE [dbo].[users] ("
),
"ddl: {sqlserver}"
);
}
#[test]
fn postgres_create_table_preserves_defaults_identity_and_exact_types() {
let cols = vec![