diff --git a/forward_engineering/hiveHelpers/generateContainerScript.js b/forward_engineering/hiveHelpers/generateContainerScript.js index b61b91f..fff6149 100644 --- a/forward_engineering/hiveHelpers/generateContainerScript.js +++ b/forward_engineering/hiveHelpers/generateContainerScript.js @@ -1,5 +1,4 @@ const _ = require('lodash'); -const sqlFormatter = require('sql-formatter'); const foreignKeyHelper = require('./helpers/foreignKeyHelper'); const { getDatabaseStatement } = require('./helpers/databaseHelper'); const { getAlterScript } = require('./helpers/alterScriptFromDeltaHelper'); @@ -69,7 +68,7 @@ const generateContainerScript = (data, logger, callback, app) => { if (data.isUpdateScript) { const deltaModelSchema = _.first(Object.values(jsonSchema)) || {}; const definitions = [modelDefinitions, internalDefinitions, externalDefinitions]; - const scripts = getAlterScript(deltaModelSchema, definitions, data, app, needMinify, sqlFormatter); + const scripts = getAlterScript(deltaModelSchema, definitions, data, app, needMinify); callback(null, scripts); return; } diff --git a/forward_engineering/hiveHelpers/generateScript.js b/forward_engineering/hiveHelpers/generateScript.js index 2779cb1..b14d4c5 100644 --- a/forward_engineering/hiveHelpers/generateScript.js +++ b/forward_engineering/hiveHelpers/generateScript.js @@ -1,5 +1,4 @@ const _ = require('lodash'); -const sqlFormatter = require('sql-formatter'); const { getAlterScript } = require('./helpers/alterScriptFromDeltaHelper'); const { getDatabaseStatement } = require('./helpers/databaseHelper'); const { getTableStatement } = require('./helpers/tableHelper'); @@ -21,7 +20,7 @@ const generateScript = (data, logger, callback, app) => { if (data.isUpdateScript) { const definitions = [modelDefinitions, internalDefinitions, externalDefinitions]; - const scripts = getAlterScript(jsonSchema, definitions, data, app, needMinify, sqlFormatter); + const scripts = getAlterScript(jsonSchema, definitions, data, app, needMinify); callback(null, scripts); return; } diff --git a/forward_engineering/hiveHelpers/helpers/alterScriptFromDeltaHelper.js b/forward_engineering/hiveHelpers/helpers/alterScriptFromDeltaHelper.js index fda44da..b12bd00 100644 --- a/forward_engineering/hiveHelpers/helpers/alterScriptFromDeltaHelper.js +++ b/forward_engineering/hiveHelpers/helpers/alterScriptFromDeltaHelper.js @@ -19,6 +19,7 @@ const { } = require('./alterScriptHelpers/alterViewHelper'); const { getItems } = require('./alterScriptHelpers/common'); const { getContainerName } = require('./alterScriptHelpers/generalHelper'); +const { buildScript } = require('./buildScript'); const { DROP_STATEMENTS } = require('./constants'); const { commentDeactivatedStatements, prepareName } = require('./generalHelper'); @@ -190,7 +191,7 @@ const getInlineRelationships = ({ schema, options }) => { return addedRelationships; }; -const getAlterScript = (schema, definitions, data, app, needMinify, sqlFormatter) => { +const getAlterScript = (schema, definitions, data, app, needMinify) => { const provider = require('./alterScriptHelpers/provider')(app); const inlineDeltaRelationships = getInlineRelationships({ schema, options: data.options }); @@ -235,7 +236,7 @@ const getAlterScript = (schema, definitions, data, app, needMinify, sqlFormatter .filter(Boolean) .map(script => script.trim()); scripts = getCommentedDropScript(scripts, data); - return builds(scripts, needMinify, sqlFormatter); + return buildScript(needMinify)(...scripts); }; const getCommentedDropScript = (scripts, data) => { @@ -250,18 +251,6 @@ const getCommentedDropScript = (scripts, data) => { }); }; -const builds = (scripts, needMinify, sqlFormatter) => { - const prepareScripts = scripts.filter(Boolean).join('\n\n'); - if (needMinify) { - return prepareScripts; - } - const formatScripts = sqlFormatter.format(scripts.filter(Boolean).join('\n\n'), { indent: ' ' }); - return formatScripts - .split(';') - .map(script => script.trim()) - .join(';\n\n'); -}; - module.exports = { getAlterScript, }; diff --git a/forward_engineering/hiveHelpers/helpers/buildScript.js b/forward_engineering/hiveHelpers/helpers/buildScript.js index 1e10c56..0386b4e 100644 --- a/forward_engineering/hiveHelpers/helpers/buildScript.js +++ b/forward_engineering/hiveHelpers/helpers/buildScript.js @@ -1,14 +1,24 @@ 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 = needMinify => (...statements) => { - const script = statements.filter(statement => statement).join('\n\n'); if (needMinify) { - return script; + return statements.filter(Boolean).join('\n\n'); } - return sqlFormatter.format(script, { language: 'spark', indent: ' ', linesBetweenQueries: 2 }) + '\n'; + const script = statements.filter(Boolean).map(tryFormat).join('\n\n'); + + return script + '\n'; }; module.exports = { diff --git a/package-lock.json b/package-lock.json index dfda388..faddb04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@hackolade/fetch": "1.1.0", "antlr4": "4.8.0", "lodash": "4.17.21", - "sql-formatter": "4.0.2" + "sql-formatter": "15.6.12" }, "devDependencies": { "@hackolade/hck-esbuild-plugins-pack": "0.0.1", @@ -2894,6 +2894,12 @@ "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", @@ -4855,6 +4861,12 @@ "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.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4880,6 +4892,34 @@ "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/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5270,6 +5310,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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", @@ -5361,6 +5420,15 @@ "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", @@ -5665,15 +5733,16 @@ "peer": true }, "node_modules/sql-formatter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-4.0.2.tgz", - "integrity": "sha512-R6u9GJRiXZLr/lDo8p56L+OyyN2QFJPCDnsyEOsbdIpsnDKL8gubYFo7lNR7Zx7hfdWT80SfkoVS0CMaF/DE2w==", + "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" + "argparse": "^2.0.1", + "nearley": "^2.20.1" }, "bin": { - "sql-formatter": "bin/sqlfmt.js" + "sql-formatter": "bin/sql-formatter-cli.cjs" } }, "node_modules/string-argv": { diff --git a/package.json b/package.json index 92c349f..418ad8b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@hackolade/fetch": "1.1.0", "antlr4": "4.8.0", "lodash": "4.17.21", - "sql-formatter": "4.0.2" + "sql-formatter": "15.6.12" }, "lint-staged": { "*.{js,json}": "prettier --write"