diff --git a/forward_engineering/alterScript/alterScriptFromDeltaHelper.js b/forward_engineering/alterScript/alterScriptFromDeltaHelper.js index 38982e3..22f026b 100644 --- a/forward_engineering/alterScript/alterScriptFromDeltaHelper.js +++ b/forward_engineering/alterScript/alterScriptFromDeltaHelper.js @@ -221,7 +221,7 @@ const getAlterViewScriptDtos = (collection, app) => { .filter(Boolean) .map(item => Object.values(item.properties)[0]) .map(view => ({ ...view, ...(view.role || {}) })) - .filter(view => view.compMod?.created && view.selectStatement) + .filter(view => view.compMod?.created) .map(getAddViewScriptDto(app)); const deleteViewsScriptDtos = [] diff --git a/forward_engineering/alterScript/alterScriptHelpers/alterViewHelper.js b/forward_engineering/alterScript/alterScriptHelpers/alterViewHelper.js index ad1b1f5..cbd3da3 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/alterViewHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/alterViewHelper.js @@ -3,6 +3,45 @@ const { getModifyViewCommentsScriptDtos } = require('./viewHelpers/commentsHelpe const { AlterScriptDto } = require('../types/AlterScriptDto'); const { wrapInQuotes } = require('../../utils/general'); +const getKeys = ({ view, collectionRefsDefinitionsMap, ddlProvider, app }) => { + const { mapProperties } = app.require('@hackolade/ddl-fe-utils'); + + return mapProperties(view, (propertyName, schema) => { + const definition = collectionRefsDefinitionsMap[schema.refId]; + + if (!definition) { + return ddlProvider.hydrateViewColumn({ + name: propertyName, + isActivated: schema.isActivated, + }); + } + + const entityName = + _.get(definition.collection, '[0].code', '') || + _.get(definition.collection, '[0].collectionName', '') || + ''; + const dbName = _.get(definition.bucket, '[0].code') || _.get(definition.bucket, '[0].name', ''); + const name = definition.name; + + if (name === propertyName) { + return ddlProvider.hydrateViewColumn({ + name, + dbName, + entityName, + isActivated: schema.isActivated, + }); + } + + return ddlProvider.hydrateViewColumn({ + name, + dbName, + entityName, + alias: propertyName, + isActivated: schema.isActivated, + }); + }); +}; + /** * @return {(view: Object) => AlterScriptDto | undefined} * */ @@ -11,7 +50,12 @@ const getAddViewScriptDto = app => view => { const viewData = { name: view.code || view.name, - keys: [], + keys: getKeys({ + view, + collectionRefsDefinitionsMap: view.compMod?.collectionData?.collectionRefsDefinitionsMap ?? {}, + ddlProvider, + app, + }), schemaData: { schemaName: '' }, }; const hydratedView = ddlProvider.hydrateView({ viewData, entityData: [view] });