fix(core): use drop user cascade for oceanbase oracle schema drop

Closes #7351
This commit is contained in:
t8y2 committed 2026-08-27 16:33:23 +08:00
1 parent 920ab62cf1
commit e4dc5bace8
1 file changed
+32 -1
+32 -1
View File
@@ -717,7 +717,10 @@ pub fn build_create_schema_sql(options: SchemaNameSqlOptions) -> Result<String,
pub fn build_drop_schema_sql(options: SchemaNameSqlOptions) -> String { pub fn build_drop_schema_sql(options: SchemaNameSqlOptions) -> String {
let schema = quote_table_identifier(options.database_type, &options.name); let schema = quote_table_identifier(options.database_type, &options.name);
if matches!( if options.database_type == Some(DatabaseType::OceanbaseOracle) {
// OceanBase Oracle mode models schemas as users, so dropping one drops the user.
format!("DROP USER {schema} CASCADE;")
} else if matches!(
options.database_type, options.database_type,
Some(DatabaseType::Postgres | DatabaseType::Gaussdb | DatabaseType::Kwdb | DatabaseType::Dameng) Some(DatabaseType::Postgres | DatabaseType::Gaussdb | DatabaseType::Kwdb | DatabaseType::Dameng)
) { ) {
@@ -1895,6 +1898,34 @@ mod tests {
}), }),
"DROP SCHEMA \"analytics\" CASCADE;" "DROP SCHEMA \"analytics\" CASCADE;"
); );
assert_eq!(
build_drop_schema_sql(SchemaNameSqlOptions {
database_type: Some(DatabaseType::Postgres),
name: "analytics".to_string(),
}),
"DROP SCHEMA \"analytics\" CASCADE;"
);
assert_eq!(
build_drop_schema_sql(SchemaNameSqlOptions {
database_type: Some(DatabaseType::Mysql),
name: "analytics".to_string(),
}),
"DROP SCHEMA `analytics`;"
);
assert_eq!(
build_drop_schema_sql(SchemaNameSqlOptions {
database_type: Some(DatabaseType::OceanbaseOracle),
name: "analytics".to_string(),
}),
"DROP USER \"analytics\" CASCADE;"
);
assert_eq!(
build_drop_schema_sql(SchemaNameSqlOptions {
database_type: Some(DatabaseType::OceanbaseOracle),
name: "ana\"lytics".to_string(),
}),
"DROP USER \"ana\"\"lytics\" CASCADE;"
);
} }
#[test] #[test]