feat: safeCommentChanges flag to dialect

This commit is contained in:
Pavel
2025-08-07 15:32:24 +02:00
parent a8d9c145e6
commit 21641da0bf
3 changed files with 44 additions and 19 deletions

View File

@@ -292,6 +292,16 @@ export class AlterPlan {
} }
} }
_hasOnlyCommentChange(op: AlterOperation): boolean {
if (op.operationType === 'changeColumn') {
return _.isEqual(
_.omit(op.oldObject, ['columnComment', 'ordinal']),
_.omit(op.newObject, ['columnComment', 'ordinal'])
);
}
return false;
}
_getDependendColumnConstraints(column: ColumnInfo, dependencyDefinition) { _getDependendColumnConstraints(column: ColumnInfo, dependencyDefinition) {
const table = this.wholeOldDb.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName); const table = this.wholeOldDb.tables.find(x => x.pureName == column.pureName && x.schemaName == column.schemaName);
if (!table) return []; if (!table) return [];
@@ -337,12 +347,16 @@ export class AlterPlan {
]) { ]) {
if (op.operationType == testedOperationType) { if (op.operationType == testedOperationType) {
const constraints = this._getDependendColumnConstraints(testedObject as ColumnInfo, testedDependencies); const constraints = this._getDependendColumnConstraints(testedObject as ColumnInfo, testedDependencies);
const ignoreContraints = this.dialect.safeCommentChanges && this._hasOnlyCommentChange(op);
// if (constraints.length > 0 && this.opts.noDropConstraint) { // if (constraints.length > 0 && this.opts.noDropConstraint) {
// return []; // return [];
// } // }
const res: AlterOperation[] = [ const res: AlterOperation[] = [];
if (!ignoreContraints) {
res.push(
...constraints.map(oldObject => { ...constraints.map(oldObject => {
const opRes: AlterOperation = { const opRes: AlterOperation = {
operationType: 'dropConstraint', operationType: 'dropConstraint',
@@ -350,18 +364,25 @@ export class AlterPlan {
isRecreate: true, isRecreate: true,
}; };
return opRes; return opRes;
}), })
op, );
}
res.push(op);
if (!ignoreContraints) {
res.push(
..._.reverse([...constraints]).map(newObject => { ..._.reverse([...constraints]).map(newObject => {
const opRes: AlterOperation = { const opRes: AlterOperation = {
operationType: 'createConstraint', operationType: 'createConstraint',
newObject, newObject,
}; };
return opRes; return opRes;
}), })
]; );
}
if (constraints.length > 0) { if (!ignoreContraints && constraints.length > 0) {
this.recreates.constraints += 1; this.recreates.constraints += 1;
} }
return res; return res;

View File

@@ -80,6 +80,8 @@ export interface SqlDialect {
isPersisted?: true; isPersisted?: true;
}; };
safeCommentChanges?: boolean;
// create sql-tree expression // create sql-tree expression
createColumnViewExpression( createColumnViewExpression(
columnName: string, columnName: string,

View File

@@ -50,6 +50,8 @@ const dialect = {
isPersisted: true, isPersisted: true,
}, },
safeCommentChanges: true,
predefinedDataTypes: [ predefinedDataTypes: [
'bigint', 'bigint',
'bit', 'bit',