From 3936a96897725ecc179a5ae40606f2646f971059 Mon Sep 17 00:00:00 2001 From: yevhenii moroziuk Date: Thu, 31 Jul 2025 14:37:56 +0300 Subject: [PATCH 1/5] HCK-12141: Improvedcthe support of non check --- forward_engineering/configs/templates.js | 3 ++- forward_engineering/ddlProvider.js | 9 +++++---- .../helpers/alterScriptHelpers/alterEntityHelper.js | 2 +- .../entityHelpers/checkConstraintHelper.js | 9 +++++++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/forward_engineering/configs/templates.js b/forward_engineering/configs/templates.js index 31532327..75e1f53a 100644 --- a/forward_engineering/configs/templates.js +++ b/forward_engineering/configs/templates.js @@ -74,7 +74,8 @@ module.exports = { addColumn: 'ADD ${script}', - addCheckConstraint: 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} CHECK (${expression})${terminator}', + addCheckConstraint: + 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} ${check} (${expression})${terminator}', addNotNullConstraint: 'ALTER TABLE ${tableName} ALTER COLUMN ${columnName} ${columnType} NOT NULL${terminator}', diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index 15720a7f..ff5645a3 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -255,10 +255,10 @@ module.exports = (baseProvider, options, app) => { return createTableIndex(terminator, tableName, index, isActivated && isParentActivated); }, - createCheckConstraint(checkConstraint) { + createCheckConstraint(checkConstraint, isInline = true) { return assignTemplates(templates.checkConstraint, { name: checkConstraint.name, - check: checkConstraint.check ? 'CHECK' : 'NO CHECK', + check: checkConstraint.check || isInline ? 'CHECK' : 'NO CHECK', notForReplication: checkConstraint.enforceForReplication ? '' : ' NOT FOR REPLICATION', expression: _.trim(checkConstraint.expression).replace(/^\(([\s\S]*)\)$/, '$1'), terminator, @@ -717,7 +717,7 @@ module.exports = (baseProvider, options, app) => { alterTableAddCheckConstraint(fullTableName, checkConstraint) { return assignTemplates(templates.alterTableAddConstraint, { tableName: fullTableName, - constraint: this.createCheckConstraint(checkConstraint), + constraint: this.createCheckConstraint(checkConstraint, false), terminator, }); }, @@ -971,12 +971,13 @@ module.exports = (baseProvider, options, app) => { }); }, - addCheckConstraint(tableName, constraintName, expression) { + addCheckConstraint(tableName, constraintName, expression, check) { const templateConfig = { tableName, constraintName, expression, terminator, + check: check ? 'CHECK' : 'NO CHECK', }; return assignTemplates(templates.addCheckConstraint, templateConfig); }, diff --git a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js index c7c6f186..b676f5aa 100644 --- a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js @@ -43,7 +43,7 @@ module.exports = (app, options) => { }), ); const checkConstraints = (jsonSchema.chkConstr || []).map(check => - ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check)), + ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check), true), ); const tableData = { name: tableName, diff --git a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js index 69ff18ba..9f400d12 100644 --- a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js @@ -66,8 +66,13 @@ const getAddCheckConstraintScriptDtos = (_, ddlProvider) => (constraintHistory, return constraintHistory .filter(historyEntry => historyEntry.new && !historyEntry.old) .map(historyEntry => { - const { chkConstrName, constrExpression } = historyEntry.new; - return ddlProvider.addCheckConstraint(fullTableName, wrapInBrackets(chkConstrName), constrExpression); + const { chkConstrName, constrCheck, constrExpression } = historyEntry.new; + return ddlProvider.addCheckConstraint( + fullTableName, + wrapInBrackets(chkConstrName), + constrExpression, + constrCheck, + ); }) .map(script => AlterScriptDto.getInstance([script], true, false)); }; From 5056bf7bb07fb2843955b66332cdbaed9c33362b Mon Sep 17 00:00:00 2001 From: yevhenii moroziuk Date: Thu, 31 Jul 2025 15:48:41 +0300 Subject: [PATCH 2/5] HCK-12184: Add missing function call --- .../entityHelpers/checkConstraintHelper.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js index 9f400d12..9a818524 100644 --- a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js @@ -99,12 +99,16 @@ const getUpdateCheckConstraintScriptDtos = (_, ddlProvider) => (constraintHistor .map(historyEntry => { const { chkConstrName: oldConstrainName } = historyEntry.old; const dropConstraintScript = ddlProvider.dropConstraint(fullTableName, wrapInBrackets(oldConstrainName)); - - const { chkConstrName: newConstrainName, constrExpression: newConstraintExpression } = historyEntry.new; + const { + chkConstrName: newConstrainName, + constrCheck, + constrExpression: newConstraintExpression, + } = historyEntry.new; const addConstraintScript = ddlProvider.addCheckConstraint( fullTableName, wrapInBrackets(newConstrainName), newConstraintExpression, + constrCheck, ); return [ From a204b29b1c82028828b1fd9d084ae6b55724b53f Mon Sep 17 00:00:00 2001 From: yevhenii moroziuk Date: Thu, 31 Jul 2025 18:12:11 +0300 Subject: [PATCH 3/5] HCK-12184: Fix typo --- forward_engineering/ddlProvider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index ff5645a3..e05bb2f3 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -258,7 +258,7 @@ module.exports = (baseProvider, options, app) => { createCheckConstraint(checkConstraint, isInline = true) { return assignTemplates(templates.checkConstraint, { name: checkConstraint.name, - check: checkConstraint.check || isInline ? 'CHECK' : 'NO CHECK', + check: checkConstraint.check || isInline ? 'CHECK' : 'NOCHECK', notForReplication: checkConstraint.enforceForReplication ? '' : ' NOT FOR REPLICATION', expression: _.trim(checkConstraint.expression).replace(/^\(([\s\S]*)\)$/, '$1'), terminator, @@ -977,7 +977,7 @@ module.exports = (baseProvider, options, app) => { constraintName, expression, terminator, - check: check ? 'CHECK' : 'NO CHECK', + check: check ? 'CHECK' : 'NOCHECK', }; return assignTemplates(templates.addCheckConstraint, templateConfig); }, From 0d27026c2a3969951a587d51e95acefb8ec1f373 Mon Sep 17 00:00:00 2001 From: yevhenii moroziuk Date: Fri, 1 Aug 2025 13:12:45 +0300 Subject: [PATCH 4/5] HCK-12184: Improve syntax of check constaint --- forward_engineering/configs/templates.js | 4 ++-- forward_engineering/ddlProvider.js | 2 +- .../alterScriptHelpers/entityHelpers/checkConstraintHelper.js | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/forward_engineering/configs/templates.js b/forward_engineering/configs/templates.js index 75e1f53a..ca486f33 100644 --- a/forward_engineering/configs/templates.js +++ b/forward_engineering/configs/templates.js @@ -23,7 +23,7 @@ module.exports = { spatialIndex: 'CREATE SPATIAL INDEX ${name} ON ${table} (${column})${using}\n${options}${terminator}\n', - checkConstraint: 'CONSTRAINT [${name}] ${check}${notForReplication} (${expression})', + checkConstraint: 'CONSTRAINT [${name}] CHECK${notForReplication} (${expression})', createForeignKeyConstraint: 'CONSTRAINT ${name} FOREIGN KEY (${foreignKey}) REFERENCES ${primaryTable} (${primaryKey}) ${onDelete}${onUpdate}', @@ -75,7 +75,7 @@ module.exports = { addColumn: 'ADD ${script}', addCheckConstraint: - 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} ${check} (${expression})${terminator}', + 'ALTER TABLE ${tableName}${noCheck} ADD CONSTRAINT ${constraintName} CHECK (${expression})${terminator}', addNotNullConstraint: 'ALTER TABLE ${tableName} ALTER COLUMN ${columnName} ${columnType} NOT NULL${terminator}', diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index e05bb2f3..3248c975 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -977,7 +977,7 @@ module.exports = (baseProvider, options, app) => { constraintName, expression, terminator, - check: check ? 'CHECK' : 'NOCHECK', + noCheck: check ? '' : ' WITH NOCHECK', }; return assignTemplates(templates.addCheckConstraint, templateConfig); }, diff --git a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js index 9a818524..eef16c56 100644 --- a/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/entityHelpers/checkConstraintHelper.js @@ -91,8 +91,9 @@ const getUpdateCheckConstraintScriptDtos = (_, ddlProvider) => (constraintHistor const oldName = historyEntry.old.chkConstrName; const newName = historyEntry.new.chkConstrName; const hasOnlyNameChanged = oldExpression === newName && newName !== oldName; + const hasCheckChanged = historyEntry.old.constrCheck !== historyEntry.new.constrCheck; - return oldExpression !== newExpression || hasOnlyNameChanged; + return oldExpression !== newExpression || hasOnlyNameChanged || hasCheckChanged; } return false; }) From 207f709f0c2b5bfc4c8a2c112f44d92190ea40a3 Mon Sep 17 00:00:00 2001 From: yevhenii moroziuk Date: Fri, 1 Aug 2025 14:38:51 +0300 Subject: [PATCH 5/5] HCK-12184: Remove old incorrect logic --- forward_engineering/ddlProvider.js | 5 ++--- .../helpers/alterScriptHelpers/alterEntityHelper.js | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index 3248c975..17c87b97 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -255,10 +255,9 @@ module.exports = (baseProvider, options, app) => { return createTableIndex(terminator, tableName, index, isActivated && isParentActivated); }, - createCheckConstraint(checkConstraint, isInline = true) { + createCheckConstraint(checkConstraint) { return assignTemplates(templates.checkConstraint, { name: checkConstraint.name, - check: checkConstraint.check || isInline ? 'CHECK' : 'NOCHECK', notForReplication: checkConstraint.enforceForReplication ? '' : ' NOT FOR REPLICATION', expression: _.trim(checkConstraint.expression).replace(/^\(([\s\S]*)\)$/, '$1'), terminator, @@ -717,7 +716,7 @@ module.exports = (baseProvider, options, app) => { alterTableAddCheckConstraint(fullTableName, checkConstraint) { return assignTemplates(templates.alterTableAddConstraint, { tableName: fullTableName, - constraint: this.createCheckConstraint(checkConstraint, false), + constraint: this.createCheckConstraint(checkConstraint), terminator, }); }, diff --git a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js index b676f5aa..c7c6f186 100644 --- a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js @@ -43,7 +43,7 @@ module.exports = (app, options) => { }), ); const checkConstraints = (jsonSchema.chkConstr || []).map(check => - ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check), true), + ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check)), ); const tableData = { name: tableName,