From 5aa5ed9ceedd97cb65433385eefbe560d879d320 Mon Sep 17 00:00:00 2001 From: dbin0123 Date: Thu, 11 Jun 2026 23:26:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=E8=A1=A8=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=B8=AD=E5=AD=97=E6=AE=B5=E6=97=A0=E9=95=BF?= =?UTF-8?q?=E5=BA=A6=E6=97=B6=E6=89=A9=E5=B1=95=E5=B1=9E=E6=80=A7=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E4=B8=8D=E7=94=9F=E6=88=90=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/dbx-core/src/table_structure_sql/column_alter.rs | 9 +++++++++ crates/dbx-core/src/table_structure_sql/columns.rs | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/dbx-core/src/table_structure_sql/column_alter.rs b/crates/dbx-core/src/table_structure_sql/column_alter.rs index 2f5c07638..71476e22a 100644 --- a/crates/dbx-core/src/table_structure_sql/column_alter.rs +++ b/crates/dbx-core/src/table_structure_sql/column_alter.rs @@ -6,6 +6,7 @@ use super::util::{ clean, format_default_for_sql, normalize_default, original_comment, original_default, qualified_table, quote_ident, quote_string, }; +use crate::table_structure_sql::ColumnExtra; pub fn build_single_column_alter_sql(options: SingleColumnAlterSqlOptions) -> TableStructureSqlResult { let capabilities = capabilities_for(options.database_type); @@ -88,12 +89,20 @@ pub fn build_single_column_alter_sql(options: SingleColumnAlterSqlOptions) -> Ta TableStructureSqlResult { statements, warnings } } +fn is_column_extra_empty(extra: &ColumnExtra) -> bool { + !extra.auto_increment.unwrap_or(false) + && !extra.on_update_current_timestamp.unwrap_or(false) + && extra.identity.is_none() +} + pub(super) fn has_column_extra_change(column: &EditableStructureColumn) -> bool { let Some(original) = &column.original else { return false }; let current_extra = column.extra.as_ref(); match (current_extra, original.extra.as_deref()) { // Neither has extra → no change (None, None | Some("")) => false, + // Current extra is empty (all None) → no effective extra + (Some(curr), _) if is_column_extra_empty(curr) => false, // Extra added or removed (Some(_), None | Some("")) => true, (None, Some(_)) => true, diff --git a/crates/dbx-core/src/table_structure_sql/columns.rs b/crates/dbx-core/src/table_structure_sql/columns.rs index fd9f7eff8..a4431e88b 100644 --- a/crates/dbx-core/src/table_structure_sql/columns.rs +++ b/crates/dbx-core/src/table_structure_sql/columns.rs @@ -1,7 +1,7 @@ use super::column_alter::{ build_clickhouse_existing_column_sql, build_h2_existing_column_sql, build_mysql_existing_column_sql, build_oracle_like_existing_column_sql, build_postgres_existing_column_sql, build_sqlite_existing_column_sql, - build_sqlserver_existing_column_sql, has_existing_column_attribute_change, + build_sqlserver_existing_column_sql, has_column_extra_change, has_existing_column_attribute_change, }; use super::column_format::column_definition; use super::comments::build_sqlserver_column_comment_sql; @@ -64,7 +64,7 @@ pub(super) fn build_column_sql(options: &TableStructureSqlOptions, warnings: &mu continue; } - if !has_existing_column_attribute_change(column) && !has_position_change { + if !has_existing_column_attribute_change(column) && !has_column_extra_change(column) && !has_position_change { continue; } let original = column.original.as_ref().unwrap(); @@ -72,7 +72,8 @@ pub(super) fn build_column_sql(options: &TableStructureSqlOptions, warnings: &mu let has_attribute_change = column.data_type.trim() != original.data_type.trim() || column.is_nullable != original.is_nullable || normalize_default(Some(&column.default_value)) != original_default(column) - || clean(&column.comment) != original_comment(column); + || clean(&column.comment) != original_comment(column) + || has_column_extra_change(column); if has_position_change && !capabilities.reorder_column { warnings.push(format!("Reordering columns is not supported for {database_label} from this editor.")); }