diff --git a/forward_engineering/ddlProvider/ddlHelpers/constraintsHelper.js b/forward_engineering/ddlProvider/ddlHelpers/constraintsHelper.js index e959901..7f62c37 100644 --- a/forward_engineering/ddlProvider/ddlHelpers/constraintsHelper.js +++ b/forward_engineering/ddlProvider/ddlHelpers/constraintsHelper.js @@ -3,17 +3,22 @@ const { commentIfDeactivated, checkAllKeysDeactivated, getColumnsList, wrapInQuo const assignTemplates = require('../../utils/assignTemplates'); const templates = require('../templates'); -const generateConstraintsString = (dividedConstraints, isParentActivated) => { +const generateConstraintsString = ({ + dividedConstraints, + isParentActivated, + activatedConstraintsPrefix = ',\n\t', + deactivatedConstraintsPrefix = '\n\t', +}) => { const deactivatedItemsAsString = commentIfDeactivated((dividedConstraints?.deactivatedItems || []).join(',\n\t'), { isActivated: !isParentActivated, isPartOfLine: true, }); const activatedConstraints = dividedConstraints?.activatedItems?.length - ? ',\n\t' + dividedConstraints.activatedItems.join(',\n\t') + ? activatedConstraintsPrefix + dividedConstraints.activatedItems.join(',\n\t') : ''; const deactivatedConstraints = dividedConstraints?.deactivatedItems?.length - ? '\n\t' + deactivatedItemsAsString + ? deactivatedConstraintsPrefix + deactivatedItemsAsString : ''; return activatedConstraints + deactivatedConstraints; diff --git a/forward_engineering/ddlProvider/ddlProvider.js b/forward_engineering/ddlProvider/ddlProvider.js index a19b83e..4c40b13 100644 --- a/forward_engineering/ddlProvider/ddlProvider.js +++ b/forward_engineering/ddlProvider/ddlProvider.js @@ -16,6 +16,7 @@ const { getNamePrefixedWithSchemaName, getViewData, getDbVersion, + addCommaPrefix, } = require('../utils/general'); const assignTemplates = require('../utils/assignTemplates'); const { @@ -137,19 +138,29 @@ module.exports = (baseProvider, options, app) => { const constraintWarnings = getConstraintsWarnings( keyConstraints.filter(({ errorMessage }) => errorMessage), ); - const keyConstraintsString = `${generateConstraintsString( - dividedKeysConstraints, - isActivated, - )}${constraintWarnings}`; + const doKeyConstraintsHaveWarnings = Boolean(constraintWarnings); + const keyConstraintsString = `${generateConstraintsString({ + dividedConstraints: dividedKeysConstraints, + isParentActivated: isActivated, + })}${addCommaPrefix(constraintWarnings, doKeyConstraintsHaveWarnings)}`; const keyConstraintsValue = partitionOf ? keyConstraintsString?.slice(1) : keyConstraintsString; const dividedForeignKeys = divideIntoActivatedAndDeactivated(foreignKeyConstraints, key => key.statement); - const foreignKeyConstraintsString = generateConstraintsString(dividedForeignKeys, isActivated); + const shouldAddCommaPrefixToForeignKeysConstraints = + !doKeyConstraintsHaveWarnings || checkConstraints.length !== 0; + const foreignKeyConstraintsString = generateConstraintsString({ + dividedConstraints: dividedForeignKeys, + isParentActivated: isActivated, + activatedConstraintsPrefix: addCommaPrefix('\n\t', shouldAddCommaPrefixToForeignKeysConstraints), + }); const columnDescriptions = '\n' + getColumnComments(tableName, columnDefinitions); const template = partitionOf ? templates.createTablePartitionOf : templates.createTable; - const checkConstraintPrefix = partitionOf && !keyConstraintsString ? '\n\t' : ',\n\t'; + const checkConstraintPrefix = + partitionOf && !keyConstraintsString + ? '\n\t' + : `${addCommaPrefix('\n\t', !doKeyConstraintsHaveWarnings)}`; const checkConstraintsValue = !_.isEmpty(checkConstraints) ? wrap(_.join(checkConstraints, ',\n\t'), checkConstraintPrefix, '') : ''; diff --git a/forward_engineering/utils/general.js b/forward_engineering/utils/general.js index 9ab9a78..ae71471 100644 --- a/forward_engineering/utils/general.js +++ b/forward_engineering/utils/general.js @@ -118,6 +118,8 @@ const wrap = (str, start = "'", end = "'") => { } }; +const addCommaPrefix = (string, shouldAddComma) => (shouldAddComma ? `,${string}` : string); + const checkFieldPropertiesChanged = (compMod, propertiesToCheck) => { return propertiesToCheck.some(prop => compMod?.oldField[prop] !== compMod?.newField[prop]); }; @@ -298,4 +300,5 @@ module.exports = { getSchemaNameFromCollection, getGroupItemsByCompMode, wrapInSingleQuotes, + addCommaPrefix, };