table restore script WIP

This commit is contained in:
SPRINX0\prochazka
2025-12-01 10:08:00 +01:00
parent d3322a4a15
commit d650d91d82
5 changed files with 95 additions and 15 deletions

View File

@@ -0,0 +1,45 @@
import _ from 'lodash';
import { dumpSqlInsert, Insert } from 'dbgate-sqltree';
import { TableInfo, SqlDumper } from 'dbgate-types';
export function createTableRestoreScript(backupTable: TableInfo, originalTable: TableInfo, dmp: SqlDumper) {
const bothColumns = _.intersection(
backupTable.columns.map(x => x.columnName),
originalTable.columns.map(x => x.columnName)
);
const keyColumns = _.intersection(
originalTable.primaryKey?.columns?.map(x => x.columnName) || [],
backupTable.columns.map(x => x.columnName)
);
const insert: Insert = {
commandType: 'insert',
targetTable: originalTable,
fields: bothColumns.map(colName => ({
targetColumn: colName,
exprType: 'column',
columnName: colName,
source: { alias: 'bak' },
})),
whereNotExistsSource: { name: backupTable, alias: 'bak' },
insertWhereNotExistsCondition: {
conditionType: 'and',
conditions: keyColumns.map(colName => ({
conditionType: 'binary',
operator: '=',
left: {
exprType: 'column',
columnName: colName,
source: { name: originalTable },
},
right: {
exprType: 'column',
columnName: colName,
source: { alias: 'bak' },
},
})),
},
};
dumpSqlInsert(dmp, insert);
dmp.endCommand();
}