diff --git a/packages/api/src/shell/deployDb.js b/packages/api/src/shell/deployDb.js index 17243b820..a0ab51614 100644 --- a/packages/api/src/shell/deployDb.js +++ b/packages/api/src/shell/deployDb.js @@ -10,6 +10,7 @@ async function deployDb({ loadedDbModel, modelTransforms, dbdiffOptionsExtra, + ignoreNameRegex = '', }) { const { sql } = await generateDeploySql({ connection, @@ -20,6 +21,7 @@ async function deployDb({ loadedDbModel, modelTransforms, dbdiffOptionsExtra, + ignoreNameRegex, }); // console.log('RUNNING DEPLOY SCRIPT:', sql); await executeQuery({ connection, systemConnection, driver, sql, logScriptItems: true }); diff --git a/packages/api/src/shell/generateDeploySql.js b/packages/api/src/shell/generateDeploySql.js index 5ba4f10d3..615dfbaea 100644 --- a/packages/api/src/shell/generateDeploySql.js +++ b/packages/api/src/shell/generateDeploySql.js @@ -6,6 +6,7 @@ const { extendDatabaseInfo, modelCompareDbDiffOptions, enrichWithPreloadedRows, + skipNamesInStructureByRegex, } = require('dbgate-tools'); const importDbModel = require('../utility/importDbModel'); const requireEngineDriver = require('../utility/requireEngineDriver'); @@ -20,6 +21,7 @@ async function generateDeploySql({ loadedDbModel = undefined, modelTransforms = undefined, dbdiffOptionsExtra = {}, + ignoreNameRegex = '', }) { if (!driver) driver = requireEngineDriver(connection); @@ -30,6 +32,10 @@ async function generateDeploySql({ analysedStructure = await driver.analyseFull(dbhan); } + if (ignoreNameRegex) { + analysedStructure = skipNamesInStructureByRegex(analysedStructure, new RegExp(ignoreNameRegex, 'i')); + } + let deployedModelSource = loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder); diff --git a/packages/tools/src/structureTools.ts b/packages/tools/src/structureTools.ts index 1acbc1274..15ff4251b 100644 --- a/packages/tools/src/structureTools.ts +++ b/packages/tools/src/structureTools.ts @@ -203,3 +203,20 @@ export function replaceSchemaInStructure(db: DatabaseInfo, schema: string) { triggers: (db.triggers || []).map(x => ({ ...x, schemaName: schema })), }; } + +export function skipNamesInStructureByRegex(db: DatabaseInfo, regex: RegExp) { + if (!db) { + return db; + } + + 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)), + }; +}