feat: generateDefaultValueForUuid, set 'uuid()' for cassandra

This commit is contained in:
Nybkox
2025-01-24 22:14:28 +01:00
parent d35801dcc7
commit f2db514e45
3 changed files with 43 additions and 11 deletions

View File

@@ -234,26 +234,56 @@ function extractFields(
item: ChangeSetItem, item: ChangeSetItem,
allowNulls = true, allowNulls = true,
allowedDocumentColumns: string[] = [], allowedDocumentColumns: string[] = [],
table?: TableInfo table?: TableInfo,
dialect?: SqlDialect
): UpdateField[] { ): UpdateField[] {
const allFields = { const allFields = {
...item.fields, ...item.fields,
}; };
function isUuidColumn(columnName: string): boolean {
return table?.columns.find(x => x.columnName == columnName)?.dataType.toLowerCase() == 'uuid';
}
function createUpdateField(targetColumn: string): UpdateField {
const shouldGenerateDefaultValue =
isUuidColumn(targetColumn) && allFields[targetColumn] == null && dialect?.generateDefaultValueForUuid;
if (shouldGenerateDefaultValue) {
return {
targetColumn,
sql: dialect?.generateDefaultValueForUuid,
exprType: 'raw',
};
}
return {
targetColumn,
exprType: 'value',
value: allFields[targetColumn],
dataType: table?.columns?.find(x => x.columnName == targetColumn)?.dataType,
};
}
for (const docField in item.document || {}) { for (const docField in item.document || {}) {
if (allowedDocumentColumns.includes(docField)) { if (allowedDocumentColumns.includes(docField)) {
allFields[docField] = item.document[docField]; allFields[docField] = item.document[docField];
} }
} }
return _.keys(allFields) const columnNames = Object.keys(allFields);
.filter(targetColumn => allowNulls || allFields[targetColumn] != null) if (dialect?.generateDefaultValueForUuid && table) {
.map(targetColumn => ({ columnNames.push(...table.columns.map(i => i.columnName));
targetColumn, }
exprType: 'value',
value: allFields[targetColumn], return _.uniq(columnNames)
dataType: table?.columns?.find(x => x.columnName == targetColumn)?.dataType, .filter(
})); targetColumn =>
allowNulls ||
allFields[targetColumn] != null ||
(isUuidColumn(targetColumn) && dialect?.generateDefaultValueForUuid)
)
.map(targetColumn => createUpdateField(targetColumn));
} }
function changeSetInsertToSql( function changeSetInsertToSql(
@@ -266,13 +296,13 @@ function changeSetInsertToSql(
item, item,
false, false,
table?.columns?.map(x => x.columnName), table?.columns?.map(x => x.columnName),
table table,
dialect
); );
if (fields.length == 0) return null; if (fields.length == 0) return null;
let autoInc = false; let autoInc = false;
if (table) { if (table) {
const autoIncCol = table.columns.find(x => x.autoIncrement); const autoIncCol = table.columns.find(x => x.autoIncrement);
// console.log('autoIncCol', autoIncCol);
if (autoIncCol && fields.find(x => x.targetColumn == autoIncCol.columnName)) { if (autoIncCol && fields.find(x => x.targetColumn == autoIncCol.columnName)) {
autoInc = true; autoInc = true;
} }

View File

@@ -54,6 +54,7 @@ export interface SqlDialect {
disableRenameTable?: boolean; disableRenameTable?: boolean;
defaultNewTableColumns?: ColumnInfo[]; defaultNewTableColumns?: ColumnInfo[];
sortingKeys?: boolean; sortingKeys?: boolean;
generateDefaultValueForUuid?: string;
// syntax for create column: ALTER TABLE table ADD COLUMN column // syntax for create column: ALTER TABLE table ADD COLUMN column
createColumnWithColumnKeyword?: boolean; createColumnWithColumnKeyword?: boolean;

View File

@@ -21,6 +21,7 @@ const dialect = {
createColumnWithColumnKeyword: true, createColumnWithColumnKeyword: true,
specificNullabilityImplementation: true, specificNullabilityImplementation: true,
disableRenameTable: true, disableRenameTable: true,
generateDefaultValueForUuid: 'uuid()',
omitForeignKeys: true, omitForeignKeys: true,
omitUniqueConstraints: true, omitUniqueConstraints: true,
omitIndexes: true, omitIndexes: true,