deleted columns prefix

This commit is contained in:
Jan Prochazka
2024-10-31 12:50:08 +01:00
parent 2ce20b5fac
commit 4ab9ad6881
2 changed files with 75 additions and 15 deletions

View File

@@ -506,9 +506,9 @@ describe('Deploy database', () => {
], ],
{ {
dbdiffOptionsExtra: { dbdiffOptionsExtra: {
allowTableMarkDropped: true, deletedTablePrefix: '_deleted_',
allowSqlObjectMarkDropped: true, deletedColumnPrefix: '_deleted_',
allowColumnMarkDropped: true, deletedSqlObjectPrefix: '_deleted_',
}, },
finalCheckAgainstModel: [ finalCheckAgainstModel: [
{ {
@@ -528,7 +528,7 @@ describe('Deploy database', () => {
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))( test.each(engines.filter(engine => engine.supportRenameSqlObject).map(engine => [engine.label, engine]))(
'Mark view removed - %s', 'Mark view removed - %s',
testWrapper(async (conn, driver, engine) => { testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy( await testDatabaseDeploy(
@@ -569,9 +569,9 @@ describe('Deploy database', () => {
], ],
{ {
dbdiffOptionsExtra: { dbdiffOptionsExtra: {
allowTableMarkDropped: true, deletedTablePrefix: '_deleted_',
allowSqlObjectMarkDropped: true, deletedColumnPrefix: '_deleted_',
allowColumnMarkDropped: true, deletedSqlObjectPrefix: '_deleted_',
}, },
finalCheckAgainstModel: [ finalCheckAgainstModel: [
{ {
@@ -594,4 +594,60 @@ describe('Deploy database', () => {
); );
}) })
); );
test.each(engines.map(engine => [engine.label, engine]))(
'Mark column removed - %s',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
engine,
conn,
driver,
[
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: 'val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
[
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [{ name: 'id', type: 'int' }],
primaryKey: ['id'],
},
},
],
],
{
dbdiffOptionsExtra: {
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
finalCheckAgainstModel: [
{
name: 't1.table.yaml',
json: {
name: 't1',
columns: [
{ name: 'id', type: 'int' },
{ name: '_deleted_val', type: 'int' },
],
primaryKey: ['id'],
},
},
],
}
);
})
);
}); });

View File

@@ -36,15 +36,15 @@ export interface DbDiffOptions {
noDropTable?: boolean; noDropTable?: boolean;
allowTableRecreateWhenNoDrop?: boolean; allowTableRecreateWhenNoDrop?: boolean;
allowTableMarkDropped?: boolean; deletedTablePrefix?: string;
noDropColumn?: boolean; noDropColumn?: boolean;
allowColumnMarkDropped?: boolean; deletedColumnPrefix?: string;
noDropConstraint?: boolean; noDropConstraint?: boolean;
noDropSqlObject?: boolean; noDropSqlObject?: boolean;
allowSqlObjectMarkDropped?: boolean; deletedSqlObjectPrefix?: string;
noRenameTable?: boolean; noRenameTable?: boolean;
noRenameColumn?: boolean; noRenameColumn?: boolean;
@@ -425,7 +425,11 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf
if (!opts.noDropConstraint) { if (!opts.noDropConstraint) {
constraintPairs.filter(x => x[1] == null).forEach(x => plan.dropConstraint(x[0])); constraintPairs.filter(x => x[1] == null).forEach(x => plan.dropConstraint(x[0]));
} }
if (!opts.noDropColumn) { if (opts.deletedColumnPrefix) {
columnPairs
.filter(x => x[1] == null)
.forEach(x => plan.renameColumn(x[0], opts.deletedColumnPrefix + x[0].columnName));
} else if (!opts.noDropColumn) {
columnPairs.filter(x => x[1] == null).forEach(x => plan.dropColumn(x[0])); columnPairs.filter(x => x[1] == null).forEach(x => plan.dropColumn(x[0]));
} }
@@ -573,8 +577,8 @@ export function createAlterDatabasePlan(
const newobj = (newDb[objectTypeField] || []).find(x => x.pairingId == oldobj.pairingId); const newobj = (newDb[objectTypeField] || []).find(x => x.pairingId == oldobj.pairingId);
if (objectTypeField == 'tables') { if (objectTypeField == 'tables') {
if (newobj == null) { if (newobj == null) {
if (opts.allowTableMarkDropped) { if (opts.deletedTablePrefix) {
plan.renameTable(oldobj, '_deleted_' + oldobj.pureName); plan.renameTable(oldobj, opts.deletedTablePrefix + oldobj.pureName);
} else if (!opts.noDropTable) { } else if (!opts.noDropTable) {
plan.dropTable(oldobj); plan.dropTable(oldobj);
} }
@@ -583,8 +587,8 @@ export function createAlterDatabasePlan(
} }
} else { } else {
if (newobj == null) { if (newobj == null) {
if (opts.allowSqlObjectMarkDropped && driver.dialect.renameSqlObject) { if (opts.deletedSqlObjectPrefix && driver.dialect.renameSqlObject) {
plan.renameSqlObject(oldobj, '_deleted_' + oldobj.pureName); plan.renameSqlObject(oldobj, opts.deletedSqlObjectPrefix + oldobj.pureName);
} else if (!opts.noDropSqlObject) { } else if (!opts.noDropSqlObject) {
plan.dropSqlObject(oldobj); plan.dropSqlObject(oldobj);
} }