fix(grid): allow generated insert columns
This commit is contained in:
parent
9dd184a26b
commit
42501cc8fb
|
|
@ -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>,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue