From 476e27569d95ec0c297c92544d0e3e274173d7da Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Wed, 5 Nov 2025 12:53:20 +0100 Subject: [PATCH 1/2] HCK-13367: keep delimiter in the last column statement if there are constraints after --- forward_engineering/ddlProvider.js | 25 ++++++++++++++++--- .../joinActivatedAndDeactivatedStatements.js | 21 ++++++++++------ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index c3272000..cc68d97c 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -106,6 +106,16 @@ module.exports = (baseProvider, options, app) => { tab, }); + const hasActiveConstraints = ({ + foreignKeyConstraints = [], + primaryKeyConstraints = [], + uniqueKeyConstraints = [], + }) => { + return [...foreignKeyConstraints, ...primaryKeyConstraints, ...uniqueKeyConstraints].some( + constraint => constraint.isActivated, + ); + }; + const getOutOfLineConstraints = ( isParentActivated, foreignKeyConstraints = [], @@ -117,7 +127,7 @@ module.exports = (baseProvider, options, app) => { isParentActivated ? commentIfDeactivated(constraint.statement, constraint) : constraint.statement, ); - return !isEmpty(constraints) ? ',\n\t\t' + constraints.join(',\n\t\t') : ''; + return isEmpty(constraints) ? '' : '\n\t\t' + constraints.join(',\n\t\t'); }; function insertNewlinesAtEdges(input) { @@ -356,7 +366,6 @@ module.exports = (baseProvider, options, app) => { const copyOptions = tab(getCopyOptions(tableData.copyOptions), ' '); const atOrBefore = tab(getAtOrBefore(tableData.cloneParams), ' '); const columns = tableData.columns.map(column => commentIfDeactivated(column.statement, column)); - const columnDefinitions = joinActivatedAndDeactivatedStatements({ statements: columns, indent: '\n\t\t' }); const tagsStatement = getTagStatement({ tags: tableData.tableTags, isCaseSensitive: tableData.isCaseSensitive, @@ -446,7 +455,11 @@ module.exports = (baseProvider, options, app) => { ), orReplace, tableIfNotExists, - column_definitions: columnDefinitions, + column_definitions: joinActivatedAndDeactivatedStatements({ + statements: columns, + indent: '\n\t\t', + keepLastDelimiter: hasActiveConstraints(tableData), + }), out_of_line_constraints: getOutOfLineConstraints( isActivated, tableData.foreignKeyConstraints, @@ -466,7 +479,11 @@ module.exports = (baseProvider, options, app) => { [clusterKeys, stageFileFormat, copyOptions, dataRetentionTime, copyGrants, tagsStatement], comment, ), - column_definitions: columnDefinitions, + column_definitions: joinActivatedAndDeactivatedStatements({ + statements: columns, + indent: '\n\t\t', + keepLastDelimiter: hasActiveConstraints(tableData), + }), out_of_line_constraints: getOutOfLineConstraints( isActivated, tableData.foreignKeyConstraints, diff --git a/forward_engineering/utils/joinActivatedAndDeactivatedStatements.js b/forward_engineering/utils/joinActivatedAndDeactivatedStatements.js index 37d5863f..228b60a6 100644 --- a/forward_engineering/utils/joinActivatedAndDeactivatedStatements.js +++ b/forward_engineering/utils/joinActivatedAndDeactivatedStatements.js @@ -30,18 +30,25 @@ const getDelimiter = ({ index, numberOfStatements, lastIndexOfActivatedStatement * }} * @return {string} * */ -const joinActivatedAndDeactivatedStatements = ({ statements = [], delimiter = ',', indent = '\n' }) => { +const joinActivatedAndDeactivatedStatements = ({ + statements = [], + delimiter = ',', + indent = '\n', + keepLastDelimiter = false, +}) => { const lastIndexOfActivatedStatement = statements.findLastIndex(statement => !statement.startsWith('//')); const numberOfStatements = statements.length; return statements .map((statement, index) => { - const currentDelimiter = getDelimiter({ - index, - numberOfStatements, - lastIndexOfActivatedStatement, - delimiter, - }); + const currentDelimiter = keepLastDelimiter + ? delimiter + : getDelimiter({ + index, + numberOfStatements, + lastIndexOfActivatedStatement, + delimiter, + }); return statement + currentDelimiter; }) From d57fbab118c23b4200cbbd0f37540bc0ec883273 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Wed, 5 Nov 2025 15:03:23 +0100 Subject: [PATCH 2/2] fix names --- forward_engineering/ddlProvider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forward_engineering/ddlProvider.js b/forward_engineering/ddlProvider.js index cc68d97c..bbf0963d 100644 --- a/forward_engineering/ddlProvider.js +++ b/forward_engineering/ddlProvider.js @@ -108,10 +108,10 @@ module.exports = (baseProvider, options, app) => { const hasActiveConstraints = ({ foreignKeyConstraints = [], - primaryKeyConstraints = [], - uniqueKeyConstraints = [], + compositePrimaryKeys = [], + compositeUniqueKeys = [], }) => { - return [...foreignKeyConstraints, ...primaryKeyConstraints, ...uniqueKeyConstraints].some( + return [...foreignKeyConstraints, ...compositePrimaryKeys, ...compositeUniqueKeys].some( constraint => constraint.isActivated, ); };