mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-22 00:36:01 +00:00
changeset: support save document to SQL
This commit is contained in:
@@ -229,13 +229,23 @@ export function batchUpdateChangeSet(
|
|||||||
return changeSet;
|
return changeSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractFields(item: ChangeSetItem, allowNulls = true): UpdateField[] {
|
function extractFields(item: ChangeSetItem, allowNulls = true, allowedDocumentColumns: string[] = []): UpdateField[] {
|
||||||
return _.keys(item.fields)
|
const allFields = {
|
||||||
.filter(targetColumn => allowNulls || item.fields[targetColumn] != null)
|
...item.fields,
|
||||||
|
};
|
||||||
|
|
||||||
|
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 => ({
|
.map(targetColumn => ({
|
||||||
targetColumn,
|
targetColumn,
|
||||||
exprType: 'value',
|
exprType: 'value',
|
||||||
value: item.fields[targetColumn],
|
value: allFields[targetColumn],
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,11 +253,14 @@ function changeSetInsertToSql(
|
|||||||
item: ChangeSetItem,
|
item: ChangeSetItem,
|
||||||
dbinfo: DatabaseInfo = null
|
dbinfo: DatabaseInfo = null
|
||||||
): [AllowIdentityInsert, Insert, AllowIdentityInsert] {
|
): [AllowIdentityInsert, Insert, AllowIdentityInsert] {
|
||||||
const fields = extractFields(item, false);
|
const table = dbinfo?.tables?.find(x => x.schemaName == item.schemaName && x.pureName == item.pureName);
|
||||||
|
const fields = extractFields(
|
||||||
|
item,
|
||||||
|
false,
|
||||||
|
table?.columns?.map(x => x.columnName)
|
||||||
|
);
|
||||||
if (fields.length == 0) return null;
|
if (fields.length == 0) return null;
|
||||||
let autoInc = false;
|
let autoInc = false;
|
||||||
if (dbinfo) {
|
|
||||||
const table = dbinfo.tables.find(x => x.schemaName == item.schemaName && x.pureName == item.pureName);
|
|
||||||
if (table) {
|
if (table) {
|
||||||
const autoIncCol = table.columns.find(x => x.autoIncrement);
|
const autoIncCol = table.columns.find(x => x.autoIncrement);
|
||||||
// console.log('autoIncCol', autoIncCol);
|
// console.log('autoIncCol', autoIncCol);
|
||||||
@@ -255,7 +268,6 @@ function changeSetInsertToSql(
|
|||||||
autoInc = true;
|
autoInc = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
const targetTable = {
|
const targetTable = {
|
||||||
pureName: item.pureName,
|
pureName: item.pureName,
|
||||||
schemaName: item.schemaName,
|
schemaName: item.schemaName,
|
||||||
@@ -320,7 +332,9 @@ export function extractChangeSetCondition(item: ChangeSetItem, alias?: string):
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeSetUpdateToSql(item: ChangeSetItem): Update {
|
function changeSetUpdateToSql(item: ChangeSetItem, dbinfo: DatabaseInfo = null): Update {
|
||||||
|
const table = dbinfo?.tables?.find(x => x.schemaName == item.schemaName && x.pureName == item.pureName);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
from: {
|
from: {
|
||||||
name: {
|
name: {
|
||||||
@@ -329,7 +343,11 @@ function changeSetUpdateToSql(item: ChangeSetItem): Update {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
commandType: 'update',
|
commandType: 'update',
|
||||||
fields: extractFields(item),
|
fields: extractFields(
|
||||||
|
item,
|
||||||
|
true,
|
||||||
|
table?.columns?.map(x => x.columnName)
|
||||||
|
),
|
||||||
where: extractChangeSetCondition(item),
|
where: extractChangeSetCondition(item),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -351,7 +369,7 @@ export function changeSetToSql(changeSet: ChangeSet, dbinfo: DatabaseInfo): Comm
|
|||||||
return _.compact(
|
return _.compact(
|
||||||
_.flatten([
|
_.flatten([
|
||||||
...(changeSet.inserts.map(item => changeSetInsertToSql(item, dbinfo)) as any),
|
...(changeSet.inserts.map(item => changeSetInsertToSql(item, dbinfo)) as any),
|
||||||
...changeSet.updates.map(changeSetUpdateToSql),
|
...changeSet.updates.map(item => changeSetUpdateToSql(item, dbinfo)),
|
||||||
...changeSet.deletes.map(changeSetDeleteToSql),
|
...changeSet.deletes.map(changeSetDeleteToSql),
|
||||||
])
|
])
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user