From 3b9ed274fb16c6b6e4ee1cabc2ffd0d7efcc7108 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Tue, 7 Oct 2025 15:27:53 +0300 Subject: [PATCH 1/6] add script generation options config --- forward_engineering/config.json | 413 ++++++++++++++++++++++++++++++++ 1 file changed, 413 insertions(+) diff --git a/forward_engineering/config.json b/forward_engineering/config.json index f945d4d7..fbcffd0a 100644 --- a/forward_engineering/config.json +++ b/forward_engineering/config.json @@ -37,5 +37,418 @@ "name": "Apply Drop Statements", "isDropInStatements": true } + ], + "scriptGenerationOptions": [ + { + "keyword": "primaryKeys", + "label": "FE_SCRIPT_GENERATION_OPTIONS___PRIMARY_KEYS", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "primaryKey", + "valueType": "array" + }, + "defaultValue": { + "primaryKey": [] + } + }, + { + "dependency": { + "key": "primaryKey", + "valueType": "object" + }, + + "defaultValue": { + "primaryKey": {} + } + }, + { + "dependency": { + "type": "or", + "values": [ + { + "key": "primaryKey", + "value": true + }, + { + "key": "compositePrimaryKey", + "value": true + } + ] + }, + "defaultValue": { + "primaryKey": false, + "compositePrimaryKey": false + } + } + ] + }, + { + "keyword": "foreignKeys", + "label": "FE_SCRIPT_GENERATION_OPTIONS___FOREIGN_KEYS", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + } + }, + { + "keyword": "uniqueConstraints", + "label": "FE_SCRIPT_GENERATION_OPTIONS___UNIQUE_KEYS", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "uniqueKey", + "valueType": "array" + }, + "defaultValue": { + "uniqueKey": [] + } + }, + { + "dependency": { + "key": "uniqueKey", + "valueType": "object" + }, + "defaultValue": { + "uniqueKey": {} + } + }, + { + "dependency": { + "type": "or", + "values": [ + { + "key": "unique", + "value": true + }, + { + "key": "compositeUniqueKey", + "value": true + }, + { + "key": "compMode", + "exist": true + } + ] + }, + "defaultValue": { + "unique": false, + "compositeUniqueKey": false + } + } + ] + }, + { + "keyword": "columnNotNullConstraints", + "label": "FE_SCRIPT_GENERATION_OPTIONS___COLUMN_NOT_NULL", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "required", + "value": true + }, + "defaultValue": { + "required": false + } + } + ] + }, + { + "keyword": "checkConstraints", + "label": "FE_SCRIPT_GENERATION_OPTIONS___CHECK_CONSTRAINTS", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "chkConstr", + "valueType": "array" + }, + "defaultValue": { + "chkConstr": [] + } + } + ] + }, + { + "keyword": "columnDefaultValues", + "label": "FE_SCRIPT_GENERATION_OPTIONS___COLUMN_DEFAULT_VALUES", + "disabled": false, + "value": { + "inline": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "separate": { + "default": false, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "default", + "exist": true + }, + "defaultValue": { + "default": "" + } + } + ] + }, + { + "keyword": "schemaComments", + "label": "FE_SCRIPT_GENERATION_OPTIONS___SCHEMA_COMMENTS", + "disabled": false, + "value": { + "inline": { + "default": false, + "disabled": true, + "disabledLabel": "" + }, + "separate": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "type", + "value": "bucket" + }, + "defaultValue": { + "description": "" + } + } + ] + }, + { + "keyword": "tableComments", + "label": "FE_SCRIPT_GENERATION_OPTIONS___TABLE_COMMENTS", + "disabled": false, + "value": { + "inline": { + "default": false, + "disabled": true, + "disabledLabel": "" + }, + "separate": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "type": "and", + "values": [ + { + "key": "collectionName", + "exist": true + }, + { + "key": "description", + "exist": true + } + ] + }, + "defaultValue": { + "description": "" + } + } + ] + }, + { + "keyword": "viewComments", + "label": "FE_SCRIPT_GENERATION_OPTIONS___VIEW_COMMENTS", + "disabled": false, + "value": { + "inline": { + "default": false, + "disabled": true, + "disabledLabel": "" + }, + "separate": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "key": "viewOn", + "exist": true + }, + "defaultValue": { + "description": "" + } + } + ] + }, + { + "keyword": "columnComments", + "label": "FE_SCRIPT_GENERATION_OPTIONS___COLUMN_COMMENTS", + "disabled": false, + "value": { + "inline": { + "default": false, + "disabled": true, + "disabledLabel": "" + }, + "separate": { + "default": true, + "disabled": false, + "disabledLabel": "" + }, + "ignore": { + "default": false, + "disabled": false, + "disabledLabel": "" + } + }, + "adapters": [ + { + "dependency": { + "type": "and", + "values": [ + { + "type": "not", + "values": [ + { + "key": "type", + "value": "bucket" + } + ] + }, + { + "key": "collectionName", + "exist": false + }, + { + "key": "viewOn", + "exist": false + }, + { + "key": "description", + "exist": true + } + ] + }, + "defaultValue": { + "description": "" + } + } + ] + } ] } From f9304af81cdac90d5b52a14d23f4582da371af58 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Tue, 7 Oct 2025 15:29:09 +0300 Subject: [PATCH 2/6] fix order of constrains in alter statement and fix escape default value logic in alter statement --- .../alterScript/alterScriptFromDeltaHelper.js | 2 +- .../alterScript/alterScriptHelpers/alterEntityHelper.js | 2 +- .../alterScriptHelpers/columnHelpers/defaultValueHelper.js | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/forward_engineering/alterScript/alterScriptFromDeltaHelper.js b/forward_engineering/alterScript/alterScriptFromDeltaHelper.js index 96621219..031242a2 100644 --- a/forward_engineering/alterScript/alterScriptFromDeltaHelper.js +++ b/forward_engineering/alterScript/alterScriptFromDeltaHelper.js @@ -133,9 +133,9 @@ const getAlterCollectionsScriptDtos = ({ ...deleteCollectionScriptDtos, ...modifyCollectionScriptDtos, ...addColumnScriptDtos, - ...modifyCollectionKeysScriptDtos, ...deleteColumnScriptDtos, ...modifyColumnScriptDtos, + ...modifyCollectionKeysScriptDtos, ].filter(Boolean); }; diff --git a/forward_engineering/alterScript/alterScriptHelpers/alterEntityHelper.js b/forward_engineering/alterScript/alterScriptHelpers/alterEntityHelper.js index 6bab4fea..adcaa9b1 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/alterEntityHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/alterEntityHelper.js @@ -290,8 +290,8 @@ const getModifyColumnScriptDtos = ...renameColumnScriptDtos, ...updateTypeScriptDtos, ...modifyNotNullScriptDtos, - ...modifyCommentScriptDtos, ...modifyDefaultColumnValueScriptDtos, + ...modifyCommentScriptDtos, ].filter(Boolean); }; diff --git a/forward_engineering/alterScript/alterScriptHelpers/columnHelpers/defaultValueHelper.js b/forward_engineering/alterScript/alterScriptHelpers/columnHelpers/defaultValueHelper.js index f90cd732..51c73c27 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/columnHelpers/defaultValueHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/columnHelpers/defaultValueHelper.js @@ -1,6 +1,7 @@ const { toPairs } = require('lodash'); const { AlterScriptDto } = require('../../types/AlterScriptDto'); -const { getFullTableName, wrapInQuotes, wrapInSingleQuotes } = require('../../../utils/general'); +const { getFullTableName, wrapInQuotes } = require('../../../utils/general'); +const { decorateDefault } = require('../../../ddlProvider/ddlHelpers/columnDefinitionHelper'); const assignTemplates = require('../../../utils/assignTemplates'); const templates = require('../../../ddlProvider/templates'); @@ -35,10 +36,12 @@ const getUpdatedDefaultColumnValueScriptDtos = ({ collection }) => }) .map(([columnName, jsonSchema]) => { const newDefaultValue = jsonSchema.default; + const type = jsonSchema.mode || jsonSchema.childType || jsonSchema.type; + const isArrayType = Array.isArray(jsonSchema.array_type) && jsonSchema.array_type.length > 0; const scriptGenerationConfig = { tableName: getFullTableName(collection), columnName: wrapInQuotes(columnName), - defaultValue: wrapInSingleQuotes({ name: newDefaultValue }), + defaultValue: decorateDefault(type, newDefaultValue, isArrayType), }; return updateColumnDefaultValue(scriptGenerationConfig); }) From 4fbb3c6dfdecfb63058d8d048c0ee71796c959e4 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Tue, 7 Oct 2025 15:29:37 +0300 Subject: [PATCH 3/6] add browser support --- api/fe.js | 11 +++ esbuild.package.js | 1 + forward_engineering/api.js | 91 +++---------------- forward_engineering/api/applyToInstance.js | 20 ++++ .../api/generateContainerScript.js | 16 ++++ forward_engineering/api/generateScript.js | 16 ++++ forward_engineering/api/generateViewScript.js | 7 ++ forward_engineering/api/getDatabases.js | 11 +++ forward_engineering/api/isDropInStatements.js | 22 +++++ forward_engineering/api/testConnection.js | 9 ++ 10 files changed, 127 insertions(+), 77 deletions(-) create mode 100644 api/fe.js create mode 100644 forward_engineering/api/applyToInstance.js create mode 100644 forward_engineering/api/generateContainerScript.js create mode 100644 forward_engineering/api/generateScript.js create mode 100644 forward_engineering/api/generateViewScript.js create mode 100644 forward_engineering/api/getDatabases.js create mode 100644 forward_engineering/api/isDropInStatements.js create mode 100644 forward_engineering/api/testConnection.js diff --git a/api/fe.js b/api/fe.js new file mode 100644 index 00000000..c61aabcf --- /dev/null +++ b/api/fe.js @@ -0,0 +1,11 @@ +const { generateScript } = require('../forward_engineering/api/generateScript'); +const { generateViewScript } = require('../forward_engineering/api/generateViewScript'); +const { generateContainerScript } = require('../forward_engineering/api/generateContainerScript'); +const { isDropInStatements } = require('../forward_engineering/api/isDropInStatements'); + +module.exports = { + generateScript, + generateViewScript, + generateContainerScript, + isDropInStatements, +}; diff --git a/esbuild.package.js b/esbuild.package.js index 953f56f8..4c470516 100644 --- a/esbuild.package.js +++ b/esbuild.package.js @@ -13,6 +13,7 @@ esbuild .build({ entryPoints: [ path.resolve(__dirname, 'forward_engineering', 'api.js'), + path.resolve(__dirname, 'api', 'fe.js'), path.resolve(__dirname, 'forward_engineering', 'ddlProvider.js'), path.resolve(__dirname, 'forward_engineering', 'dbtProvider.js'), path.resolve(__dirname, 'reverse_engineering', 'api.js'), diff --git a/forward_engineering/api.js b/forward_engineering/api.js index 8261c790..dd704df2 100644 --- a/forward_engineering/api.js +++ b/forward_engineering/api.js @@ -1,80 +1,17 @@ -const _ = require('lodash'); -const reApi = require('../reverse_engineering/api'); -const { createLogger } = require('../reverse_engineering/helpers/loggerHelper'); -const applyToInstanceHelper = require('./applyToInstanceHelper'); -const { - buildEntityLevelAlterScript, - buildContainerLevelAlterScript, - doesContainerLevelAlterScriptContainDropStatements, - doesEntityLevelAlterScriptContainDropStatements, -} = require('./alterScript/alterScriptBuilder'); +const { generateScript } = require('./api/generateScript'); +const { generateViewScript } = require('./api/generateViewScript'); +const { generateContainerScript } = require('./api/generateContainerScript'); +const { getDatabases } = require('./api/getDatabases'); +const { applyToInstance } = require('./api/applyToInstance'); +const { testConnection } = require('./api/testConnection'); +const { isDropInStatements } = require('./api/isDropInStatements'); module.exports = { - generateScript(data, logger, callback, app) { - try { - const script = buildEntityLevelAlterScript(data, app); - callback(null, script); - } catch (error) { - logger.log('error', { message: error.message, stack: error.stack }, 'PostgreSQL Forward-Engineering Error'); - - callback({ message: error.message, stack: error.stack }); - } - }, - - generateViewScript(data, logger, callback, app) { - callback(new Error('Forward-Engineering of delta model on view level is not supported')); - }, - - generateContainerScript(data, logger, callback, app) { - try { - const script = buildContainerLevelAlterScript(data, app); - callback(null, script); - } catch (error) { - logger.log('error', { message: error.message, stack: error.stack }, 'PostgreSQL Forward-Engineering Error'); - - callback({ message: error.message, stack: error.stack }); - } - }, - - getDatabases(connectionInfo, logger, callback, app) { - logger.progress({ message: 'Find all databases' }); - - reApi.getDatabases(connectionInfo, logger, callback, app); - }, - - applyToInstance(connectionInfo, logger, callback, app) { - logger.clear(); - logger.log( - 'info', - _.omit(connectionInfo, 'script', 'containerData'), - 'connectionInfo', - connectionInfo.hiddenKeys, - ); - - const postgresLogger = createLogger({ - title: 'Apply to instance', - hiddenKeys: connectionInfo.hiddenKeys, - logger, - }); - - applyToInstanceHelper.applyToInstance(connectionInfo, postgresLogger, app).then(callback, callback); - }, - - testConnection(connectionInfo, logger, callback, app) { - reApi.testConnection(connectionInfo, logger, callback, app).then(callback, callback); - }, - - isDropInStatements(data, logger, callback, app) { - try { - if (data.level === 'container') { - const containsDropStatements = doesContainerLevelAlterScriptContainDropStatements(data, app); - callback(null, containsDropStatements); - } else { - const containsDropStatements = doesEntityLevelAlterScriptContainDropStatements(data, app); - callback(null, containsDropStatements); - } - } catch (e) { - callback({ message: e.message, stack: e.stack }); - } - }, + generateScript, + generateViewScript, + generateContainerScript, + getDatabases, + applyToInstance, + testConnection, + isDropInStatements, }; diff --git a/forward_engineering/api/applyToInstance.js b/forward_engineering/api/applyToInstance.js new file mode 100644 index 00000000..97f935f4 --- /dev/null +++ b/forward_engineering/api/applyToInstance.js @@ -0,0 +1,20 @@ +const _ = require('lodash'); +const { createLogger } = require('../../reverse_engineering/helpers/loggerHelper'); +const applyToInstanceHelper = require('../applyToInstanceHelper'); + +function applyToInstance(connectionInfo, logger, callback, app) { + logger.clear(); + logger.log('info', _.omit(connectionInfo, 'script', 'containerData'), 'connectionInfo', connectionInfo.hiddenKeys); + + const postgresLogger = createLogger({ + title: 'Apply to instance', + hiddenKeys: connectionInfo.hiddenKeys, + logger, + }); + + applyToInstanceHelper.applyToInstance(connectionInfo, postgresLogger, app).then(callback, callback); +} + +module.exports = { + applyToInstance, +}; diff --git a/forward_engineering/api/generateContainerScript.js b/forward_engineering/api/generateContainerScript.js new file mode 100644 index 00000000..ffde45ed --- /dev/null +++ b/forward_engineering/api/generateContainerScript.js @@ -0,0 +1,16 @@ +const { buildContainerLevelAlterScript } = require('../alterScript/alterScriptBuilder'); + +function generateContainerScript(data, logger, callback, app) { + try { + const script = buildContainerLevelAlterScript(data, app); + callback(null, script); + } catch (error) { + logger.log('error', { message: error.message, stack: error.stack }, 'PostgreSQL Forward-Engineering Error'); + + callback({ message: error.message, stack: error.stack }); + } +} + +module.exports = { + generateContainerScript, +}; diff --git a/forward_engineering/api/generateScript.js b/forward_engineering/api/generateScript.js new file mode 100644 index 00000000..5aa4e88d --- /dev/null +++ b/forward_engineering/api/generateScript.js @@ -0,0 +1,16 @@ +const { buildEntityLevelAlterScript } = require('../alterScript/alterScriptBuilder'); + +function generateScript(data, logger, callback, app) { + try { + const script = buildEntityLevelAlterScript(data, app); + callback(null, script); + } catch (error) { + logger.log('error', { message: error.message, stack: error.stack }, 'PostgreSQL Forward-Engineering Error'); + + callback({ message: error.message, stack: error.stack }); + } +} + +module.exports = { + generateScript, +}; diff --git a/forward_engineering/api/generateViewScript.js b/forward_engineering/api/generateViewScript.js new file mode 100644 index 00000000..ddb2b388 --- /dev/null +++ b/forward_engineering/api/generateViewScript.js @@ -0,0 +1,7 @@ +function generateViewScript(data, logger, callback, app) { + callback(new Error('Forward-Engineering of delta model on view level is not supported')); +} + +module.exports = { + generateViewScript, +}; diff --git a/forward_engineering/api/getDatabases.js b/forward_engineering/api/getDatabases.js new file mode 100644 index 00000000..169b3be5 --- /dev/null +++ b/forward_engineering/api/getDatabases.js @@ -0,0 +1,11 @@ +const reApi = require('../../reverse_engineering/api'); + +function getDatabases(connectionInfo, logger, callback, app) { + logger.progress({ message: 'Find all databases' }); + + reApi.getDatabases(connectionInfo, logger, callback, app); +} + +module.exports = { + getDatabases, +}; diff --git a/forward_engineering/api/isDropInStatements.js b/forward_engineering/api/isDropInStatements.js new file mode 100644 index 00000000..1d7fd537 --- /dev/null +++ b/forward_engineering/api/isDropInStatements.js @@ -0,0 +1,22 @@ +const { + doesContainerLevelAlterScriptContainDropStatements, + doesEntityLevelAlterScriptContainDropStatements, +} = require('../alterScript/alterScriptBuilder'); + +function isDropInStatements(data, logger, callback, app) { + try { + if (data.level === 'container') { + const containsDropStatements = doesContainerLevelAlterScriptContainDropStatements(data, app); + callback(null, containsDropStatements); + } else { + const containsDropStatements = doesEntityLevelAlterScriptContainDropStatements(data, app); + callback(null, containsDropStatements); + } + } catch (e) { + callback({ message: e.message, stack: e.stack }); + } +} + +module.exports = { + isDropInStatements, +}; diff --git a/forward_engineering/api/testConnection.js b/forward_engineering/api/testConnection.js new file mode 100644 index 00000000..f45e90c1 --- /dev/null +++ b/forward_engineering/api/testConnection.js @@ -0,0 +1,9 @@ +const reApi = require('../../reverse_engineering/api'); + +function testConnection(connectionInfo, logger, callback, app) { + reApi.testConnection(connectionInfo, logger, callback, app).then(callback, callback); +} + +module.exports = { + testConnection, +}; From cf8c8790b491da7a15d9cf9cfca71e4a7edd2af4 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Tue, 7 Oct 2025 15:45:57 +0300 Subject: [PATCH 4/6] delete unnecessary .then statement --- forward_engineering/api/testConnection.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forward_engineering/api/testConnection.js b/forward_engineering/api/testConnection.js index f45e90c1..e5d00b78 100644 --- a/forward_engineering/api/testConnection.js +++ b/forward_engineering/api/testConnection.js @@ -1,7 +1,7 @@ const reApi = require('../../reverse_engineering/api'); -function testConnection(connectionInfo, logger, callback, app) { - reApi.testConnection(connectionInfo, logger, callback, app).then(callback, callback); +async function testConnection(connectionInfo, logger, callback, app) { + await reApi.testConnection(connectionInfo, logger, callback, app); } module.exports = { From 4ef91de566beb29f8b5b737d268e6ddb780bf737 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Tue, 7 Oct 2025 16:33:38 +0300 Subject: [PATCH 5/6] adjust column types whose default values need to be wrapped with escape characters --- .../ddlProvider/ddlHelpers/columnDefinitionHelper.js | 12 ++++++++---- .../ddlProvider/ddlHelpers/typeHelper.js | 6 ++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/forward_engineering/ddlProvider/ddlHelpers/columnDefinitionHelper.js b/forward_engineering/ddlProvider/ddlHelpers/columnDefinitionHelper.js index adb130e3..7fcd279c 100644 --- a/forward_engineering/ddlProvider/ddlHelpers/columnDefinitionHelper.js +++ b/forward_engineering/ddlProvider/ddlHelpers/columnDefinitionHelper.js @@ -2,7 +2,7 @@ const _ = require('lodash'); const { commentIfDeactivated, wrapInQuotes, wrapComment } = require('../../utils/general'); const assignTemplates = require('../../utils/assignTemplates'); const templates = require('../templates'); -const { isVector, isString, isDateTime } = require('./typeHelper'); +const { isVector, isString, isDateTime, isUUID, isInet } = require('./typeHelper'); const addLength = (type, length) => { return `${type}(${length})`; @@ -82,11 +82,15 @@ const decorateType = (type, columnDefinition) => { const decorateDefault = (type, defaultValue, isArrayType) => { const constantsValues = ['current_timestamp', 'current_user', 'null']; - if ((isString(type) || isDateTime(type)) && !constantsValues.includes(_.toLower(defaultValue)) && !isArrayType) { - return wrapComment(defaultValue); - } else { + + const isConstantValue = constantsValues.includes(_.toLower(defaultValue)); + const isQuotableType = isString(type) || isDateTime(type) || isUUID(type) || isInet(type); + + if (!isQuotableType || isConstantValue || isArrayType) { return defaultValue; } + + return wrapComment(defaultValue); }; const getColumnComments = (tableName, columnDefinitions) => { diff --git a/forward_engineering/ddlProvider/ddlHelpers/typeHelper.js b/forward_engineering/ddlProvider/ddlHelpers/typeHelper.js index f487bb88..61c125f3 100644 --- a/forward_engineering/ddlProvider/ddlHelpers/typeHelper.js +++ b/forward_engineering/ddlProvider/ddlHelpers/typeHelper.js @@ -4,8 +4,14 @@ const isDateTime = type => ['date', 'time', 'timestamp', 'interval'].includes(ty const isVector = type => ['vector', 'halfvec', 'sparsevec'].includes(type); +const isInet = type => ['inet', 'cidr', 'macaddr', 'macaddr8'].includes(type); + +const isUUID = type => type === 'uuid'; + module.exports = { isString, isDateTime, isVector, + isInet, + isUUID, }; From 0e9d055e4e59a8b5373a3bb23915d49e673e9510 Mon Sep 17 00:00:00 2001 From: Vitalii Bedletskyi Date: Wed, 8 Oct 2025 22:29:00 +0300 Subject: [PATCH 6/6] fix missing COMMENT ON statements for UDT --- forward_engineering/config.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/forward_engineering/config.json b/forward_engineering/config.json index fbcffd0a..cf9c73ee 100644 --- a/forward_engineering/config.json +++ b/forward_engineering/config.json @@ -427,6 +427,12 @@ { "key": "type", "value": "bucket" + }, + { + "level": "parent", + "key": "type", + "value": "definitions", + "inDepthParentSearch": true } ] },