diff --git a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/areConstraintOptionsEqual.js b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/areConstraintOptionsEqual.js new file mode 100644 index 00000000..ec140ae8 --- /dev/null +++ b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/areConstraintOptionsEqual.js @@ -0,0 +1,18 @@ +const _ = require('lodash'); +const { AlterCollectionColumnKeyOptionDto } = require('../../types/AlterCollectionDto'); + +/** + * @param {Array>} oldConstraintOptions + * @param {Array>} constraintOptions + * @returns {boolean} + */ +const areConstraintOptionsEqual = (oldConstraintOptions = [], constraintOptions = []) => { + return ( + oldConstraintOptions.length === constraintOptions.length && + _(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty() + ); +}; + +module.exports = { + areConstraintOptionsEqual, +}; diff --git a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js index 08a0f957..b81787d2 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js @@ -7,7 +7,7 @@ const { AlterCollectionColumnKeyOptionDto, AlterCollectionRoleCompModPrimaryKey, } = require('../../types/AlterCollectionDto'); -const { KeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto'); +const { PrimaryKeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto'); const { getFullCollectionName, getSchemaOfAlterCollection, @@ -15,6 +15,7 @@ const { wrapInQuotes, } = require('../../../utils/general'); const { alterKeyConstraint, dropKeyConstraint } = require('../../../ddlProvider/ddlHelpers/constraintsHelper'); +const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual'); const amountOfColumnsInRegularPk = 1; @@ -62,7 +63,7 @@ const getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions = compos /** * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {PrimaryKeyTransitionDto} * */ const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => { /** @@ -77,18 +78,18 @@ const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => { if (idsOfColumns.length !== amountOfColumnsInRegularPk) { // We return false, because it wouldn't count as transition between regular PK and composite PK // if composite PK did not constraint exactly 1 column - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const idOfPkColumn = idsOfColumns[0]; const newColumnJsonSchema = Object.values(collection.properties).find( columnJsonSchema => columnJsonSchema.GUID === idOfPkColumn, ); if (!newColumnJsonSchema) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const isNewColumnARegularPrimaryKey = newColumnJsonSchema?.primaryKey && !newColumnJsonSchema?.compositePrimaryKey; if (!isNewColumnARegularPrimaryKey) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(newColumnJsonSchema); const areOptionsEqual = oldPrimaryKeys.some(compositePk => { @@ -97,15 +98,16 @@ const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => { } const oldCompositePkAsRegularPkOptions = getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(compositePk); - return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return PrimaryKeyTransitionDto.transition(!areOptionsEqual); }; /** * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {PrimaryKeyTransitionDto} * */ const wasCompositePkChangedInTransitionFromRegularToComposite = collection => { /** @@ -120,18 +122,18 @@ const wasCompositePkChangedInTransitionFromRegularToComposite = collection => { if (idsOfColumns.length !== amountOfColumnsInRegularPk) { // We return false, because it wouldn't count as transition between regular PK and composite PK // if composite PK does not constraint exactly 1 column - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const idOfPkColumn = idsOfColumns[0]; const oldColumnJsonSchema = Object.values(collection.role.properties).find( columnJsonSchema => columnJsonSchema.GUID === idOfPkColumn, ); if (!oldColumnJsonSchema) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const isOldColumnARegularPrimaryKey = oldColumnJsonSchema?.primaryKey && !oldColumnJsonSchema?.compositePrimaryKey; if (!isOldColumnARegularPrimaryKey) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(oldColumnJsonSchema); const areOptionsEqual = newPrimaryKeys.some(compositePk => { @@ -140,10 +142,11 @@ const wasCompositePkChangedInTransitionFromRegularToComposite = collection => { } const oldCompositePkAsRegularPkOptions = getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(compositePk); - return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return PrimaryKeyTransitionDto.transition(!areOptionsEqual); }; /** @@ -410,7 +413,7 @@ const wasFieldChangedToBeARegularPk = (columnJsonSchema, collection) => { /** * @param {AlterCollectionColumnDto} columnJsonSchema * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {PrimaryKeyTransitionDto} * */ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema, collection) => { const oldName = columnJsonSchema.compMod.oldField.name; @@ -420,7 +423,7 @@ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema, const wasTheFieldAnyPrimaryKey = Boolean(oldColumnJsonSchema?.primaryKey); if (!(isRegularPrimaryKey && wasTheFieldAnyPrimaryKey)) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } /** @@ -452,18 +455,19 @@ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema, } const oldCompositePkAsRegularPkOptions = getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(oldCompositePk); - return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return PrimaryKeyTransitionDto.transition(!areOptionsEqual); } - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); }; /** * @param {AlterCollectionColumnDto} columnJsonSchema * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {PrimaryKeyTransitionDto} * */ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema, collection) => { const oldName = columnJsonSchema.compMod.oldField.name; @@ -473,7 +477,7 @@ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema, const isTheFieldAnyPrimaryKey = Boolean(columnJsonSchema?.primaryKey); if (!(wasRegularPrimaryKey && isTheFieldAnyPrimaryKey)) { - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); } /** @@ -505,12 +509,13 @@ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema, } const oldCompositePkAsRegularPkOptions = getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(oldCompositePk); - return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return PrimaryKeyTransitionDto.transition(!areOptionsEqual); } - return KeyTransitionDto.noTransition(); + return PrimaryKeyTransitionDto.noTransition(); }; /** @@ -545,8 +550,8 @@ const wasRegularPkModified = (columnJsonSchema, collection) => { } const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(columnJsonSchema); const oldConstraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(oldJsonSchema); - const areOptionsEqual = _(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); - return !areOptionsEqual; + + return !areConstraintOptionsEqual(oldConstraintOptions, constraintOptions); }; /** diff --git a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/uniqueKeyHelper.js b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/uniqueKeyHelper.js index 64434d93..6ebb82d2 100644 --- a/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/uniqueKeyHelper.js +++ b/forward_engineering/alterScript/alterScriptHelpers/entityHelpers/uniqueKeyHelper.js @@ -7,7 +7,7 @@ const { AlterCollectionColumnKeyOptionDto, AlterCollectionRoleCompModUniqueKey, } = require('../../types/AlterCollectionDto'); -const { KeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto'); +const { UniqueKeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto'); const { dropKeyConstraint, alterKeyConstraint } = require('../../../ddlProvider/ddlHelpers/constraintsHelper'); const keyHelper = require('../../../ddlProvider/ddlHelpers/keyHelper'); const { @@ -17,6 +17,7 @@ const { getDbVersion, wrapInQuotes, } = require('../../../utils/general'); +const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual'); const amountOfColumnsInRegularUniqueKey = 1; @@ -38,6 +39,7 @@ const extractOptionsForComparisonWithRegularUniqueKeyOptions = optionHolder => { indexStorageParameters: optionHolder.indexStorageParameters, indexTablespace: optionHolder.indexTablespace, indexInclude: optionHolder.indexInclude, + nullsDistinct: optionHolder.nullsDistinct, }; }; @@ -64,7 +66,7 @@ const getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOp /** * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {UniqueKeyTransitionDto} * */ const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collection => { /** @@ -79,18 +81,18 @@ const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collectio if (idsOfColumns.length !== amountOfColumnsInRegularUniqueKey) { // We return false, because it wouldn't count as transition between regular UniqueKey and composite UniqueKey // if composite UniqueKey did not constraint exactly 1 column - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const idOfUniqueKeyColumn = idsOfColumns[0]; const newColumnJsonSchema = Object.values(collection.properties).find( columnJsonSchema => columnJsonSchema.GUID === idOfUniqueKeyColumn, ); if (!newColumnJsonSchema) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const isNewColumnARegularUniqueKey = newColumnJsonSchema?.unique && !newColumnJsonSchema?.compositeUniqueKey; if (!isNewColumnARegularUniqueKey) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const constraintOptions = getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(newColumnJsonSchema); @@ -100,15 +102,16 @@ const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collectio } const oldCompositeUniqueKeyAsRegularUniqueKeyOptions = getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(compositeUniqueKey); - return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return UniqueKeyTransitionDto.transition(!areOptionsEqual); }; /** * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {UniqueKeyTransitionDto} * */ const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collection => { /** @@ -123,18 +126,18 @@ const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collectio if (idsOfColumns.length !== amountOfColumnsInRegularUniqueKey) { // We return false, because it wouldn't count as transition between regular UniqueKey and composite UniqueKey // if composite UniqueKey does not constraint exactly 1 column - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const idOfUniqueKeyColumn = idsOfColumns[0]; const oldColumnJsonSchema = Object.values(collection.role.properties).find( columnJsonSchema => columnJsonSchema.GUID === idOfUniqueKeyColumn, ); if (!oldColumnJsonSchema) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const isOldColumnARegularUniqueKey = oldColumnJsonSchema?.unique && !oldColumnJsonSchema?.compositeUniqueKey; if (!isOldColumnARegularUniqueKey) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } const constraintOptions = getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldColumnJsonSchema); @@ -144,10 +147,11 @@ const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collectio } const oldCompositeUniqueKeyAsRegularUniqueKeyOptions = getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(compositeUniqueKey); - return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); + + return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return UniqueKeyTransitionDto.transition(!areOptionsEqual); }; /** @@ -441,7 +445,7 @@ const wasFieldChangedToBeARegularUniqueKey = (columnJsonSchema, collection) => { /** * @param {AlterCollectionColumnDto} columnJsonSchema * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {UniqueKeyTransitionDto} * */ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJsonSchema, collection) => { const oldName = columnJsonSchema.compMod.oldField.name; @@ -451,7 +455,7 @@ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJson const wasTheFieldAnyUniqueKey = oldColumnJsonSchema?.unique || oldColumnJsonSchema.compositeUniqueKey; if (!(isRegularUniqueKey && wasTheFieldAnyUniqueKey)) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } /** @@ -484,20 +488,19 @@ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJson } const oldCompositeUniqueKeyAsRegularUniqueKeyOptions = getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldCompositeUniqueKey); - return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions) - .differenceWith(constraintOptions, _.isEqual) - .isEmpty(); + + return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + return UniqueKeyTransitionDto.transition(!areOptionsEqual); } - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); }; /** * @param {AlterCollectionColumnDto} columnJsonSchema * @param {AlterCollectionDto} collection - * @return {KeyTransitionDto} + * @return {UniqueKeyTransitionDto} * */ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJsonSchema, collection) => { const oldName = columnJsonSchema.compMod.oldField.name; @@ -507,7 +510,7 @@ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJson const isTheFieldAnyUniqueKey = Boolean(columnJsonSchema?.unique); if (!(wasRegularUniqueKey && isTheFieldAnyUniqueKey)) { - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); } /** @@ -540,14 +543,14 @@ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJson } const oldCompositeUniqueKeyAsRegularUniqueKeyOptions = getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldCompositeUniqueKey); - return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions) - .differenceWith(constraintOptions, _.isEqual) - .isEmpty(); + + return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions); }); - return KeyTransitionDto.transition(!areOptionsEqual); + + return UniqueKeyTransitionDto.transition(!areOptionsEqual); } - return KeyTransitionDto.noTransition(); + return UniqueKeyTransitionDto.noTransition(); }; /** @@ -584,8 +587,8 @@ const wasRegularUniqueKeyModified = (columnJsonSchema, collection) => { getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(columnJsonSchema); const oldConstraintOptions = getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldJsonSchema); - const areOptionsEqual = _(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty(); - return !areOptionsEqual; + + return !areConstraintOptionsEqual(oldConstraintOptions, constraintOptions); }; /** diff --git a/forward_engineering/alterScript/types/AlterKeyDto.js b/forward_engineering/alterScript/types/AlterKeyDto.js index 8cef5988..56e04212 100644 --- a/forward_engineering/alterScript/types/AlterKeyDto.js +++ b/forward_engineering/alterScript/types/AlterKeyDto.js @@ -5,22 +5,33 @@ class KeyTransitionDto { didTransitionHappen; /** - * @type {boolean | undefined} + * @return {KeyTransitionDto} * */ - wasPkChangedInTransition; + static noTransition() { + return { + didTransitionHappen: false, + }; + } /** * @return {KeyTransitionDto} * */ - static noTransition() { + static transition() { return { - didTransitionHappen: false, + didTransitionHappen: true, }; } +} + +class PrimaryKeyTransitionDto extends KeyTransitionDto { + /** + * @type {boolean | undefined} + * */ + wasPkChangedInTransition; /** * @param {boolean} wasPkChangedInTransition - * @return {KeyTransitionDto} + * @return {PrimaryKeyTransitionDto} * */ static transition(wasPkChangedInTransition) { return { @@ -30,6 +41,24 @@ class KeyTransitionDto { } } +class UniqueKeyTransitionDto extends KeyTransitionDto { + /** + * @type {boolean | undefined} + * */ + wasUniqueKeyChangedInTransition; + + /** + * @param {boolean} wasUniqueKeyChangedInTransition + * @return {UniqueKeyTransitionDto} + * */ + static transition(wasUniqueKeyChangedInTransition) { + return { + didTransitionHappen: true, + wasUniqueKeyChangedInTransition, + }; + } +} + class KeyScriptModificationDto { /** * @type {string} @@ -67,5 +96,6 @@ class KeyScriptModificationDto { module.exports = { KeyScriptModificationDto, - KeyTransitionDto, + PrimaryKeyTransitionDto, + UniqueKeyTransitionDto, };