fix(core): use drop user cascade for oceanbase oracle schema drop
Closes #7351
This commit is contained in:
1 file changed
+32
-1
@@ -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]
|
||||||
|
|||||||
Reference in new issue
Block a user