fix(gaussdb): allow M-mode query result updates

This commit is contained in:
zipg authored and GitHub committed 2026-08-20 10:43:56 +08:00
1 parent 021966bb62
commit 06be463baa
1 file changed
+33 -1
+33 -1
View File
@@ -1818,7 +1818,9 @@ fn data_grid_save_execution_schema(
driver_profile: Option<&str>,
table_meta: &DataGridTableMeta,
) -> Option<String> {
if matches!(database_type, Some(DatabaseType::Neo4j | DatabaseType::Oracle)) {
let is_gaussdb_m = database_type == Some(DatabaseType::Gaussdb)
&& driver_profile.is_some_and(|profile| profile.eq_ignore_ascii_case("gaussdb-m"));
if matches!(database_type, Some(DatabaseType::Neo4j | DatabaseType::Oracle)) || is_gaussdb_m {
return None;
}
crate::sql_dialect::table_data_schema(database_type, driver_profile, table_meta.schema.as_deref())
@@ -5524,6 +5526,36 @@ mod tests {
assert_eq!(result.validation_error, None);
assert_eq!(result.statements, vec!["UPDATE schema_01.table_01 SET name = 'new' WHERE id = 1;"]);
assert_eq!(result.execution_schema.as_deref(), Some("schema_01"));
}
#[test]
fn gaussdb_m_save_preserves_database_qualifier_without_execution_schema() {
let result = prepare_data_grid_save_for_driver_profile(
DataGridSaveStatementOptions {
database_type: Some(DatabaseType::Gaussdb),
identifier_quote: Some("`".to_string()),
table_meta: DataGridTableMeta {
catalog: None,
database: Some("muts".to_string()),
schema: Some("muts".to_string()),
table_name: "mk_sv_busi_param".to_string(),
primary_keys: vec!["id".to_string()],
columns: Some(vec![column("id", "integer", false, None), column("name", "varchar", false, None)]),
},
columns: vec!["id".to_string(), "name".to_string()],
source_columns: None,
rows: vec![vec![json!(1), json!("old")]],
dirty_rows: vec![(0, vec![(1, json!("new"))])],
deleted_rows: vec![],
new_rows: vec![],
},
Some("GaussDB-M"),
);
assert_eq!(result.validation_error, None);
assert_eq!(result.statements, vec!["UPDATE muts.mk_sv_busi_param SET name = 'new' WHERE id = 1;"]);
assert_eq!(result.execution_schema, None);
}
#[test]