package sync import ( "GoNavi-Wails/internal/connection" "fmt" "strings" ) func supportsAutoAddColumnsForPair(sourceType string, targetType string) bool { source := normalizeMigrationDBType(sourceType) target := normalizeMigrationDBType(targetType) if isMySQLLikeWritableTargetType(target) { return isMySQLCoreType(source) } if isPGLikeTarget(target) { return isMySQLLikeSourceType(source) } return false } func buildAddColumnSQLForPair(sourceType string, targetType string, targetQueryTable string, sourceCol connection.ColumnDefinition) (string, error) { source := normalizeMigrationDBType(sourceType) target := normalizeMigrationDBType(targetType) switch { case isMySQLCoreType(source) && isMySQLLikeWritableTargetType(target): colType := sanitizeMySQLColumnType(sourceCol.Type) return fmt.Sprintf("ALTER TABLE %s ADD COLUMN %s %s NULL", quoteQualifiedIdentByType("mysql", targetQueryTable), quoteIdentByType("mysql", sourceCol.Name), colType, ), nil case isMySQLLikeSourceType(source) && isPGLikeTarget(target): colType, _, warnings := mapMySQLColumnToKingbase(sourceCol) if len(warnings) > 0 && strings.Contains(strings.Join(warnings, " "), "identity") { // 对已有目标表补字段时保守处理,不补建自增语义。 } return fmt.Sprintf("ALTER TABLE %s ADD COLUMN %s %s NULL", quoteQualifiedIdentByType(target, targetQueryTable), quoteIdentByType(target, sourceCol.Name), colType, ), nil default: return "", fmt.Errorf("当前不支持 source=%s target=%s 的自动补字段", sourceType, targetType) } } func executeSQLStatements(execFn func(string) (int64, error), statements []string) error { for _, stmt := range statements { trimmed := strings.TrimSpace(stmt) if trimmed == "" { continue } if _, err := execFn(trimmed); err != nil { return err } } return nil }