diff --git a/packages/api/src/shell/generateDeploySql.js b/packages/api/src/shell/generateDeploySql.js index 6898301a9..f9c98db05 100644 --- a/packages/api/src/shell/generateDeploySql.js +++ b/packages/api/src/shell/generateDeploySql.js @@ -44,15 +44,16 @@ async function generateDeploySql({ analysedStructure = await driver.analyseFull(dbhan); } - if (ignoreNameRegex) { - analysedStructure = skipNamesInStructureByRegex(analysedStructure, new RegExp(ignoreNameRegex, 'i')); - } - analysedStructure = skipDbGateInternalObjects(analysedStructure); - let deployedModelSource = loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder); + if (ignoreNameRegex) { + analysedStructure = skipNamesInStructureByRegex(analysedStructure, new RegExp(ignoreNameRegex, 'i')); + deployedModelSource = skipNamesInStructureByRegex(deployedModelSource, new RegExp(ignoreNameRegex, 'i')); + } + analysedStructure = skipDbGateInternalObjects(analysedStructure); + for (const transform of modelTransforms || []) { deployedModelSource = transform(deployedModelSource); } diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts index 563aa8dd8..48d5c31b2 100644 --- a/packages/tools/src/diffTools.ts +++ b/packages/tools/src/diffTools.ts @@ -748,6 +748,8 @@ export function createAlterDatabasePlan( plan.recreates.sqlObjects += 1; plan.dropSqlObject(oldobj); plan.createSqlObject(newobj); + } else if (!testEqualFullNames(oldobj, newobj, opts)) { + plan.renameSqlObject(oldobj, newobj.pureName); } } } diff --git a/packages/tools/src/structureTools.ts b/packages/tools/src/structureTools.ts index b04f423da..2b33fdb99 100644 --- a/packages/tools/src/structureTools.ts +++ b/packages/tools/src/structureTools.ts @@ -219,13 +219,13 @@ export function skipNamesInStructureByRegex(db: DatabaseInfo, regex: RegExp) { return { ...db, - tables: (db.tables || []).filter(tbl => !regex.test(tbl.pureName)), - views: (db.views || []).filter(tbl => !regex.test(tbl.pureName)), - collections: (db.collections || []).filter(tbl => !regex.test(tbl.pureName)), - matviews: (db.matviews || []).filter(tbl => !regex.test(tbl.pureName)), - procedures: (db.procedures || []).filter(tbl => !regex.test(tbl.pureName)), - functions: (db.functions || []).filter(tbl => !regex.test(tbl.pureName)), - triggers: (db.triggers || []).filter(tbl => !regex.test(tbl.pureName)), + tables: (db.tables || []).filter(x => !regex.test(x.pureName)), + views: (db.views || []).filter(x => !regex.test(x.pureName)), + collections: (db.collections || []).filter(x => !regex.test(x.pureName)), + matviews: (db.matviews || []).filter(x => !regex.test(x.pureName)), + procedures: (db.procedures || []).filter(x => !regex.test(x.pureName)), + functions: (db.functions || []).filter(x => !regex.test(x.pureName)), + triggers: (db.triggers || []).filter(x => !regex.test(x.pureName)), }; } diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 200c0254a..f0de19506 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -197,9 +197,15 @@ forceNewTab: true, icon: 'img perspective', }, - { + hasPermission('dbops/model/edit') && { label: 'Drop view', isDrop: true, + requiresWriteAccess: true, + }, + hasPermission('dbops/model/edit') && { + label: 'Rename view', + isRename: true, + requiresWriteAccess: true, }, { divider: true, @@ -256,9 +262,15 @@ label: 'Open structure', tab: 'TableStructureTab', }, - { + hasPermission('dbops/model/edit') && { label: 'Drop view', isDrop: true, + requiresWriteAccess: true, + }, + hasPermission('dbops/model/edit') && { + label: 'Rename view', + isRename: true, + requiresWriteAccess: true, }, { label: 'Query designer', @@ -318,9 +330,15 @@ ]; case 'procedures': return [ - { + hasPermission('dbops/model/edit') && { label: 'Drop procedure', isDrop: true, + requiresWriteAccess: true, + }, + hasPermission('dbops/model/edit') && { + label: 'Rename procedure', + isRename: true, + requiresWriteAccess: true, }, { label: 'SQL: CREATE PROCEDURE', @@ -349,9 +367,15 @@ ]; case 'functions': return [ - { + hasPermission('dbops/model/edit') && { label: 'Drop function', isDrop: true, + requiresWriteAccess: true, + }, + hasPermission('dbops/model/edit') && { + label: 'Rename function', + isRename: true, + requiresWriteAccess: true, }, { label: 'SQL: CREATE FUNCTION',