Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions forward_engineering/alterScript/alterScriptFromDeltaHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ const {
getDeleteColumnFromTypeScriptDtos,
getModifyColumnOfTypeScriptDtos,
} = require('./alterScriptHelpers/alterUdtHelper');
const { getAddViewScriptDto, getDeleteViewScriptDto } = require('./alterScriptHelpers/alterViewHelper');
const {
getAddViewScriptDto,
getDeleteViewScriptDto,
getModifyViewScriptDtos,
} = require('./alterScriptHelpers/alterViewHelper');
const {
getModifyForeignKeyScriptDtos,
getDeleteForeignKeyScriptDtos,
Expand Down Expand Up @@ -156,7 +160,14 @@ const getAlterViewScriptDtos = (collection, app, dbVersion, scriptFormat) => {
.map(view => ({ ...view, ...(view.role || {}) }))
.map(getDeleteViewScriptDto(app, scriptFormat));

return [...deleteViewsScriptDtos, ...createViewsScriptDtos].filter(Boolean);
const modifyViewsScriptDtos = []
.concat(collection.properties?.views?.properties?.modified?.items)
.filter(Boolean)
.map(viewWrapper => Object.values(viewWrapper.properties)[0])
.map(view => ({ ...view, ...(view.role || {}) }))
.flatMap(getModifyViewScriptDtos({ scriptFormat }));

return [...deleteViewsScriptDtos, ...createViewsScriptDtos, ...modifyViewsScriptDtos].filter(Boolean);
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ const { getModifyPkConstraintsScriptDtos } = require('./entityHelpers/primaryKey
const { getModifyUniqueKeyConstraintsScriptDtos } = require('./entityHelpers/uniqueKeyHelper');
const { getModifyNonNullColumnsScriptDtos } = require('./columnHelpers/nonNullConstraintHelper');
const { getModifiedDefaultColumnValueScriptDtos } = require('./columnHelpers/defaultValueHelper');
const { getModifyEntityCommentsScriptDtos } = require('./entityHelpers/commentsHelper');
const { getModifiedCommentOnColumnScriptDtos } = require('./columnHelpers/commentsHelper');

/**
* @return {(collection: AlterCollectionDto) => AlterScriptDto | undefined}
Expand Down Expand Up @@ -97,12 +99,14 @@ const getModifyCollectionScriptDtos =
);

const modifyPKConstraintDtos = getModifyPkConstraintsScriptDtos({ scriptFormat, collection });
const modifyCommentScriptDtos = getModifyEntityCommentsScriptDtos({ scriptFormat, collection });
const modifyUniqueKeyConstraintDtos = getModifyUniqueKeyConstraintsScriptDtos({ scriptFormat, collection });
const modifyCheckConstraintScriptDtos = getModifyCheckConstraintScriptDtos({ scriptFormat })(collection);
const modifyIndexesScriptDtos = getModifyIndexesScriptDtos({ ddlProvider, scriptFormat })({ collection });

return [
...modifyPKConstraintDtos,
...modifyCommentScriptDtos,
...modifyUniqueKeyConstraintDtos,
...modifyIndexesScriptDtos,
...modifyCheckConstraintScriptDtos,
Expand Down Expand Up @@ -209,11 +213,13 @@ const getModifyColumnScriptDtos = (app, dbVersion, scriptFormat) => collection =
const renameColumnScriptDtos = getRenameColumnScriptDtos(ddlProvider, scriptFormat)(collection);
const updateTypeScriptDtos = getUpdateTypesScriptDtos(ddlProvider, scriptFormat)(collection);
const modifyNotNullScriptDtos = getModifyNonNullColumnsScriptDtos({ scriptFormat, collection });
const modifyCommentScriptDtos = getModifiedCommentOnColumnScriptDtos({ scriptFormat, collection });
const modifyDefaultColumnValueScriptDtos = getModifiedDefaultColumnValueScriptDtos({ scriptFormat, collection });

return [
...renameColumnScriptDtos,
...updateTypeScriptDtos,
...modifyCommentScriptDtos,
...modifyDefaultColumnValueScriptDtos,
...modifyNotNullScriptDtos,
].filter(Boolean);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const _ = require('lodash');
const { AlterScriptDto } = require('../types/AlterScriptDto');
const { mapDeltaDualityViewToFeDualityView } = require('./dualityViewHelpers/deltaDualityViewToFeDualityViewMapper');
const { prepareNameForScriptFormat } = require('../../utils/general');
const { getModifyViewCommentsScriptDtos } = require('./viewHelpers/commentsHelper');

/**
* @return {(view: Object) => AlterScriptDto | undefined}
Expand Down Expand Up @@ -62,6 +63,19 @@ const getDeleteViewScriptDto = (app, scriptFormat) => view => {
return AlterScriptDto.getInstance([dropViewScript], true, true);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @return {(view: AlterCollectionDto) => AlterScriptDto[]}
* */
const getModifyViewScriptDtos =
({ scriptFormat }) =>
view => {
const modifyCommentsScriptDtos = getModifyViewCommentsScriptDtos({ scriptFormat, view });

return [...modifyCommentsScriptDtos].filter(Boolean);
};

const getKeys = ({ view, collectionRefsDefinitionsMap, ddlProvider, app }) => {
const { mapProperties } = app.require('@hackolade/ddl-fe-utils');

Expand Down Expand Up @@ -104,4 +118,5 @@ const getKeys = ({ view, collectionRefsDefinitionsMap, ddlProvider, app }) => {
module.exports = {
getAddViewScriptDto,
getDeleteViewScriptDto,
getModifyViewScriptDtos,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
const { toPairs } = require('lodash');
const { AlterScriptDto } = require('../../types/AlterScriptDto');
const {
getFullColumnName,
wrapComment,
getSchemaOfAlterCollection,
getFullCollectionName,
prepareNameForScriptFormat,
} = require('../../../utils/general');
const { assignTemplates } = require('../../../utils/assignTemplates');
const templates = require('../../../ddlProvider/templates');

/**
* @param {string} objectName
* @param {string} comment
* @return {string}
* */
const updateColumnComment = (objectName, comment) => {
const templateConfig = {
object: 'COLUMN',
objectName,
comment,
};

return assignTemplates(templates.comment, templateConfig);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} collection
* @return {AlterScriptDto[]}
* */
const getUpdatedCommentOnColumnScriptDtos = ({ scriptFormat, collection }) => {
const collectionSchema = getSchemaOfAlterCollection(collection);
const fullTableName = getFullCollectionName(scriptFormat)(collectionSchema);

return toPairs(collection.properties)
.filter(([name, jsonSchema]) => {
const newComment = jsonSchema.description;
const oldName = jsonSchema.compMod.oldField.name;
const oldComment = collection.role.properties[oldName]?.description;

return newComment && (!oldComment || newComment !== oldComment);
})
.map(([name, jsonSchema]) => {
const wrappedComment = wrapComment(jsonSchema.description);
const columnName = prepareNameForScriptFormat(scriptFormat)(name);
const fullColumnName = `${fullTableName}.${columnName}`;

return updateColumnComment(fullColumnName, wrappedComment);
})
.map(script => AlterScriptDto.getInstance([script], true, false));
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} collection
* @return {AlterScriptDto[]}
* */
const getModifiedCommentOnColumnScriptDtos = ({ scriptFormat, collection }) => {
const updatedCommentScripts = getUpdatedCommentOnColumnScriptDtos({ scriptFormat, collection });

return [...updatedCommentScripts];
};

module.exports = {
getModifiedCommentOnColumnScriptDtos,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const { AlterScriptDto } = require('../../types/AlterScriptDto');
const { AlterCollectionDto } = require('../../types/AlterCollectionDto');
const { assignTemplates } = require('../../../utils/assignTemplates');
const { wrapComment, getSchemaOfAlterCollection, getFullCollectionName } = require('../../../utils/general');
const templates = require('../../../ddlProvider/templates');

/**
* @param {string} objectName
* @param {string} comment
* @return {string}
* */
const updateTableComment = (objectName, comment) => {
const templateConfig = {
object: 'TABLE',
objectName,
comment,
};
return assignTemplates(templates.comment, templateConfig);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} collection
* @return {AlterScriptDto}
*/
const getUpdatedCommentOnCollectionScriptDto = ({ scriptFormat, collection }) => {
const descriptionInfo = collection?.role.compMod?.description;
if (!descriptionInfo) {
return undefined;
}

const { old: oldComment, new: newComment } = descriptionInfo;
if (!newComment || newComment === oldComment) {
return undefined;
}

const collectionSchema = getSchemaOfAlterCollection(collection);
const fullTableName = getFullCollectionName(scriptFormat)(collectionSchema);
const comment = wrapComment(newComment);
const script = updateTableComment(fullTableName, comment);

return AlterScriptDto.getInstance([script], true, false);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} collection
* @return {Array<AlterScriptDto>}
* */
const getModifyEntityCommentsScriptDtos = ({ scriptFormat, collection }) => {
const updatedCommentScript = getUpdatedCommentOnCollectionScriptDto({ scriptFormat, collection });

return [updatedCommentScript].filter(Boolean);
};

module.exports = {
getModifyEntityCommentsScriptDtos,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
const { AlterScriptDto } = require('../../types/AlterScriptDto');
const { wrapComment, getNamePrefixedWithSchemaNameForScriptFormat } = require('../../../utils/general');
const { assignTemplates } = require('../../../utils/assignTemplates');
const templates = require('../../../ddlProvider/templates');

/**
* @param {string} objectName
* @param {string} comment
* @param {boolean} isMaterializedView
* @return {string}
* */
const updateViewComment = (objectName, comment, isMaterializedView) => {
const object = isMaterializedView ? 'MATERIALIZED VIEW' : 'TABLE';
const templateConfig = { object, objectName, comment };

return assignTemplates(templates.comment, templateConfig);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} view
* @return {AlterScriptDto | undefined}
* */
const getUpdatedCommentScriptDto = ({ scriptFormat, view }) => {
const description = view?.role?.compMod?.description || {};

if (!description.new || description.new === description.old) {
return;
}

const schemaName = view.compMod?.keyspaceName;
const fullViewName = getNamePrefixedWithSchemaNameForScriptFormat(scriptFormat)(view.code || view.name, schemaName);
const wrappedComment = wrapComment(description.new);
const script = updateViewComment(fullViewName, wrappedComment, view.materialized);

return AlterScriptDto.getInstance([script], true, false);
};

/**
* @param {object} params
* @property {string} [scriptFormat]
* @property {AlterCollectionDto} view
* @return {AlterScriptDto[]}
* */
const getModifyViewCommentsScriptDtos = ({ scriptFormat, view }) => {
const updatedCommentScript = getUpdatedCommentScriptDto({ scriptFormat, view });

return [updatedCommentScript].filter(Boolean);
};

module.exports = {
getModifyViewCommentsScriptDtos,
};
2 changes: 0 additions & 2 deletions forward_engineering/ddlProvider/ddlHelpers/tableHelper.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
const _ = require('lodash');

module.exports = ({ getColumnsList, checkAllKeysDeactivated, commentIfDeactivated, prepareName, assignTemplates }) => {
const { getOptionsString } = require('./constraintHelper')({ prepareName });

const getTableType = ({
duplicated,
external,
Expand Down