diff --git a/forward_engineering/helpers/tableHelper.js b/forward_engineering/helpers/tableHelper.js index 4718a44d..01e40b5a 100644 --- a/forward_engineering/helpers/tableHelper.js +++ b/forward_engineering/helpers/tableHelper.js @@ -12,6 +12,7 @@ const { getDBVersionNumber, generateFullEntityName, executeUnlessStreaming, + cleanQuery, } = require('../utils/general'); const { getColumnsStatement, getColumns } = require('./columnHelper'); const keyHelper = require('./keyHelper'); @@ -800,7 +801,8 @@ const getCreateStreamingStatement = ({ const rowFilterClause = getRowFilterClause(rowFilterGroup, entityJsonProperties); - const queryClause = selectStreamingStatement ? `AS ${selectStreamingStatement}` : ''; + const cleanedStatement = cleanQuery(selectStreamingStatement); + const queryClause = cleanedStatement ? `AS ${cleanedStatement}` : ''; return buildStatement(`${createPrefix}${isNotExistsStatement} ${fullTableName} (`, isActivated)( tableStructure, diff --git a/forward_engineering/utils/general.js b/forward_engineering/utils/general.js index 8aed7178..fd7ef16c 100644 --- a/forward_engineering/utils/general.js +++ b/forward_engineering/utils/general.js @@ -328,6 +328,26 @@ const executeUnlessStreaming = (isStreaming, task, fallback = '') => { return task(); }; +/** + * Prepares the raw SQL query for embedding in the final DDL statement. + * It removes leading/trailing whitespace and strips any trailing semicolons + * to prevent syntax errors. + * + * @param {string} query - The raw SQL query string from the user input. + * @returns {string} The cleaned query string without trailing semicolons. + */ +const cleanQuery = query => { + const cleaned = query?.trim(); + if (!cleaned) return ''; + + let finalQuery = cleaned; + while (finalQuery.endsWith(';')) { + finalQuery = finalQuery.slice(0, -1); + } + + return finalQuery; +}; + module.exports = { buildStatement, getName, @@ -364,4 +384,5 @@ module.exports = { checkLiquidClusteringPropertyChanged, generateFullEntityNameFromBucketAndTableNames, executeUnlessStreaming, + cleanQuery, };