mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 19:56:00 +00:00
feat: generateDefaultValueForUuid, set 'uuid()' for cassandra
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/types/dialect.d.ts
vendored
1
packages/types/dialect.d.ts
vendored
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user