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: {
allowTableMarkDropped: true,
allowSqlObjectMarkDropped: true,
allowColumnMarkDropped: true,
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
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',
testWrapper(async (conn, driver, engine) => {
await testDatabaseDeploy(
@@ -569,9 +569,9 @@ describe('Deploy database', () => {
],
{
dbdiffOptionsExtra: {
allowTableMarkDropped: true,
allowSqlObjectMarkDropped: true,
allowColumnMarkDropped: true,
deletedTablePrefix: '_deleted_',
deletedColumnPrefix: '_deleted_',
deletedSqlObjectPrefix: '_deleted_',
},
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;
allowTableRecreateWhenNoDrop?: boolean;
allowTableMarkDropped?: boolean;
deletedTablePrefix?: string;
noDropColumn?: boolean;
allowColumnMarkDropped?: boolean;
deletedColumnPrefix?: string;
noDropConstraint?: boolean;
noDropSqlObject?: boolean;
allowSqlObjectMarkDropped?: boolean;
deletedSqlObjectPrefix?: string;
noRenameTable?: boolean;
noRenameColumn?: boolean;
@@ -425,7 +425,11 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf
if (!opts.noDropConstraint) {
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]));
}
@@ -573,8 +577,8 @@ export function createAlterDatabasePlan(
const newobj = (newDb[objectTypeField] || []).find(x => x.pairingId == oldobj.pairingId);
if (objectTypeField == 'tables') {
if (newobj == null) {
if (opts.allowTableMarkDropped) {
plan.renameTable(oldobj, '_deleted_' + oldobj.pureName);
if (opts.deletedTablePrefix) {
plan.renameTable(oldobj, opts.deletedTablePrefix + oldobj.pureName);
} else if (!opts.noDropTable) {
plan.dropTable(oldobj);
}
@@ -583,8 +587,8 @@ export function createAlterDatabasePlan(
}
} else {
if (newobj == null) {
if (opts.allowSqlObjectMarkDropped && driver.dialect.renameSqlObject) {
plan.renameSqlObject(oldobj, '_deleted_' + oldobj.pureName);
if (opts.deletedSqlObjectPrefix && driver.dialect.renameSqlObject) {
plan.renameSqlObject(oldobj, opts.deletedSqlObjectPrefix + oldobj.pureName);
} else if (!opts.noDropSqlObject) {
plan.dropSqlObject(oldobj);
}