deploy db WIP

This commit is contained in:
Jan Prochazka
2021-10-03 09:53:32 +02:00
parent b5f22516b6
commit 58666fd4ec
7 changed files with 48 additions and 18 deletions

View File

@@ -5,6 +5,7 @@ const _ = require('lodash');
const engines = require('../engines');
const deployDb = require('dbgate-api/src/shell/deployDb');
const { databaseInfoFromYamlModel } = require('dbgate-tools');
const generateDeploySql = require('dbgate-api/src/shell/generateDeploySql');
function checkStructure(structure, model) {
const expected = databaseInfoFromYamlModel(model);
@@ -17,6 +18,13 @@ function checkStructure(structure, model) {
async function testDatabaseDeploy(conn, driver, dbModelsYaml) {
for (const loadedDbModel of dbModelsYaml) {
const sql = await generateDeploySql({
systemConnection: conn,
driver,
loadedDbModel,
});
expect(sql.toUpperCase().includes('DROP ')).toBeFalsy();
await deployDb({
systemConnection: conn,
driver,

View File

@@ -116,11 +116,11 @@ const engines = [
const filterLocal = [
// filter local testing
'MySQL',
'PostgreSQL',
'SQL Server',
'-MySQL',
'-PostgreSQL',
'-SQL Server',
'SQLite',
'CockroachDB',
'-CockroachDB',
];
module.exports = process.env.CITEST

View File

@@ -10,7 +10,7 @@ async function deployDb({ connection, systemConnection, driver, analysedStructur
modelFolder,
loadedDbModel,
});
console.log('RUNNING DEPLOY SCRIPT:', sql);
// console.log('RUNNING DEPLOY SCRIPT:', sql);
await executeQuery({ connection, systemConnection, driver, sql });
}

View File

@@ -1,4 +1,3 @@
const { splitQuery } = require('dbgate-query-splitter');
const requireEngineDriver = require('../utility/requireEngineDriver');
const connectUtility = require('../utility/connectUtility');
@@ -9,12 +8,7 @@ async function executeQuery({ connection = undefined, systemConnection = undefin
const pool = systemConnection || (await connectUtility(driver, connection));
console.log(`Connected.`);
for (const sqlItem of splitQuery(sql, driver.getQuerySplitterOptions('script'))) {
console.log('Executing query', sqlItem);
await driver.query(pool, sqlItem, { discardResult: true });
}
console.log(`Query finished`);
await driver.script(pool, sql);
}
module.exports = executeQuery;

View File

@@ -3,6 +3,7 @@ const {
generateDbPairingId,
matchPairedObjects,
databaseInfoFromYamlModel,
extendDatabaseInfo,
} = require('dbgate-tools');
const importDbModel = require('../utility/importDbModel');
const requireEngineDriver = require('../utility/requireEngineDriver');
@@ -23,9 +24,9 @@ async function generateDeploySql({
}
const deployedModel = generateDbPairingId(
loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder)
extendDatabaseInfo(loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder))
);
const currentModel = generateDbPairingId(analysedStructure);
const currentModel = generateDbPairingId(extendDatabaseInfo(analysedStructure));
const currentModelPaired = matchPairedObjects(deployedModel, currentModel);
const { sql } = getAlterDatabaseScript(currentModelPaired, deployedModel, {}, deployedModel, driver);
return sql;

View File

@@ -36,16 +36,19 @@ export class DatabaseInfoAlterProcessor {
createColumn(column: ColumnInfo) {
const table = this.db.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
if (!table) throw new Error(`createColumn error, cannot find table: ${column.schemaName}.${column.pureName}`);
table.columns.push(column);
}
changeColumn(oldColumn: ColumnInfo, newColumn: ColumnInfo) {
const table = this.db.tables.find(x => x.pureName == oldColumn.pureName && x.schemaName == oldColumn.schemaName);
if (!table) throw new Error(`changeColumn error, cannot find table: ${oldColumn.schemaName}.${oldColumn.pureName}`);
table.columns = table.columns.map(x => (x.columnName == oldColumn.columnName ? newColumn : x));
}
dropColumn(column: ColumnInfo) {
const table = this.db.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
if (!table) throw new Error(`dropColumn error, cannot find table: ${column.schemaName}.${column.pureName}`);
_.remove(table.columns, x => x.columnName == column.columnName);
}

View File

@@ -11,7 +11,6 @@ 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';
@@ -117,6 +116,9 @@ export function testEqualColumns(
// return false;
//}
if (a.computedExpression != b.computedExpression) {
console.debug(
`Column ${a.columnName}, ${b.columnName}: different computed expression: ${a.computedExpression}, ${b.computedExpression}`
);
// opts.DiffLogger.Trace(
// 'Column {0}, {1}: different computed expression: {2}; {3}',
// a,
@@ -132,6 +134,10 @@ export function testEqualColumns(
if (checkDefault) {
if (a.defaultValue == null) {
if (a.defaultValue != b.defaultValue) {
console.debug(
`Column ${a.columnName}, ${b.columnName}: different default value: ${a.defaultValue}, ${b.defaultValue}`
);
// opts.DiffLogger.Trace(
// 'Column {0}, {1}: different default values: {2}; {3}',
// a,
@@ -143,6 +149,10 @@ export function testEqualColumns(
}
} else {
if (a.defaultValue != b.defaultValue) {
console.debug(
`Column ${a.columnName}, ${b.columnName}: different default value: ${a.defaultValue}, ${b.defaultValue}`
);
// opts.DiffLogger.Trace(
// 'Column {0}, {1}: different default values: {2}; {3}',
// a,
@@ -154,6 +164,10 @@ export function testEqualColumns(
}
}
if (a.defaultConstraint != b.defaultConstraint) {
console.debug(
`Column ${a.columnName}, ${b.columnName}: different default constraint: ${a.defaultConstraint}, ${b.defaultConstraint}`
);
// opts.DiffLogger.Trace(
// 'Column {0}, {1}: different default constraint names: {2}; {3}',
// a,
@@ -164,15 +178,23 @@ export function testEqualColumns(
return false;
}
}
if (a.notNull != b.notNull) {
if ((a.notNull || false) != (b.notNull || false)) {
console.debug(`Column ${a.columnName}, ${b.columnName}: different nullability: ${a.notNull}, ${b.notNull}`);
// opts.DiffLogger.Trace('Column {0}, {1}: different nullable: {2}; {3}', a, b, a.NotNull, b.NotNull);
return false;
}
if (a.autoIncrement != b.autoIncrement) {
if ((a.autoIncrement || false) != (b.autoIncrement || false)) {
console.debug(
`Column ${a.columnName}, ${b.columnName}: different autoincrement: ${a.autoIncrement}, ${b.autoIncrement}`
);
// opts.DiffLogger.Trace('Column {0}, {1}: different autoincrement: {2}; {3}', a, b, a.AutoIncrement, b.AutoIncrement);
return false;
}
if (a.isSparse != b.isSparse) {
if ((a.isSparse || false) != (b.isSparse || false)) {
console.debug(`Column ${a.columnName}, ${b.columnName}: different is_sparse: ${a.isSparse}, ${b.isSparse}`);
// opts.DiffLogger.Trace('Column {0}, {1}: different is_sparse: {2}; {3}', a, b, a.IsSparse, b.IsSparse);
return false;
}
@@ -215,6 +237,8 @@ function testEqualConstraints(a: ConstraintInfo, b: ConstraintInfo, opts: DbDiff
export function testEqualTypes(a: ColumnInfo, b: ColumnInfo, opts: DbDiffOptions = {}) {
if (a.dataType != b.dataType) {
console.debug(`Column ${a.columnName}, ${b.columnName}: different data type: ${a.dataType}, ${b.dataType}`);
// opts.DiffLogger.Trace("Column {0}, {1}: different types: {2}; {3}", a, b, a.DataType, b.DataType);
return false;
}