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
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const _ = require('lodash');
const { AlterCollectionColumnKeyOptionDto } = require('../../types/AlterCollectionDto');

/**
* @param {Array<Partial<AlterCollectionColumnKeyOptionDto>>} oldConstraintOptions
* @param {Array<Partial<AlterCollectionColumnKeyOptionDto>>} constraintOptions
* @returns {boolean}
*/
const areConstraintOptionsEqual = (oldConstraintOptions = [], constraintOptions = []) => {
return (
oldConstraintOptions.length === constraintOptions.length &&
_(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty()
);
};

module.exports = {
areConstraintOptionsEqual,
};
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ const {
AlterCollectionColumnKeyOptionDto,
AlterCollectionRoleCompModPrimaryKey,
} = require('../../types/AlterCollectionDto');
const { KeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
const { PrimaryKeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
const {
getFullCollectionName,
getSchemaOfAlterCollection,
getEntityName,
wrapInQuotes,
} = require('../../../utils/general');
const { alterKeyConstraint, dropKeyConstraint } = require('../../../ddlProvider/ddlHelpers/constraintsHelper');
const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual');

const amountOfColumnsInRegularPk = 1;

Expand Down Expand Up @@ -62,7 +63,7 @@ const getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions = compos

/**
* @param {AlterCollectionDto} collection
* @return {KeyTransitionDto}
* @return {PrimaryKeyTransitionDto}
* */
const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => {
/**
Expand All @@ -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 => {
Expand All @@ -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 => {
/**
Expand All @@ -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 => {
Expand All @@ -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);
};

/**
Expand Down Expand Up @@ -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;
Expand All @@ -420,7 +423,7 @@ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema,
const wasTheFieldAnyPrimaryKey = Boolean(oldColumnJsonSchema?.primaryKey);

if (!(isRegularPrimaryKey && wasTheFieldAnyPrimaryKey)) {
return KeyTransitionDto.noTransition();
return PrimaryKeyTransitionDto.noTransition();
}

/**
Expand Down Expand Up @@ -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;
Expand All @@ -473,7 +477,7 @@ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema,
const isTheFieldAnyPrimaryKey = Boolean(columnJsonSchema?.primaryKey);

if (!(wasRegularPrimaryKey && isTheFieldAnyPrimaryKey)) {
return KeyTransitionDto.noTransition();
return PrimaryKeyTransitionDto.noTransition();
}

/**
Expand Down Expand Up @@ -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();
};

/**
Expand Down Expand Up @@ -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);
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -17,6 +17,7 @@ const {
getDbVersion,
wrapInQuotes,
} = require('../../../utils/general');
const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual');

const amountOfColumnsInRegularUniqueKey = 1;

Expand All @@ -38,6 +39,7 @@ const extractOptionsForComparisonWithRegularUniqueKeyOptions = optionHolder => {
indexStorageParameters: optionHolder.indexStorageParameters,
indexTablespace: optionHolder.indexTablespace,
indexInclude: optionHolder.indexInclude,
nullsDistinct: optionHolder.nullsDistinct,
};
};

Expand All @@ -64,7 +66,7 @@ const getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOp

/**
* @param {AlterCollectionDto} collection
* @return {KeyTransitionDto}
* @return {UniqueKeyTransitionDto}
* */
const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collection => {
/**
Expand All @@ -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);
Expand All @@ -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 => {
/**
Expand All @@ -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);
Expand All @@ -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);
};

/**
Expand Down Expand Up @@ -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;
Expand All @@ -451,7 +455,7 @@ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJson
const wasTheFieldAnyUniqueKey = oldColumnJsonSchema?.unique || oldColumnJsonSchema.compositeUniqueKey;

if (!(isRegularUniqueKey && wasTheFieldAnyUniqueKey)) {
return KeyTransitionDto.noTransition();
return UniqueKeyTransitionDto.noTransition();
}

/**
Expand Down Expand Up @@ -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;
Expand All @@ -507,7 +510,7 @@ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJson
const isTheFieldAnyUniqueKey = Boolean(columnJsonSchema?.unique);

if (!(wasRegularUniqueKey && isTheFieldAnyUniqueKey)) {
return KeyTransitionDto.noTransition();
return UniqueKeyTransitionDto.noTransition();
}

/**
Expand Down Expand Up @@ -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();
};

/**
Expand Down Expand Up @@ -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);
};

/**
Expand Down
Loading