mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 00:56:02 +00:00
editing table works
This commit is contained in:
@@ -62,10 +62,13 @@ export function dumpSqlSelect(dmp: SqlDumper, cmd: Select) {
|
||||
}
|
||||
|
||||
export function dumpSqlUpdate(dmp: SqlDumper, cmd: Update) {
|
||||
dmp.put('^update ');
|
||||
dumpSqlSourceRef(dmp, cmd.from);
|
||||
|
||||
dmp.put('&n^set ');
|
||||
if (cmd.alterTableUpdateSyntax) {
|
||||
dmp.put('^alter ^table %f &n^update ', cmd.from?.name);
|
||||
} else {
|
||||
dmp.put('^update ');
|
||||
dumpSqlSourceRef(dmp, cmd.from);
|
||||
dmp.put('&n^set ');
|
||||
}
|
||||
dmp.put('&>');
|
||||
dmp.putCollection(', ', cmd.fields, col => {
|
||||
dmp.put('%i=', col.targetColumn);
|
||||
@@ -81,8 +84,14 @@ export function dumpSqlUpdate(dmp: SqlDumper, cmd: Update) {
|
||||
}
|
||||
|
||||
export function dumpSqlDelete(dmp: SqlDumper, cmd: Delete) {
|
||||
dmp.put('^delete ^from ');
|
||||
dumpSqlSourceRef(dmp, cmd.from);
|
||||
if (cmd.alterTableDeleteSyntax) {
|
||||
dmp.put('^alter ^table ');
|
||||
dumpSqlSourceRef(dmp, cmd.from);
|
||||
dmp.put('^delete ');
|
||||
} else {
|
||||
dmp.put('^delete ^from ');
|
||||
dumpSqlSourceRef(dmp, cmd.from);
|
||||
}
|
||||
|
||||
if (cmd.where) {
|
||||
dmp.put('&n^where ');
|
||||
|
||||
@@ -26,12 +26,17 @@ export interface Update {
|
||||
fields: UpdateField[];
|
||||
from: FromDefinition;
|
||||
where?: Condition;
|
||||
// ALTER TABLE xxx UPDATE col1=val1 - syntax for ClickHouse
|
||||
alterTableUpdateSyntax?: boolean;
|
||||
}
|
||||
|
||||
export interface Delete {
|
||||
commandType: 'delete';
|
||||
from: FromDefinition;
|
||||
where?: Condition;
|
||||
|
||||
// ALTER TABLE xxx DELETE - syntax for ClickHouse
|
||||
alterTableDeleteSyntax?: boolean;
|
||||
}
|
||||
|
||||
export interface Insert {
|
||||
|
||||
@@ -173,4 +173,8 @@ export const driverBase = {
|
||||
parseSqlNull: true,
|
||||
parseHexAsBuffer: true,
|
||||
},
|
||||
|
||||
createSaveChangeSetScript(changeSet, dbinfo, defaultCreator) {
|
||||
return defaultCreator(changeSet, dbinfo);
|
||||
},
|
||||
};
|
||||
|
||||
5
packages/types/engines.d.ts
vendored
5
packages/types/engines.d.ts
vendored
@@ -223,6 +223,11 @@ export interface EngineDriver extends FilterBehaviourProvider {
|
||||
getCollectionExportQueryJson(collection: string, condition: any, sort?: CollectionSortDefinition): {};
|
||||
getScriptTemplates(objectTypeField: keyof DatabaseInfo): { label: string; scriptTemplate: string }[];
|
||||
getScriptTemplateContent(scriptTemplate: string, props: any): Promise<string>;
|
||||
createSaveChangeSetScript(
|
||||
changeSet: any,
|
||||
dbinfo: DatabaseInfo,
|
||||
defaultCreator: (changeSet: any, dbinfo: DatabaseInfo) => any
|
||||
): any[];
|
||||
|
||||
analyserClass?: any;
|
||||
dumperClass?: any;
|
||||
|
||||
@@ -71,10 +71,7 @@
|
||||
changeSetToSql,
|
||||
createChangeSet,
|
||||
createGridCache,
|
||||
createGridConfig,
|
||||
getDeleteCascades,
|
||||
TableFormViewDisplay,
|
||||
TableGridDisplay,
|
||||
} from 'dbgate-datalib';
|
||||
import { findEngineDriver } from 'dbgate-tools';
|
||||
import { reloadDataCacheFunc } from 'dbgate-datalib';
|
||||
@@ -160,7 +157,11 @@
|
||||
|
||||
export function save() {
|
||||
const driver = findEngineDriver($connection, $extensions);
|
||||
const script = changeSetToSql($changeSetStore?.value, $dbinfo);
|
||||
|
||||
const script = driver.createSaveChangeSetScript($changeSetStore?.value, $dbinfo, () =>
|
||||
changeSetToSql($changeSetStore?.value, $dbinfo)
|
||||
);
|
||||
|
||||
const deleteCascades = getDeleteCascades($changeSetStore?.value, $dbinfo);
|
||||
const sql = scriptToSql(driver, script);
|
||||
const deleteCascadesScripts = _.map(deleteCascades, ({ title, commands }) => ({
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const { driverBase } = require('dbgate-tools');
|
||||
const Dumper = require('./Dumper');
|
||||
const { mysqlSplitterOptions } = require('dbgate-query-splitter/lib/options');
|
||||
const _cloneDeepWith = require('lodash/cloneDeepWith');
|
||||
|
||||
/** @type {import('dbgate-types').SqlDialect} */
|
||||
const dialect = {
|
||||
@@ -40,6 +41,35 @@ const driver = {
|
||||
usage == 'editor'
|
||||
? { ...mysqlSplitterOptions, ignoreComments: true, preventSingleLineSplit: true }
|
||||
: mysqlSplitterOptions,
|
||||
|
||||
createSaveChangeSetScript(changeSet, dbinfo, defaultCreator) {
|
||||
function removeConditionSource(cmd) {
|
||||
cmd.where = _cloneDeepWith(cmd.where, (expr) => {
|
||||
if (expr.exprType == 'column') {
|
||||
return {
|
||||
...expr,
|
||||
source: undefined,
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const res = defaultCreator(changeSet, dbinfo);
|
||||
for (const cmd of res) {
|
||||
if (cmd.commandType == 'update') {
|
||||
cmd.alterTableUpdateSyntax = true;
|
||||
removeConditionSource(cmd);
|
||||
}
|
||||
if (cmd.commandType == 'delete') {
|
||||
const table = dbinfo?.tables?.find((x) => x.pureName == cmd?.from?.name?.pureName);
|
||||
if (table?.tableEngine != 'MergeTree') {
|
||||
cmd.alterTableDeleteSyntax = true;
|
||||
}
|
||||
removeConditionSource(cmd);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = driver;
|
||||
|
||||
Reference in New Issue
Block a user