From 899c4a088e712f857fb10bd2cba1f908e3754650 Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 18 Jul 2025 17:32:08 +0300 Subject: [PATCH 1/2] HCK-12045: add pk constraint options to alter statement --- .../entityHelpers/primaryKeyHelper.js | 19 +++++++++++++++++-- .../ddlProvider/ddlProvider.js | 12 +++++++----- .../ddlProvider/ddlTemplates.js | 3 ++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js index e483091..9b53da4 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js @@ -47,6 +47,19 @@ const getDefaultPkConstraintName = collection => { return getEntityNameFromCollection(collection) + '_pk'; }; +/** + * @param {object} primaryKey + * @returns {string} + */ +const getPkConstraintOptions = (primaryKey = {}) => { + const notEnforcedOption = primaryKey.notEnforced ? ' NOT ENFORCED' : ''; + const deferrable = primaryKey.deferrable ? ' DEFERRABLE' : ''; + const initiallyDeferrableOption = primaryKey.initiallyDeferrable ? ' INITIALLY DEFERRED' : ''; + const noRelyOption = primaryKey.noRely ? ' NORELY' : ''; + + return notEnforcedOption + deferrable + initiallyDeferrableOption + noRelyOption; +}; + /** * @return {({collection, dbVersion }: {collection: Object, dbVersion: string }) => Array} * */ @@ -67,11 +80,12 @@ const getAddCompositePkScripts = const guidsOfColumnsInPk = compositePrimaryKey.map(compositePkEntry => compositePkEntry.keyId); const columnNamesForDDL = getPropertiesNamesByGUIDs(collection, guidsOfColumnsInPk); const constraintName = newPk.constraintName || getDefaultPkConstraintName(collection); + const constraintOptions = getPkConstraintOptions(newPk); if (!columnNamesForDDL.length) { return undefined; } - return ddlProvider.addPkConstraint(fullTableName, constraintName, columnNamesForDDL); + return ddlProvider.addPkConstraint(fullTableName, constraintName, columnNamesForDDL, constraintOptions); }) .filter(Boolean) .map(scriptLine => ({ @@ -141,8 +155,9 @@ const getAddPkScripts = const columnNamesForDDL = [nameForDDl]; const constraintName = jsonSchema.primaryKeyOptions?.constraintName || getDefaultPkConstraintName(collection); + const constraintOptions = getPkConstraintOptions(jsonSchema.primaryKeyOptions); - return ddlProvider.addPkConstraint(fullTableName, constraintName, columnNamesForDDL); + return ddlProvider.addPkConstraint(fullTableName, constraintName, columnNamesForDDL, constraintOptions); }) .map(scriptLine => ({ scripts: [ diff --git a/forward_engineering/ddlProvider/ddlProvider.js b/forward_engineering/ddlProvider/ddlProvider.js index 99f7c0c..2369b9d 100644 --- a/forward_engineering/ddlProvider/ddlProvider.js +++ b/forward_engineering/ddlProvider/ddlProvider.js @@ -278,17 +278,19 @@ module.exports = app => { }, /** - * @param tableName {string} - * @param constraintName {string} - * @param pkColumnNames {Array} - * @return string + * @param {string} tableName + * @param {string} constraintName + * @param {Array} pkColumnNames + * @param {string} constraintOptions + * @return {string} * */ - addPkConstraint(tableName, constraintName, pkColumnNames) { + addPkConstraint(tableName, constraintName, pkColumnNames, constraintOptions) { const pkColumns = pkColumnNames.join(', '); const templateConfig = { tableName, constraintName, pkColumns, + constraintOptions, }; return assignTemplates(templates.addPkConstraint, templateConfig); }, diff --git a/forward_engineering/ddlProvider/ddlTemplates.js b/forward_engineering/ddlProvider/ddlTemplates.js index e5615a0..5a3a533 100644 --- a/forward_engineering/ddlProvider/ddlTemplates.js +++ b/forward_engineering/ddlProvider/ddlTemplates.js @@ -36,7 +36,8 @@ module.exports = { dropCheckConstraint: 'ALTER TABLE ${tableName} DROP CONSTRAINT IF EXISTS ${constraintName};', - addPkConstraint: 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} PRIMARY KEY(${pkColumns});', + addPkConstraint: + 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} PRIMARY KEY(${pkColumns})${constraintOptions};', dropPkConstraint: 'ALTER TABLE ${tableName} DROP PRIMARY KEY IF EXISTS ${dropPkOption};', From e3e7009219eaa1aabaf5e9c0da53ca6027470973 Mon Sep 17 00:00:00 2001 From: Serhii Filonenko Date: Fri, 18 Jul 2025 17:38:28 +0300 Subject: [PATCH 2/2] HCK-12045: add name preparation for pk constraint --- .../alterScriptHelpers/entityHelpers/primaryKeyHelper.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js index 9b53da4..8d665f0 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js @@ -79,7 +79,8 @@ const getAddCompositePkScripts = const compositePrimaryKey = newPk.compositePrimaryKey || []; const guidsOfColumnsInPk = compositePrimaryKey.map(compositePkEntry => compositePkEntry.keyId); const columnNamesForDDL = getPropertiesNamesByGUIDs(collection, guidsOfColumnsInPk); - const constraintName = newPk.constraintName || getDefaultPkConstraintName(collection); + const pkConstraintName = newPk.constraintName || getDefaultPkConstraintName(collection); + const constraintName = prepareName(pkConstraintName); const constraintOptions = getPkConstraintOptions(newPk); if (!columnNamesForDDL.length) { @@ -153,8 +154,9 @@ const getAddPkScripts = .map(([name, jsonSchema]) => { const nameForDDl = prepareName(name); const columnNamesForDDL = [nameForDDl]; - const constraintName = + const pkConstraintName = jsonSchema.primaryKeyOptions?.constraintName || getDefaultPkConstraintName(collection); + const constraintName = prepareName(pkConstraintName); const constraintOptions = getPkConstraintOptions(jsonSchema.primaryKeyOptions); return ddlProvider.addPkConstraint(fullTableName, constraintName, columnNamesForDDL, constraintOptions);