fix(grid): allow generated insert columns

This commit is contained in:
t8y2 2026-05-13 17:37:29 +08:00
parent 9dd184a26b
commit 42501cc8fb
2 changed files with 25 additions and 1 deletions

View File

@ -14,6 +14,7 @@ export interface DataGridColumnInfo {
name: string;
is_nullable: boolean;
column_default?: string | null;
extra?: string | null;
}
export interface DataGridSaveStatementOptions {
@ -38,7 +39,11 @@ export function validateDataGridSave(options: DataGridSaveValidationOptions): st
const notNullColumns = new Set(
(options.columnInfo ?? [])
.filter(
(column) => !column.is_nullable && !column.column_default && !isOracleRowId(options.databaseType, column.name),
(column) =>
!column.is_nullable &&
!column.column_default &&
!isAutoGeneratedColumn(column) &&
!isOracleRowId(options.databaseType, column.name),
)
.map((column) => normalizeColumnName(column.name)),
);
@ -214,6 +219,10 @@ function isOracleRowId(databaseType: DatabaseType | undefined, name: string | un
return databaseType === "oracle" && name?.toUpperCase() === DBX_ROWID_COLUMN;
}
function isAutoGeneratedColumn(column: DataGridColumnInfo): boolean {
return /\b(auto_increment|autoincrement|identity)\b/i.test(column.extra ?? "");
}
function isNullWriteToNotNullColumn(
databaseType: DatabaseType | undefined,
notNullColumns: Set<string>,

View File

@ -83,3 +83,18 @@ test("rejects NULL writes to non-null table columns", () => {
assert.equal(error, 'Column "CREATED_AT" does not allow NULL.');
});
test("allows NULL for MySQL auto increment columns when inserting rows", () => {
const error = validateDataGridSave({
databaseType: "mysql",
columns: ["id", "name"],
columnInfo: [
{ name: "id", is_nullable: false, column_default: null, is_primary_key: true, extra: "auto_increment" },
{ name: "name", is_nullable: false, column_default: null, is_primary_key: false, extra: null },
],
dirtyRows: [],
newRows: [[null, "Ada"]],
});
assert.equal(error, undefined);
});