fix(table): keep mysql DEFAULT_GENERATED columns copyable

This commit is contained in:
二丫讲梵
2026-09-11 12:06:23 +08:00
committed by GitHub
parent ee7ee0d572
commit 3840426128
2 changed files with 5 additions and 3 deletions
+3 -1
View File
@@ -94,7 +94,9 @@ export function tableDataCopyColumnOptions(databaseType: DatabaseType | undefine
function isWritableTableDataCopyColumn(databaseType: DatabaseType | undefined, column: ColumnInfo): boolean {
const extra = (column.extra ?? "").toLowerCase();
if (databaseType === "mysql") {
return !extra.includes("generated");
// DEFAULT_GENERATED marks a writable expression default, not a generated column.
// Accept both raw EXTRA metadata and the backend's expanded generation clause.
return !/\b(?:virtual|stored|persistent)\s+generated\b|\bgenerated\s+always\s+as\s*\(/.test(extra);
}
if (databaseType === "postgres") {
return !extra.includes("generated always as (");
+2 -2
View File
@@ -72,8 +72,8 @@ test("table data copy uses only writable columns for first-class databases", ()
postgresOverridingSystemValue: true,
sqlserverIdentityInsert: false,
});
assert.deepEqual(tableDataCopyColumnOptions("mysql", [{ ...columns[0], extra: "auto_increment" }, { ...columns[1] }, { ...columns[2], extra: "STORED GENERATED" }]), {
columns: ["id", "name"],
assert.deepEqual(tableDataCopyColumnOptions("mysql", [{ ...columns[0], extra: "auto_increment" }, { ...columns[1] }, { ...columns[2], extra: "STORED GENERATED" }, column("expr_default", "DEFAULT_GENERATED"), column("expr_default_on_update", "DEFAULT_GENERATED on update CURRENT_TIMESTAMP"), column("virtual_full_name", "VIRTUAL GENERATED"), column("stored_full_name", "GENERATED ALWAYS AS (concat(first_name, ' ', last_name)) STORED")]), {
columns: ["id", "name", "expr_default", "expr_default_on_update"],
postgresOverridingSystemValue: false,
sqlserverIdentityInsert: false,
});