diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts index 873188f4e..55c34ddba 100644 --- a/packages/tools/src/diffTools.ts +++ b/packages/tools/src/diffTools.ts @@ -1,7 +1,9 @@ import { ColumnInfo, ConstraintInfo, DatabaseInfo, EngineDriver, NamedObjectInfo, TableInfo } from 'dbgate-types'; +import _ from 'lodash'; import uuidv1 from 'uuid/v1'; import { AlterPlan } from './alterPlan'; import stableStringify from 'json-stable-stringify'; +import { isArray } from 'lodash'; type DbDiffSchemaMode = 'strict' | 'ignore' | 'ignoreImplicit'; @@ -44,10 +46,20 @@ export function generateTablePairingId(table: TableInfo): TableInfo { return table; } +function generateObjectPairingId(obj) { + if (obj.objectTypeField) + return { + ...obj, + pairingId: obj.pairingId || uuidv1(), + }; + return obj; +} + export function generateDbPairingId(db: DatabaseInfo): DatabaseInfo { if (!db) return db; + // @ts-ignore return { - ...db, + ..._.mapValues(db, v => (_.isArray(v) ? v.map(generateObjectPairingId) : v)), tables: (db.tables || []).map(generateTablePairingId), }; } @@ -328,7 +340,7 @@ export function createAlterDatabasePlan( if (objectTypeField == 'tables') { if (newobj == null) plan.createTable(newobj); } else { - plan.createSqlObject(newobj); + if (newobj == null) plan.createSqlObject(newobj); } } } diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 587f17f35..f451eb86a 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -114,6 +114,10 @@ label: 'Open structure', tab: 'TableStructureTab', }, + { + label: 'Drop view', + isDrop: true, + }, { label: 'Query designer', isQueryDesigner: true, @@ -175,6 +179,10 @@ label: 'Open structure', tab: 'TableStructureTab', }, + { + label: 'Drop view', + isDrop: true, + }, { label: 'Query designer', isQueryDesigner: true, @@ -227,6 +235,10 @@ }, ], procedures: [ + { + label: 'Drop procedure', + isDrop: true, + }, { label: 'SQL: CREATE PROCEDURE', scriptTemplate: 'CREATE OBJECT', @@ -249,6 +261,10 @@ }, ], functions: [ + { + label: 'Drop function', + isDrop: true, + }, { label: 'SQL: CREATE FUNCTION', scriptTemplate: 'CREATE OBJECT',