fix(grid): preserve result aliases in copied INSERT statements

Closes #9173
This commit is contained in:
t8y2 committed 2026-09-16 00:47:16 +08:00
1 parent 69b138dc22
commit 8373f153a3
1 file changed
+124 -1
+124 -1
View File
@@ -531,7 +531,9 @@ pub fn build_data_grid_copy_insert_statement(options: DataGridCopyInsertStatemen
);
let columns = insert_columns
.iter()
.map(|(column, _, _)| data_grid_identifier(options.database_type, column, options.identifier_quote.as_deref()))
.map(|(_, index, _)| {
data_grid_identifier(options.database_type, &options.columns[*index], options.identifier_quote.as_deref())
})
.collect::<Vec<_>>()
.join(", ");
let value_rows = options
@@ -4025,6 +4027,127 @@ mod tests {
);
}
#[test]
fn copy_insert_uses_display_columns_but_source_columns_for_metadata() {
let statement = build_data_grid_copy_insert_statement(DataGridCopyInsertStatementOptions {
database_type: Some(DatabaseType::Mysql),
identifier_quote: None,
table_meta: Some(DataGridTableMeta {
catalog: None,
database: None,
schema: None,
table_name: "psn_basic_info".to_string(),
primary_keys: vec![],
columns: Some(vec![
DataGridColumnInfo {
name: "PSN_NO".to_string(),
data_type: "varchar(32)".to_string(),
is_nullable: false,
is_primary_key: false,
column_default: None,
extra: None,
},
DataGridColumnInfo {
name: "NAME".to_string(),
data_type: "varchar(32)".to_string(),
is_nullable: true,
is_primary_key: false,
column_default: None,
extra: None,
},
]),
}),
columns: vec!["psn".to_string(), "psn_no".to_string(), "name".to_string()],
column_types: None,
source_columns: Some(vec![
Some("PSN_NO".to_string()),
Some("PSN_NO".to_string()),
Some("NAME".to_string()),
]),
rows: vec![vec![json!("A-1"), json!("A-1"), json!("Ada")]],
exclude_primary_keys: false,
include_computed_columns: false,
insert_mode: DataGridCopyInsertMode::Merged,
});
assert_eq!(
statement.as_deref(),
Some("INSERT INTO `psn_basic_info` (`psn`, `psn_no`, `name`) VALUES ('A-1', 'A-1', 'Ada');")
);
}
#[test]
fn copy_insert_uses_source_columns_for_generated_column_exclusions() {
let statement = build_data_grid_copy_insert_statement(DataGridCopyInsertStatementOptions {
database_type: Some(DatabaseType::Mysql),
identifier_quote: None,
table_meta: Some(DataGridTableMeta {
catalog: None,
database: None,
schema: None,
table_name: "users".to_string(),
primary_keys: vec!["id".to_string()],
columns: Some(vec![
DataGridColumnInfo {
name: "id".to_string(),
data_type: "bigint".to_string(),
is_nullable: false,
is_primary_key: true,
column_default: None,
extra: Some("auto_increment".to_string()),
},
DataGridColumnInfo {
name: "display_name".to_string(),
data_type: "varchar(64)".to_string(),
is_nullable: true,
is_primary_key: false,
column_default: None,
extra: None,
},
DataGridColumnInfo {
name: "display_name_upper".to_string(),
data_type: "varchar(64)".to_string(),
is_nullable: true,
is_primary_key: false,
column_default: None,
extra: Some("virtual generated".to_string()),
},
]),
}),
columns: vec!["identifier".to_string(), "label".to_string(), "label_upper".to_string()],
column_types: None,
source_columns: Some(vec![
Some("id".to_string()),
Some("display_name".to_string()),
Some("display_name_upper".to_string()),
]),
rows: vec![vec![json!(1), json!("Ada"), json!("ADA")]],
exclude_primary_keys: true,
include_computed_columns: false,
insert_mode: DataGridCopyInsertMode::Merged,
});
assert_eq!(statement.as_deref(), Some("INSERT INTO `users` (`label`) VALUES ('Ada');"));
}
#[test]
fn copy_update_keeps_source_columns_for_writeback() {
let statements = build_data_grid_copy_update_statements(DataGridCopyUpdateStatementOptions {
database_type: Some(DatabaseType::Mysql),
identifier_quote: None,
table_meta: DataGridTableMeta {
catalog: None,
database: None,
schema: None,
table_name: "users".to_string(),
primary_keys: vec!["id".to_string()],
columns: None,
},
columns: vec!["identifier".to_string(), "label".to_string()],
source_columns: Some(vec![Some("id".to_string()), Some("display_name".to_string())]),
rows: vec![vec![json!(1), json!("Ada")]],
});
assert_eq!(statements, vec!["UPDATE `users` SET `display_name` = 'Ada' WHERE `id` = 1;"]);
}
#[test]
fn copy_insert_primary_key_exclusion_keeps_manual_composite_key_members() {
let statement = build_data_grid_copy_insert_statement(DataGridCopyInsertStatementOptions {