mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-17 23:45:59 +00:00
deploy db WIP
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user