From 9de9d8e77478025fdf25479216a63b8637191941 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 13:40:34 +0100 Subject: [PATCH 1/6] remove lib --- .../generateContainerScript.js | 8 +- forward_engineering/generateScript.js | 5 +- forward_engineering/generateViewScript.js | 3 +- .../helpers/alterScriptFromDeltaHelper.js | 4 +- forward_engineering/helpers/buildScript.js | 23 +---- package-lock.json | 85 +------------------ package.json | 1 - 7 files changed, 11 insertions(+), 118 deletions(-) diff --git a/forward_engineering/generateContainerScript.js b/forward_engineering/generateContainerScript.js index fff6149..f11f3cf 100644 --- a/forward_engineering/generateContainerScript.js +++ b/forward_engineering/generateContainerScript.js @@ -63,12 +63,11 @@ const generateContainerScript = (data, logger, callback, app) => { const relatedSchemas = parseEntities(data.relatedEntities ?? [], data.relatedSchemas); const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); - const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; if (data.isUpdateScript) { const deltaModelSchema = _.first(Object.values(jsonSchema)) || {}; const definitions = [modelDefinitions, internalDefinitions, externalDefinitions]; - const scripts = getAlterScript(deltaModelSchema, definitions, data, app, needMinify); + const scripts = getAlterScript(deltaModelSchema, definitions, data, app); callback(null, scripts); return; } @@ -117,10 +116,7 @@ const generateContainerScript = (data, logger, callback, app) => { ]); }, []); - callback( - null, - buildScript(needMinify)(...workloadManagementStatements, databaseStatement, ...entities, ...viewsScripts), - ); + callback(null, buildScript(...workloadManagementStatements, databaseStatement, ...entities, ...viewsScripts)); } catch (e) { logger.log('error', { message: e.message, stack: e.stack }, 'Hive Forward-Engineering Error'); diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index b14d4c5..1fe1037 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -16,18 +16,17 @@ const generateScript = (data, logger, callback, app) => { const entityData = data.entityData; const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); - const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; if (data.isUpdateScript) { const definitions = [modelDefinitions, internalDefinitions, externalDefinitions]; - const scripts = getAlterScript(jsonSchema, definitions, data, app, needMinify); + const scripts = getAlterScript(jsonSchema, definitions, data, app); callback(null, scripts); return; } callback( null, - buildScript(needMinify)( + buildScript( getDatabaseStatement(containerData), getTableStatement( containerData, diff --git a/forward_engineering/generateViewScript.js b/forward_engineering/generateViewScript.js index 19daace..27118f0 100644 --- a/forward_engineering/generateViewScript.js +++ b/forward_engineering/generateViewScript.js @@ -6,7 +6,6 @@ const { buildScript } = require('./helpers/buildScript'); const generateViewScript = (data, logger, callback, app) => { try { const viewSchema = JSON.parse(data.jsonSchema || '{}'); - const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; const databaseStatement = getDatabaseStatement(data.containerData); @@ -18,7 +17,7 @@ const generateViewScript = (data, logger, callback, app) => { isKeyspaceActivated: true, }); - callback(null, buildScript(needMinify)(databaseStatement, script)); + callback(null, buildScript(databaseStatement, script)); } catch (error) { logger.log('error', { message: error.message, stack: error.stack }, 'Hive Forward-Engineering Error'); diff --git a/forward_engineering/helpers/alterScriptFromDeltaHelper.js b/forward_engineering/helpers/alterScriptFromDeltaHelper.js index b12bd00..56468a8 100644 --- a/forward_engineering/helpers/alterScriptFromDeltaHelper.js +++ b/forward_engineering/helpers/alterScriptFromDeltaHelper.js @@ -191,7 +191,7 @@ const getInlineRelationships = ({ schema, options }) => { return addedRelationships; }; -const getAlterScript = (schema, definitions, data, app, needMinify) => { +const getAlterScript = (schema, definitions, data, app) => { const provider = require('./alterScriptHelpers/provider')(app); const inlineDeltaRelationships = getInlineRelationships({ schema, options: data.options }); @@ -236,7 +236,7 @@ const getAlterScript = (schema, definitions, data, app, needMinify) => { .filter(Boolean) .map(script => script.trim()); scripts = getCommentedDropScript(scripts, data); - return buildScript(needMinify)(...scripts); + return buildScript(...scripts); }; const getCommentedDropScript = (scripts, data) => { diff --git a/forward_engineering/helpers/buildScript.js b/forward_engineering/helpers/buildScript.js index 0386b4e..93dca9d 100644 --- a/forward_engineering/helpers/buildScript.js +++ b/forward_engineering/helpers/buildScript.js @@ -1,26 +1,7 @@ -const sqlFormatter = require('sql-formatter'); - -const tryFormat = statement => { - try { - // Fails for complex types https://github.com/sql-formatter-org/sql-formatter/issues/735 - return sqlFormatter.format(statement, { language: 'spark', tabWidth: 4, linesBetweenQueries: 2 }); - } catch { - return statement; - } +const buildScript = (...statements) => { + return statements.filter(Boolean).join('\n\n'); }; -const buildScript = - needMinify => - (...statements) => { - if (needMinify) { - return statements.filter(Boolean).join('\n\n'); - } - - const script = statements.filter(Boolean).map(tryFormat).join('\n\n'); - - return script + '\n'; - }; - module.exports = { buildScript, }; diff --git a/package-lock.json b/package-lock.json index d05dc44..2ef1d60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "async": "2.6.4", "big.js": "5.2.2", "lodash": "4.17.21", - "sql-formatter": "15.6.12", "ssl-root-cas": "1.3.1", "thrift": "0.15.0", "uuid": "7.0.3" @@ -969,7 +968,8 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", @@ -1494,12 +1494,6 @@ "node": ">=8" } }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", - "license": "MIT" - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3259,12 +3253,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "license": "BSD-3-Clause" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3277,34 +3265,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "license": "MIT", - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/nearley/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -3678,25 +3638,6 @@ } ] }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "license": "CC0-1.0" - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "license": "MIT", - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3793,15 +3734,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4028,19 +3960,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sql-formatter": { - "version": "15.6.12", - "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.6.12.tgz", - "integrity": "sha512-mkpF+RG402P66VMsnQkWewTRzDBWfu9iLbOfxaW/nAKOS/2A9MheQmcU5cmX0D0At9azrorZwpvcBRNNBozACQ==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "nearley": "^2.20.1" - }, - "bin": { - "sql-formatter": "bin/sql-formatter-cli.cjs" - } - }, "node_modules/ssl-root-cas": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/ssl-root-cas/-/ssl-root-cas-1.3.1.tgz", diff --git a/package.json b/package.json index b492233..3b7277c 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,6 @@ "async": "2.6.4", "big.js": "5.2.2", "lodash": "4.17.21", - "sql-formatter": "15.6.12", "ssl-root-cas": "1.3.1", "thrift": "0.15.0", "uuid": "7.0.3" From 881ed6f70887ab58cfc74aaf3f01a0d2cc661381 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 14:54:12 +0100 Subject: [PATCH 2/6] fix formatting --- forward_engineering/config.json | 5 --- .../alterScriptHelpers/alterEntityHelper.js | 2 +- .../alterScriptHelpers/config/templates.js | 6 +-- forward_engineering/helpers/columnHelper.js | 2 +- .../helpers/constraintHelper.js | 2 +- .../helpers/foreignKeyHelper.js | 4 +- forward_engineering/helpers/tableHelper.js | 2 +- forward_engineering/helpers/viewHelper.js | 39 ++++++++++--------- 8 files changed, 29 insertions(+), 33 deletions(-) diff --git a/forward_engineering/config.json b/forward_engineering/config.json index 1a981c3..89628d8 100644 --- a/forward_engineering/config.json +++ b/forward_engineering/config.json @@ -11,11 +11,6 @@ "view": true }, "additionalOptions": [ - { - "id": "minify", - "value": false, - "name": "Minify" - }, { "id": "applyDropStatements", "value": false, diff --git a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js index 81836cd..3043896 100644 --- a/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js @@ -191,7 +191,7 @@ const getAddCollectionsScripts = return statement; }) - .join('\n'); + .join(',\n'); const collectionScript = getTableStatement( ...hydratedCollection, diff --git a/forward_engineering/helpers/alterScriptHelpers/config/templates.js b/forward_engineering/helpers/alterScriptHelpers/config/templates.js index 0c2d471..57b2180 100644 --- a/forward_engineering/helpers/alterScriptHelpers/config/templates.js +++ b/forward_engineering/helpers/alterScriptHelpers/config/templates.js @@ -65,13 +65,13 @@ module.exports = { 'ALTER TABLE ${tableName} ADD CONSTRAINT ${constraintName} CHECK (${expression}) ${enable}${noValidate}${rely};', addNotNullConstraint: - 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} NOT NULL ${enable}${noValidate}${rely};', + 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} NOT NULL${enable}${noValidate}${rely};', addColumnCheckConstraint: - 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} CHECK (${expression}) ${enable}${noValidate}${rely};', + 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} CHECK (${expression})${enable}${noValidate}${rely};', addDefaultValueConstraint: - 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} DEFAULT ${defaultValue} ${enable}${noValidate}${rely};', + 'ALTER TABLE ${tableName} CHANGE ${columnName} ${columnName} ${type} CONSTRAINT ${constraintName} DEFAULT ${defaultValue}${enable}${noValidate}${rely};', addFkConstraint: 'ALTER TABLE ${childTableName} ADD CONSTRAINT ${constraintName} FOREIGN KEY (${childColumns}) REFERENCES ${parentTableName}(${parentColumns})${disableNoValidate};', diff --git a/forward_engineering/helpers/columnHelper.js b/forward_engineering/helpers/columnHelper.js index 96679a2..4fd3ec7 100644 --- a/forward_engineering/helpers/columnHelper.js +++ b/forward_engineering/helpers/columnHelper.js @@ -402,7 +402,7 @@ const getColumnConstraintsStatement = ({ collection, column, isAlterScript }) => postfix, }); const columnName = skipName ? '' : ` (${column.name})`; - return `CONSTRAINT ${constraintName} ${statement}${columnName} ${noValidate}`; + return `CONSTRAINT ${constraintName} ${statement}${columnName} ${noValidate}`.trim(); }; const statements = []; diff --git a/forward_engineering/helpers/constraintHelper.js b/forward_engineering/helpers/constraintHelper.js index 4b04429..23158ef 100644 --- a/forward_engineering/helpers/constraintHelper.js +++ b/forward_engineering/helpers/constraintHelper.js @@ -44,7 +44,7 @@ const getConstraintOpts = ({ noValidateSpecification, enableSpecification, rely return ''; } - return ` ${enableSpecification}${getPartConstraintOpts(noValidateSpecification)}${getPartConstraintOpts(rely)}`; + return `${enableSpecification}${getPartConstraintOpts(noValidateSpecification)}${getPartConstraintOpts(rely)}`; }; const getUniqueKeyStatement = (jsonSchema, isParentItemActivated) => { diff --git a/forward_engineering/helpers/foreignKeyHelper.js b/forward_engineering/helpers/foreignKeyHelper.js index ccca33b..6067b8a 100644 --- a/forward_engineering/helpers/foreignKeyHelper.js +++ b/forward_engineering/helpers/foreignKeyHelper.js @@ -117,7 +117,7 @@ const getForeignKeyConstraint = ({ disableNoValidate, }) => { const constraintNameStatement = constraintName ? `CONSTRAINT ${prepareName(constraintName)} ` : ''; - const statement = `,${constraintNameStatement}FOREIGN KEY (${childColumns}) REFERENCES ${parentTableName}(${parentColumns}) ${disableNoValidate ? 'DISABLE NOVALIDATE' : ''}`; + const statement = `${constraintNameStatement}FOREIGN KEY (${childColumns}) REFERENCES ${parentTableName}(${parentColumns}) ${disableNoValidate ? 'DISABLE NOVALIDATE' : ''}`; return statement; }; @@ -144,7 +144,7 @@ const getForeignKeyStatementsByHashItem = hashItem => { return commentDeactivatedStatements(statement, isActivated); }) - .join('\n'); + .join(',\n'); }; const getPreparedForeignColumns = (columnsPaths, idToNameHashTable) => { diff --git a/forward_engineering/helpers/tableHelper.js b/forward_engineering/helpers/tableHelper.js index 97d195e..d684a95 100644 --- a/forward_engineering/helpers/tableHelper.js +++ b/forward_engineering/helpers/tableHelper.js @@ -46,7 +46,7 @@ const getCreateStatement = ({ .map(item => item + ' ') .join(''); const fullTableName = dbName ? `${dbName}.${tableName}` : tableName; - const hasConstraint = primaryKeyStatement || uniqueKeyStatement || checkStatement; + const hasConstraint = primaryKeyStatement || uniqueKeyStatement || checkStatement || foreignKeyStatement; return buildStatement( `CREATE${tempExtStatement}TABLE ${ifNotExist ? 'IF NOT EXISTS ' : ''}${fullTableName} (`, diff --git a/forward_engineering/helpers/viewHelper.js b/forward_engineering/helpers/viewHelper.js index 4090d92..47b7ecb 100644 --- a/forward_engineering/helpers/viewHelper.js +++ b/forward_engineering/helpers/viewHelper.js @@ -1,5 +1,5 @@ const _ = require('lodash'); -const { prepareName, commentDeactivatedStatements, encodeStringLiteral } = require('./generalHelper'); +const { prepareName, commentDeactivatedStatements, encodeStringLiteral, indentString } = require('./generalHelper'); const itemIsDeactivated = item => item.startsWith('-- '); @@ -62,7 +62,7 @@ const getFromStatement = (collectionRefsDefinitionsMap, columns) => { return ''; } - return 'FROM ' + sourceCollections.join(' INNER JOIN '); + return 'FROM\n' + indentString(sourceCollections.join('\nINNER JOIN ')); }; const retrievePropertyFromConfig = (config, tab, propertyName, defaultValue = '') => @@ -73,7 +73,7 @@ const retrieveContainerName = containerConfig => module.exports = { getViewScript({ schema, viewData, containerData, collectionRefsDefinitionsMap }) { - let script = []; + let statements = []; const columns = schema.properties || {}; const view = _.first(viewData) || {}; @@ -86,9 +86,20 @@ module.exports = { const comment = view.description; const fromStatement = getFromStatement(collectionRefsDefinitionsMap, columns); const name = bucketName ? `${bucketName}.${viewName}` : `${viewName}`; - const createStatement = `CREATE ${orReplace && !ifNotExists ? 'OR REPLACE ' : ''}${isMaterialized ? 'MATERIALIZED ' : ''}VIEW ${ifNotExist ? 'IF NOT EXISTS ' : ''}${name}`; - script.push(createStatement); + const createStatement = [ + 'CREATE', + orReplace && !ifNotExists ? 'OR REPLACE' : '', + isMaterialized ? 'MATERIALIZED' : '', + 'VIEW', + ifNotExist ? 'IF NOT EXISTS' : '', + name, + comment ? `COMMENT '${encodeStringLiteral(comment)}'` : '', + ] + .filter(Boolean) + .join(' '); + + statements.push(createStatement); if (schema.selectStatement) { let statement = schema.selectStatement; @@ -96,12 +107,7 @@ module.exports = { statement = 'AS ' + statement; } - return ( - createStatement + - (comment ? " COMMENT '" + encodeStringLiteral(comment) + "' " : ' ') + - statement + - ';\n\n' - ); + return `${createStatement} ${statement};\n\n`; } if (_.isEmpty(columns)) { @@ -115,14 +121,9 @@ module.exports = { return; } - if (comment) { - script.push(`COMMENT '${encodeStringLiteral(comment)}'`); - } - - const joinedColumns = joinLastDeactivatedItem(columnsNames).join(',\n'); - script.push(`AS SELECT ${joinedColumns}`); - script.push(fromStatement); + const joinedColumns = indentString(joinLastDeactivatedItem(columnsNames).join(',\n')); + statements.push('AS', 'SELECT', joinedColumns, fromStatement); - return commentDeactivatedStatements(script.join('\n ') + ';', view.isActivated); + return commentDeactivatedStatements(statements.join('\n') + ';', view.isActivated); }, }; From 67064a2b0c7af47b5f02a2f1da06d7183107a638 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 15:48:12 +0100 Subject: [PATCH 3/6] HCK-14070: References require DB name if it exists --- .../alterForeignKeyHelper.js | 14 +++++++++----- .../helpers/foreignKeyHelper.js | 19 ++++++++----------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/forward_engineering/helpers/alterScriptHelpers/alterForeignKeyHelper.js b/forward_engineering/helpers/alterScriptHelpers/alterForeignKeyHelper.js index 8c55bf4..2af4027 100644 --- a/forward_engineering/helpers/alterScriptHelpers/alterForeignKeyHelper.js +++ b/forward_engineering/helpers/alterScriptHelpers/alterForeignKeyHelper.js @@ -3,9 +3,15 @@ const { prepareName, commentDeactivatedStatements } = require('../generalHelper' const templates = require('./config/templates'); const { getItems } = require('./common'); +const { CONSTRAINT_POSTFIX } = require('../constants'); -const getRelationshipName = relationship => { - return relationship.role.code || relationship.role.name; +const getRelationshipName = (relationship, parentTableName, childTableName) => { + const compMod = relationship.role.compMod; + const name = compMod.code?.new || compMod.name?.new || relationship.role.code || relationship.role.name; + if (name) { + return name; + } + return prepareName([parentTableName, childTableName, CONSTRAINT_POSTFIX.foreignKey].filter(Boolean).join('_')); }; const getFullParentTableName = relationship => { @@ -30,8 +36,7 @@ const getAddSingleForeignKeyScript = provider => relationship => { const parentTableName = getFullParentTableName(relationship); const childTableName = getFullChildTableName(relationship); - const relationshipName = compMod.code?.new || compMod.name?.new || getRelationshipName(relationship) || ''; - const constraintName = prepareName(relationshipName); + const constraintName = getRelationshipName(relationship, parentTableName, childTableName); const childColumns = compMod.child.collection.fkFields.map(field => prepareName(field.name)); const parentColumns = compMod.parent.collection.fkFields.map(field => prepareName(field.name)); const disableNoValidate = relationship.role?.compMod?.customProperties?.new?.disableNoValidate; @@ -53,7 +58,6 @@ const canRelationshipBeAdded = relationship => { return false; } return [ - compMod.code?.new || compMod.name?.new || getRelationshipName(relationship), compMod.parent?.bucket, compMod.parent?.collection, compMod.parent?.collection?.fkFields?.length, diff --git a/forward_engineering/helpers/foreignKeyHelper.js b/forward_engineering/helpers/foreignKeyHelper.js index ccca33b..babbe31 100644 --- a/forward_engineering/helpers/foreignKeyHelper.js +++ b/forward_engineering/helpers/foreignKeyHelper.js @@ -57,29 +57,26 @@ const getForeignKeyHashTable = ({ } const constraintName = relationship.code || relationship.name; - const parentDifferentSchemaName = prepareName(relatedSchemas[relationship.parentCollection]?.bucketName) || ''; + const parentSchema = + jsonSchemas[relationship.parentCollection] ?? relatedSchemas[relationship.parentCollection]; + const childSchema = jsonSchemas[relationship.childCollection] ?? relatedSchemas[relationship.childCollection]; + const parentDifferentSchemaName = prepareName(parentSchema?.bucketName) || ''; const parentTableData = getTab(0, entityData[relationship.parentCollection]); - const parentTableSingleName = - prepareName(getName(parentTableData) || relatedSchemas[relationship.parentCollection]?.collectionName) || - ''; + const parentTableSingleName = prepareName(getName(parentTableData) || parentSchema?.collectionName) || ''; const parentTableName = parentDifferentSchemaName ? `${parentDifferentSchemaName}.${parentTableSingleName}` : parentTableSingleName; const childTableData = getTab(0, entityData[relationship.childCollection]); - const childTableName = - prepareName(getName(childTableData) || relatedSchemas[relationship.childCollection]?.collectionName) || ''; + const childTableName = prepareName(getName(childTableData) || childSchema?.collectionName) || ''; const groupKey = parentTableName + constraintName; const childFieldActivated = relationship.childField.reduce((isActivated, field) => { - const fieldData = schemaHelper.getItemByPath( - field.slice(1), - jsonSchemas[relationship.childCollection] ?? relatedSchemas[relationship.childCollection], - ); + const fieldData = schemaHelper.getItemByPath(field.slice(1), childSchema); return isActivated && _.get(fieldData, 'isActivated'); }, true); const parentFieldActivated = relationship.parentField.reduce((isActivated, field) => { const fieldData = schemaHelper.getItemByPath( field.slice(1), - jsonSchemas[relationship.parentCollection] ?? relatedSchemas[relationship.parentCollection], + jsonSchemas[relationship.parentCollection] ?? parentSchema, ); return isActivated && _.get(fieldData, 'isActivated'); }, true); From ad538dcc7241bb97e61c487b5acdefcd800ef6c1 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 15:52:42 +0100 Subject: [PATCH 4/6] fix --- forward_engineering/helpers/foreignKeyHelper.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/forward_engineering/helpers/foreignKeyHelper.js b/forward_engineering/helpers/foreignKeyHelper.js index babbe31..4d4b28f 100644 --- a/forward_engineering/helpers/foreignKeyHelper.js +++ b/forward_engineering/helpers/foreignKeyHelper.js @@ -74,10 +74,7 @@ const getForeignKeyHashTable = ({ return isActivated && _.get(fieldData, 'isActivated'); }, true); const parentFieldActivated = relationship.parentField.reduce((isActivated, field) => { - const fieldData = schemaHelper.getItemByPath( - field.slice(1), - jsonSchemas[relationship.parentCollection] ?? parentSchema, - ); + const fieldData = schemaHelper.getItemByPath(field.slice(1), parentSchema); return isActivated && _.get(fieldData, 'isActivated'); }, true); From 885b6ad6f615f6beac73aa6219275f8fe5230107 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 16:06:17 +0100 Subject: [PATCH 5/6] keep minify --- forward_engineering/config.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/forward_engineering/config.json b/forward_engineering/config.json index 89628d8..1a981c3 100644 --- a/forward_engineering/config.json +++ b/forward_engineering/config.json @@ -11,6 +11,11 @@ "view": true }, "additionalOptions": [ + { + "id": "minify", + "value": false, + "name": "Minify" + }, { "id": "applyDropStatements", "value": false, From c24bcc948aa098f212993731f924a6edcaadabe7 Mon Sep 17 00:00:00 2001 From: Alik Rakhmonov Date: Fri, 19 Dec 2025 17:55:20 +0100 Subject: [PATCH 6/6] fix formatting, format/minify struct --- forward_engineering/generateContainerScript.js | 3 +++ forward_engineering/generateScript.js | 3 +++ forward_engineering/generateViewScript.js | 3 +++ forward_engineering/helpers/columnHelper.js | 17 +++++++++++++---- forward_engineering/helpers/generalHelper.js | 14 ++++++++++++++ forward_engineering/helpers/viewHelper.js | 12 ++++++++---- 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/forward_engineering/generateContainerScript.js b/forward_engineering/generateContainerScript.js index f11f3cf..8882254 100644 --- a/forward_engineering/generateContainerScript.js +++ b/forward_engineering/generateContainerScript.js @@ -9,6 +9,7 @@ const { buildScript } = require('./helpers/buildScript'); const { parseEntities } = require('./helpers/parseEntities'); const { getWorkloadManagementStatements } = require('./helpers/getWorkloadManagementStatements'); const { getIsPkOrFkConstraintAvailable, getIsConstraintAvailable } = require('./helpers/constraintHelper'); +const { setMinify } = require('./helpers/generalHelper'); const sortEntitiesByForeignKeyDependencies = ({ entities, relationships }) => { const entitySet = new Set(entities); @@ -63,6 +64,8 @@ const generateContainerScript = (data, logger, callback, app) => { const relatedSchemas = parseEntities(data.relatedEntities ?? [], data.relatedSchemas); const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); + const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; + setMinify(needMinify); if (data.isUpdateScript) { const deltaModelSchema = _.first(Object.values(jsonSchema)) || {}; diff --git a/forward_engineering/generateScript.js b/forward_engineering/generateScript.js index 1fe1037..76dcdbc 100644 --- a/forward_engineering/generateScript.js +++ b/forward_engineering/generateScript.js @@ -5,6 +5,7 @@ const { getTableStatement } = require('./helpers/tableHelper'); const { getIndexes } = require('./helpers/indexHelper'); const { buildScript } = require('./helpers/buildScript'); const { getIsPkOrFkConstraintAvailable, getIsConstraintAvailable } = require('./helpers/constraintHelper'); +const { setMinify } = require('./helpers/generalHelper'); const generateScript = (data, logger, callback, app) => { try { @@ -16,6 +17,8 @@ const generateScript = (data, logger, callback, app) => { const entityData = data.entityData; const areColumnConstraintsAvailable = getIsConstraintAvailable(data); const isPkOrFkConstraintAvailable = getIsPkOrFkConstraintAvailable(data); + const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; + setMinify(needMinify); if (data.isUpdateScript) { const definitions = [modelDefinitions, internalDefinitions, externalDefinitions]; diff --git a/forward_engineering/generateViewScript.js b/forward_engineering/generateViewScript.js index 27118f0..bbdffa2 100644 --- a/forward_engineering/generateViewScript.js +++ b/forward_engineering/generateViewScript.js @@ -2,10 +2,13 @@ const _ = require('lodash'); const { getDatabaseStatement } = require('./helpers/databaseHelper'); const { getViewScript } = require('./helpers/viewHelper'); const { buildScript } = require('./helpers/buildScript'); +const { setMinify } = require('./helpers/generalHelper'); const generateViewScript = (data, logger, callback, app) => { try { const viewSchema = JSON.parse(data.jsonSchema || '{}'); + const needMinify = _.get(data, 'options.additionalOptions', []).find(option => option.id === 'minify')?.value; + setMinify(needMinify); const databaseStatement = getDatabaseStatement(data.containerData); diff --git a/forward_engineering/helpers/columnHelper.js b/forward_engineering/helpers/columnHelper.js index 4fd3ec7..799b8c1 100644 --- a/forward_engineering/helpers/columnHelper.js +++ b/forward_engineering/helpers/columnHelper.js @@ -4,6 +4,8 @@ const { prepareName, commentDeactivatedStatements, encodeStringLiteral, + indentString, + shouldMinify, } = require('./generalHelper'); const { getConstraintOpts } = require('./constraintHelper'); const { getDefaultConstraintName } = require('./alterScriptHelpers/generalHelper'); @@ -53,15 +55,22 @@ const getStructChildProperties = (getTypeByProperty, definitions) => property => }; const getStruct = (getTypeByProperty, definitions) => property => { - const getStructStatement = propertiesString => `struct<${propertiesString}>`; + const minify = shouldMinify(); + + const getStructStatement = propertiesString => + minify ? `struct<${propertiesString}>` : `struct<\n${propertiesString}\n>`; const { activatedProps, deactivatedProps } = getStructChildProperties(getTypeByProperty, definitions)(property); + + const activePropsString = minify ? activatedProps.join(', ') : indentString(activatedProps.join(',\n')); + const deactivatedPropsString = minify ? deactivatedProps.join(', ') : indentString(deactivatedProps.join(',\n')); + if (deactivatedProps.length === 0) { - return getStructStatement(activatedProps.join(', ')); + return getStructStatement(activePropsString); } else if (activatedProps.length === 0) { - return getStructStatement(`/* ${activatedProps.join(', ')} */`); + return getStructStatement(`/* ${activePropsString} */`); } - return getStructStatement(`${activatedProps.join(', ')} /*, ${deactivatedProps.join(', ')}*/`); + return getStructStatement(`${activePropsString} /*, ${deactivatedPropsString}*/`); }; const getChildBySubtype = (parentType, subtype) => { diff --git a/forward_engineering/helpers/generalHelper.js b/forward_engineering/helpers/generalHelper.js index ba30002..4934cec 100644 --- a/forward_engineering/helpers/generalHelper.js +++ b/forward_engineering/helpers/generalHelper.js @@ -149,6 +149,18 @@ const stripParentheses = str => { return result.trim(); }; +const minifyState = { + enabled: false, +}; + +const setMinify = enabled => { + minifyState.enabled = enabled; +}; + +const shouldMinify = () => { + return minifyState.enabled; +}; + module.exports = { buildStatement, getName, @@ -162,4 +174,6 @@ module.exports = { encodeStringLiteral, isDeactivatedStatement, stripParentheses, + setMinify, + shouldMinify, }; diff --git a/forward_engineering/helpers/viewHelper.js b/forward_engineering/helpers/viewHelper.js index 47b7ecb..8379339 100644 --- a/forward_engineering/helpers/viewHelper.js +++ b/forward_engineering/helpers/viewHelper.js @@ -95,6 +95,7 @@ module.exports = { ifNotExist ? 'IF NOT EXISTS' : '', name, comment ? `COMMENT '${encodeStringLiteral(comment)}'` : '', + 'AS', ] .filter(Boolean) .join(' '); @@ -103,11 +104,14 @@ module.exports = { if (schema.selectStatement) { let statement = schema.selectStatement; - if (!_.trim(statement).toLowerCase().startsWith('as')) { - statement = 'AS ' + statement; + if (_.trim(statement).toLowerCase().startsWith('as')) { + statement = statement + .trim() + .replace(/\bAS\b/i, '') + .trim(); } - return `${createStatement} ${statement};\n\n`; + return `${createStatement}\n${statement};`; } if (_.isEmpty(columns)) { @@ -122,7 +126,7 @@ module.exports = { } const joinedColumns = indentString(joinLastDeactivatedItem(columnsNames).join(',\n')); - statements.push('AS', 'SELECT', joinedColumns, fromStatement); + statements.push('SELECT', joinedColumns, fromStatement); return commentDeactivatedStatements(statements.join('\n') + ';', view.isActivated); },