From d650d91d8228f51987028e2fd622c62c668ec06c Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Mon, 1 Dec 2025 10:08:00 +0100 Subject: [PATCH 1/4] table restore script WIP --- packages/sqltree/src/dumpSqlCommand.ts | 7 ++- packages/sqltree/src/types.ts | 1 + .../src/appobj/DatabaseObjectAppObject.svelte | 55 +++++++++++++++---- .../web/src/utility/tableRestoreScript.ts | 45 +++++++++++++++ packages/web/src/widgets/SqlObjectList.svelte | 2 +- 5 files changed, 95 insertions(+), 15 deletions(-) create mode 100644 packages/web/src/utility/tableRestoreScript.ts diff --git a/packages/sqltree/src/dumpSqlCommand.ts b/packages/sqltree/src/dumpSqlCommand.ts index e8286bafb..b3b9373a4 100644 --- a/packages/sqltree/src/dumpSqlCommand.ts +++ b/packages/sqltree/src/dumpSqlCommand.ts @@ -1,7 +1,7 @@ import type { SqlDumper } from 'dbgate-types'; import { Command, Select, Update, Delete, Insert } from './types'; import { dumpSqlExpression } from './dumpSqlExpression'; -import { dumpSqlFromDefinition, dumpSqlSourceRef } from './dumpSqlSource'; +import { dumpSqlFromDefinition, dumpSqlSourceDef, dumpSqlSourceRef } from './dumpSqlSource'; import { dumpSqlCondition } from './dumpSqlCondition'; export function dumpSqlSelect(dmp: SqlDumper, cmd: Select) { @@ -115,7 +115,10 @@ export function dumpSqlInsert(dmp: SqlDumper, cmd: Insert) { cmd.fields.map(x => x.targetColumn) ); dmp.putCollection(',', cmd.fields, x => dumpSqlExpression(dmp, x)); - if (dmp.dialect.requireFromDual) { + if (cmd.whereNotExistsSource) { + dmp.put(' ^from '); + dumpSqlSourceDef(dmp, cmd.whereNotExistsSource); + } else if (dmp.dialect.requireFromDual) { dmp.put(' ^from ^dual '); } dmp.put(' ^where ^not ^exists (^select * ^from %f ^where ', cmd.targetTable); diff --git a/packages/sqltree/src/types.ts b/packages/sqltree/src/types.ts index bce0e61d3..493745059 100644 --- a/packages/sqltree/src/types.ts +++ b/packages/sqltree/src/types.ts @@ -44,6 +44,7 @@ export interface Insert { fields: UpdateField[]; targetTable: NamedObjectInfo; insertWhereNotExistsCondition?: Condition; + whereNotExistsSource?: Source; } export interface AllowIdentityInsert { diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 6dfc28d17..3ea5c6037 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -1,6 +1,7 @@