db deploy fixes

This commit is contained in:
SPRINX0\prochazka
2024-10-29 14:28:26 +01:00
parent 456d3ba42e
commit 2704825d03
17 changed files with 184 additions and 30 deletions

View File

@@ -0,0 +1,21 @@
const dataTypeMapperTransform = (oldType, newType) => database => {
return {
...database,
tables: database.tables.map(table => {
return {
...table,
columns: table.columns.map(column => {
if (column.dataType?.toLowerCase() === oldType?.toLowerCase()) {
return {
...column,
dataType: newType,
};
}
return column;
}),
};
}),
};
};
module.exports = dataTypeMapperTransform;

View File

@@ -1,7 +1,15 @@
const generateDeploySql = require('./generateDeploySql');
const executeQuery = require('./executeQuery');
async function deployDb({ connection, systemConnection, driver, analysedStructure, modelFolder, loadedDbModel }) {
async function deployDb({
connection,
systemConnection,
driver,
analysedStructure,
modelFolder,
loadedDbModel,
modelTransforms,
}) {
const { sql } = await generateDeploySql({
connection,
systemConnection,
@@ -9,9 +17,10 @@ async function deployDb({ connection, systemConnection, driver, analysedStructur
analysedStructure,
modelFolder,
loadedDbModel,
modelTransforms,
});
// console.log('RUNNING DEPLOY SCRIPT:', sql);
await executeQuery({ connection, systemConnection, driver, sql });
await executeQuery({ connection, systemConnection, driver, sql, logScriptItems: true });
}
module.exports = deployDb;

View File

@@ -1,11 +1,19 @@
const requireEngineDriver = require('../utility/requireEngineDriver');
const connectUtility = require('../utility/connectUtility');
const { getLogger } = require('dbgate-tools');
const { getLogger, getLimitedQuery } = require('dbgate-tools');
const logger = getLogger('execQuery');
async function executeQuery({ connection = undefined, systemConnection = undefined, driver = undefined, sql }) {
logger.info({ sql }, `Execute query`);
async function executeQuery({
connection = undefined,
systemConnection = undefined,
driver = undefined,
sql,
logScriptItems = false,
}) {
if (!logScriptItems) {
logger.info({ sql: getLimitedQuery(sql) }, `Execute query`);
}
if (!driver) driver = requireEngineDriver(connection);
const dbhan = systemConnection || (await connectUtility(driver, connection, 'script'));
@@ -13,7 +21,7 @@ async function executeQuery({ connection = undefined, systemConnection = undefin
try {
logger.info(`Connected.`);
await driver.script(dbhan, sql);
await driver.script(dbhan, sql, { logScriptItems });
} finally {
if (!systemConnection) {
await driver.close(dbhan);

View File

@@ -18,6 +18,7 @@ async function generateDeploySql({
analysedStructure = undefined,
modelFolder = undefined,
loadedDbModel = undefined,
modelTransforms = undefined,
}) {
if (!driver) driver = requireEngineDriver(connection);
@@ -28,9 +29,15 @@ async function generateDeploySql({
analysedStructure = await driver.analyseFull(dbhan);
}
const deployedModel = generateDbPairingId(
extendDatabaseInfo(loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder))
);
let deployedModelSource = loadedDbModel
? databaseInfoFromYamlModel(loadedDbModel)
: await importDbModel(modelFolder);
for (const transform of modelTransforms || []) {
deployedModelSource = transform(deployedModelSource);
}
const deployedModel = generateDbPairingId(extendDatabaseInfo(deployedModelSource));
const currentModel = generateDbPairingId(extendDatabaseInfo(analysedStructure));
const opts = {
...modelCompareDbDiffOptions,
@@ -57,7 +64,7 @@ async function generateDeploySql({
deployedModel,
driver
);
return res;
} finally {
if (!systemConnection) {

View File

@@ -30,6 +30,8 @@ const dataDuplicator = require('./dataDuplicator');
const dbModelToJson = require('./dbModelToJson');
const jsonToDbModel = require('./jsonToDbModel');
const jsonReader = require('./jsonReader');
const dataTypeMapperTransform = require('./dataTypeMapperTransform');
const sqlTextReplacementTransform = require('./sqlTextReplacementTransform');
const dbgateApi = {
queryReader,
@@ -63,6 +65,8 @@ const dbgateApi = {
dataDuplicator,
dbModelToJson,
jsonToDbModel,
dataTypeMapperTransform,
sqlTextReplacementTransform,
};
requirePlugin.initializeDbgateApi(dbgateApi);

View File

@@ -0,0 +1,28 @@
function replaceInText(text, replacements) {
let result = text;
for (const key of Object.keys(replacements)) {
result = result.split(key).join(replacements[key]);
}
return result;
}
function replaceInCollection(collection, replacements) {
return collection.map(item => {
if (item.createSql) {
return {
...item,
createSql: replaceInText(item.createSql, replacements),
};
}
return item;
});
}
const sqlTextReplacementTransform = replacements => database => {
return {
...database,
views: replaceInCollection(database.views, replacements),
};
};
module.exports = sqlTextReplacementTransform;