mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-26 21:25:59 +00:00
feat: generateDefaultValueForUuid, set 'uuid()' for cassandra
This commit is contained in:
@@ -234,26 +234,56 @@ function extractFields(
|
||||
item: ChangeSetItem,
|
||||
allowNulls = true,
|
||||
allowedDocumentColumns: string[] = [],
|
||||
table?: TableInfo
|
||||
table?: TableInfo,
|
||||
dialect?: SqlDialect
|
||||
): UpdateField[] {
|
||||
const allFields = {
|
||||
...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 || {}) {
|
||||
if (allowedDocumentColumns.includes(docField)) {
|
||||
allFields[docField] = item.document[docField];
|
||||
}
|
||||
}
|
||||
|
||||
return _.keys(allFields)
|
||||
.filter(targetColumn => allowNulls || allFields[targetColumn] != null)
|
||||
.map(targetColumn => ({
|
||||
targetColumn,
|
||||
exprType: 'value',
|
||||
value: allFields[targetColumn],
|
||||
dataType: table?.columns?.find(x => x.columnName == targetColumn)?.dataType,
|
||||
}));
|
||||
const columnNames = Object.keys(allFields);
|
||||
if (dialect?.generateDefaultValueForUuid && table) {
|
||||
columnNames.push(...table.columns.map(i => i.columnName));
|
||||
}
|
||||
|
||||
return _.uniq(columnNames)
|
||||
.filter(
|
||||
targetColumn =>
|
||||
allowNulls ||
|
||||
allFields[targetColumn] != null ||
|
||||
(isUuidColumn(targetColumn) && dialect?.generateDefaultValueForUuid)
|
||||
)
|
||||
.map(targetColumn => createUpdateField(targetColumn));
|
||||
}
|
||||
|
||||
function changeSetInsertToSql(
|
||||
@@ -266,13 +296,13 @@ function changeSetInsertToSql(
|
||||
item,
|
||||
false,
|
||||
table?.columns?.map(x => x.columnName),
|
||||
table
|
||||
table,
|
||||
dialect
|
||||
);
|
||||
if (fields.length == 0) return null;
|
||||
let autoInc = false;
|
||||
if (table) {
|
||||
const autoIncCol = table.columns.find(x => x.autoIncrement);
|
||||
// console.log('autoIncCol', autoIncCol);
|
||||
if (autoIncCol && fields.find(x => x.targetColumn == autoIncCol.columnName)) {
|
||||
autoInc = true;
|
||||
}
|
||||
|
||||
1
packages/types/dialect.d.ts
vendored
1
packages/types/dialect.d.ts
vendored
@@ -54,6 +54,7 @@ export interface SqlDialect {
|
||||
disableRenameTable?: boolean;
|
||||
defaultNewTableColumns?: ColumnInfo[];
|
||||
sortingKeys?: boolean;
|
||||
generateDefaultValueForUuid?: string;
|
||||
|
||||
// syntax for create column: ALTER TABLE table ADD COLUMN column
|
||||
createColumnWithColumnKeyword?: boolean;
|
||||
|
||||
@@ -21,6 +21,7 @@ const dialect = {
|
||||
createColumnWithColumnKeyword: true,
|
||||
specificNullabilityImplementation: true,
|
||||
disableRenameTable: true,
|
||||
generateDefaultValueForUuid: 'uuid()',
|
||||
omitForeignKeys: true,
|
||||
omitUniqueConstraints: true,
|
||||
omitIndexes: true,
|
||||
|
||||
Reference in New Issue
Block a user