Skip to content

Commit 88395af

Browse files
HCK-12339: Add options on existing SINGLE UK/PK should be in delta model alter script (#151)
* HCK-12339: fix getting modified constraints during transit * HCK-12339: fix getting modified constraint options for regular PK/UK * HCK-12339: fix getting modified constraint options for regular PK/UK * HCK-12339: add missed UK options property
1 parent b5af6ca commit 88395af

File tree

4 files changed

+116
-60
lines changed

4 files changed

+116
-60
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const _ = require('lodash');
2+
const { AlterCollectionColumnKeyOptionDto } = require('../../types/AlterCollectionDto');
3+
4+
/**
5+
* @param {Array<Partial<AlterCollectionColumnKeyOptionDto>>} oldConstraintOptions
6+
* @param {Array<Partial<AlterCollectionColumnKeyOptionDto>>} constraintOptions
7+
* @returns {boolean}
8+
*/
9+
const areConstraintOptionsEqual = (oldConstraintOptions = [], constraintOptions = []) => {
10+
return (
11+
oldConstraintOptions.length === constraintOptions.length &&
12+
_(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty()
13+
);
14+
};
15+
16+
module.exports = {
17+
areConstraintOptionsEqual,
18+
};

forward_engineering/alterScript/alterScriptHelpers/entityHelpers/primaryKeyHelper.js

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ const {
77
AlterCollectionColumnKeyOptionDto,
88
AlterCollectionRoleCompModPrimaryKey,
99
} = require('../../types/AlterCollectionDto');
10-
const { KeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
10+
const { PrimaryKeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
1111
const {
1212
getFullCollectionName,
1313
getSchemaOfAlterCollection,
1414
getEntityName,
1515
wrapInQuotes,
1616
} = require('../../../utils/general');
1717
const { alterKeyConstraint, dropKeyConstraint } = require('../../../ddlProvider/ddlHelpers/constraintsHelper');
18+
const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual');
1819

1920
const amountOfColumnsInRegularPk = 1;
2021

@@ -62,7 +63,7 @@ const getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions = compos
6263

6364
/**
6465
* @param {AlterCollectionDto} collection
65-
* @return {KeyTransitionDto}
66+
* @return {PrimaryKeyTransitionDto}
6667
* */
6768
const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => {
6869
/**
@@ -77,18 +78,18 @@ const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => {
7778
if (idsOfColumns.length !== amountOfColumnsInRegularPk) {
7879
// We return false, because it wouldn't count as transition between regular PK and composite PK
7980
// if composite PK did not constraint exactly 1 column
80-
return KeyTransitionDto.noTransition();
81+
return PrimaryKeyTransitionDto.noTransition();
8182
}
8283
const idOfPkColumn = idsOfColumns[0];
8384
const newColumnJsonSchema = Object.values(collection.properties).find(
8485
columnJsonSchema => columnJsonSchema.GUID === idOfPkColumn,
8586
);
8687
if (!newColumnJsonSchema) {
87-
return KeyTransitionDto.noTransition();
88+
return PrimaryKeyTransitionDto.noTransition();
8889
}
8990
const isNewColumnARegularPrimaryKey = newColumnJsonSchema?.primaryKey && !newColumnJsonSchema?.compositePrimaryKey;
9091
if (!isNewColumnARegularPrimaryKey) {
91-
return KeyTransitionDto.noTransition();
92+
return PrimaryKeyTransitionDto.noTransition();
9293
}
9394
const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(newColumnJsonSchema);
9495
const areOptionsEqual = oldPrimaryKeys.some(compositePk => {
@@ -97,15 +98,16 @@ const wasCompositePkChangedInTransitionFromCompositeToRegular = collection => {
9798
}
9899
const oldCompositePkAsRegularPkOptions =
99100
getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(compositePk);
100-
return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
101+
102+
return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions);
101103
});
102104

103-
return KeyTransitionDto.transition(!areOptionsEqual);
105+
return PrimaryKeyTransitionDto.transition(!areOptionsEqual);
104106
};
105107

106108
/**
107109
* @param {AlterCollectionDto} collection
108-
* @return {KeyTransitionDto}
110+
* @return {PrimaryKeyTransitionDto}
109111
* */
110112
const wasCompositePkChangedInTransitionFromRegularToComposite = collection => {
111113
/**
@@ -120,18 +122,18 @@ const wasCompositePkChangedInTransitionFromRegularToComposite = collection => {
120122
if (idsOfColumns.length !== amountOfColumnsInRegularPk) {
121123
// We return false, because it wouldn't count as transition between regular PK and composite PK
122124
// if composite PK does not constraint exactly 1 column
123-
return KeyTransitionDto.noTransition();
125+
return PrimaryKeyTransitionDto.noTransition();
124126
}
125127
const idOfPkColumn = idsOfColumns[0];
126128
const oldColumnJsonSchema = Object.values(collection.role.properties).find(
127129
columnJsonSchema => columnJsonSchema.GUID === idOfPkColumn,
128130
);
129131
if (!oldColumnJsonSchema) {
130-
return KeyTransitionDto.noTransition();
132+
return PrimaryKeyTransitionDto.noTransition();
131133
}
132134
const isOldColumnARegularPrimaryKey = oldColumnJsonSchema?.primaryKey && !oldColumnJsonSchema?.compositePrimaryKey;
133135
if (!isOldColumnARegularPrimaryKey) {
134-
return KeyTransitionDto.noTransition();
136+
return PrimaryKeyTransitionDto.noTransition();
135137
}
136138
const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(oldColumnJsonSchema);
137139
const areOptionsEqual = newPrimaryKeys.some(compositePk => {
@@ -140,10 +142,11 @@ const wasCompositePkChangedInTransitionFromRegularToComposite = collection => {
140142
}
141143
const oldCompositePkAsRegularPkOptions =
142144
getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(compositePk);
143-
return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
145+
146+
return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions);
144147
});
145148

146-
return KeyTransitionDto.transition(!areOptionsEqual);
149+
return PrimaryKeyTransitionDto.transition(!areOptionsEqual);
147150
};
148151

149152
/**
@@ -410,7 +413,7 @@ const wasFieldChangedToBeARegularPk = (columnJsonSchema, collection) => {
410413
/**
411414
* @param {AlterCollectionColumnDto} columnJsonSchema
412415
* @param {AlterCollectionDto} collection
413-
* @return {KeyTransitionDto}
416+
* @return {PrimaryKeyTransitionDto}
414417
* */
415418
const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema, collection) => {
416419
const oldName = columnJsonSchema.compMod.oldField.name;
@@ -420,7 +423,7 @@ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema,
420423
const wasTheFieldAnyPrimaryKey = Boolean(oldColumnJsonSchema?.primaryKey);
421424

422425
if (!(isRegularPrimaryKey && wasTheFieldAnyPrimaryKey)) {
423-
return KeyTransitionDto.noTransition();
426+
return PrimaryKeyTransitionDto.noTransition();
424427
}
425428

426429
/**
@@ -452,18 +455,19 @@ const wasRegularPkChangedInTransitionFromCompositeToRegular = (columnJsonSchema,
452455
}
453456
const oldCompositePkAsRegularPkOptions =
454457
getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(oldCompositePk);
455-
return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
458+
459+
return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions);
456460
});
457-
return KeyTransitionDto.transition(!areOptionsEqual);
461+
return PrimaryKeyTransitionDto.transition(!areOptionsEqual);
458462
}
459463

460-
return KeyTransitionDto.noTransition();
464+
return PrimaryKeyTransitionDto.noTransition();
461465
};
462466

463467
/**
464468
* @param {AlterCollectionColumnDto} columnJsonSchema
465469
* @param {AlterCollectionDto} collection
466-
* @return {KeyTransitionDto}
470+
* @return {PrimaryKeyTransitionDto}
467471
* */
468472
const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema, collection) => {
469473
const oldName = columnJsonSchema.compMod.oldField.name;
@@ -473,7 +477,7 @@ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema,
473477
const isTheFieldAnyPrimaryKey = Boolean(columnJsonSchema?.primaryKey);
474478

475479
if (!(wasRegularPrimaryKey && isTheFieldAnyPrimaryKey)) {
476-
return KeyTransitionDto.noTransition();
480+
return PrimaryKeyTransitionDto.noTransition();
477481
}
478482

479483
/**
@@ -505,12 +509,13 @@ const wasRegularPkChangedInTransitionFromRegularToComposite = (columnJsonSchema,
505509
}
506510
const oldCompositePkAsRegularPkOptions =
507511
getCustomPropertiesOfCompositePkForComparisonWithRegularPkOptions(oldCompositePk);
508-
return _(oldCompositePkAsRegularPkOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
512+
513+
return areConstraintOptionsEqual(oldCompositePkAsRegularPkOptions, constraintOptions);
509514
});
510-
return KeyTransitionDto.transition(!areOptionsEqual);
515+
return PrimaryKeyTransitionDto.transition(!areOptionsEqual);
511516
}
512517

513-
return KeyTransitionDto.noTransition();
518+
return PrimaryKeyTransitionDto.noTransition();
514519
};
515520

516521
/**
@@ -545,8 +550,8 @@ const wasRegularPkModified = (columnJsonSchema, collection) => {
545550
}
546551
const constraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(columnJsonSchema);
547552
const oldConstraintOptions = getCustomPropertiesOfRegularPkForComparisonWithRegularPkOptions(oldJsonSchema);
548-
const areOptionsEqual = _(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
549-
return !areOptionsEqual;
553+
554+
return !areConstraintOptionsEqual(oldConstraintOptions, constraintOptions);
550555
};
551556

552557
/**

forward_engineering/alterScript/alterScriptHelpers/entityHelpers/uniqueKeyHelper.js

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const {
77
AlterCollectionColumnKeyOptionDto,
88
AlterCollectionRoleCompModUniqueKey,
99
} = require('../../types/AlterCollectionDto');
10-
const { KeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
10+
const { UniqueKeyTransitionDto, KeyScriptModificationDto } = require('../../types/AlterKeyDto');
1111
const { dropKeyConstraint, alterKeyConstraint } = require('../../../ddlProvider/ddlHelpers/constraintsHelper');
1212
const keyHelper = require('../../../ddlProvider/ddlHelpers/keyHelper');
1313
const {
@@ -17,6 +17,7 @@ const {
1717
getDbVersion,
1818
wrapInQuotes,
1919
} = require('../../../utils/general');
20+
const { areConstraintOptionsEqual } = require('./areConstraintOptionsEqual');
2021

2122
const amountOfColumnsInRegularUniqueKey = 1;
2223

@@ -38,6 +39,7 @@ const extractOptionsForComparisonWithRegularUniqueKeyOptions = optionHolder => {
3839
indexStorageParameters: optionHolder.indexStorageParameters,
3940
indexTablespace: optionHolder.indexTablespace,
4041
indexInclude: optionHolder.indexInclude,
42+
nullsDistinct: optionHolder.nullsDistinct,
4143
};
4244
};
4345

@@ -64,7 +66,7 @@ const getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOp
6466

6567
/**
6668
* @param {AlterCollectionDto} collection
67-
* @return {KeyTransitionDto}
69+
* @return {UniqueKeyTransitionDto}
6870
* */
6971
const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collection => {
7072
/**
@@ -79,18 +81,18 @@ const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collectio
7981
if (idsOfColumns.length !== amountOfColumnsInRegularUniqueKey) {
8082
// We return false, because it wouldn't count as transition between regular UniqueKey and composite UniqueKey
8183
// if composite UniqueKey did not constraint exactly 1 column
82-
return KeyTransitionDto.noTransition();
84+
return UniqueKeyTransitionDto.noTransition();
8385
}
8486
const idOfUniqueKeyColumn = idsOfColumns[0];
8587
const newColumnJsonSchema = Object.values(collection.properties).find(
8688
columnJsonSchema => columnJsonSchema.GUID === idOfUniqueKeyColumn,
8789
);
8890
if (!newColumnJsonSchema) {
89-
return KeyTransitionDto.noTransition();
91+
return UniqueKeyTransitionDto.noTransition();
9092
}
9193
const isNewColumnARegularUniqueKey = newColumnJsonSchema?.unique && !newColumnJsonSchema?.compositeUniqueKey;
9294
if (!isNewColumnARegularUniqueKey) {
93-
return KeyTransitionDto.noTransition();
95+
return UniqueKeyTransitionDto.noTransition();
9496
}
9597
const constraintOptions =
9698
getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(newColumnJsonSchema);
@@ -100,15 +102,16 @@ const wasCompositeUniqueKeyChangedInTransitionFromCompositeToRegular = collectio
100102
}
101103
const oldCompositeUniqueKeyAsRegularUniqueKeyOptions =
102104
getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(compositeUniqueKey);
103-
return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
105+
106+
return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions);
104107
});
105108

106-
return KeyTransitionDto.transition(!areOptionsEqual);
109+
return UniqueKeyTransitionDto.transition(!areOptionsEqual);
107110
};
108111

109112
/**
110113
* @param {AlterCollectionDto} collection
111-
* @return {KeyTransitionDto}
114+
* @return {UniqueKeyTransitionDto}
112115
* */
113116
const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collection => {
114117
/**
@@ -123,18 +126,18 @@ const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collectio
123126
if (idsOfColumns.length !== amountOfColumnsInRegularUniqueKey) {
124127
// We return false, because it wouldn't count as transition between regular UniqueKey and composite UniqueKey
125128
// if composite UniqueKey does not constraint exactly 1 column
126-
return KeyTransitionDto.noTransition();
129+
return UniqueKeyTransitionDto.noTransition();
127130
}
128131
const idOfUniqueKeyColumn = idsOfColumns[0];
129132
const oldColumnJsonSchema = Object.values(collection.role.properties).find(
130133
columnJsonSchema => columnJsonSchema.GUID === idOfUniqueKeyColumn,
131134
);
132135
if (!oldColumnJsonSchema) {
133-
return KeyTransitionDto.noTransition();
136+
return UniqueKeyTransitionDto.noTransition();
134137
}
135138
const isOldColumnARegularUniqueKey = oldColumnJsonSchema?.unique && !oldColumnJsonSchema?.compositeUniqueKey;
136139
if (!isOldColumnARegularUniqueKey) {
137-
return KeyTransitionDto.noTransition();
140+
return UniqueKeyTransitionDto.noTransition();
138141
}
139142
const constraintOptions =
140143
getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldColumnJsonSchema);
@@ -144,10 +147,11 @@ const wasCompositeUniqueKeyChangedInTransitionFromRegularToComposite = collectio
144147
}
145148
const oldCompositeUniqueKeyAsRegularUniqueKeyOptions =
146149
getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(compositeUniqueKey);
147-
return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
150+
151+
return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions);
148152
});
149153

150-
return KeyTransitionDto.transition(!areOptionsEqual);
154+
return UniqueKeyTransitionDto.transition(!areOptionsEqual);
151155
};
152156

153157
/**
@@ -441,7 +445,7 @@ const wasFieldChangedToBeARegularUniqueKey = (columnJsonSchema, collection) => {
441445
/**
442446
* @param {AlterCollectionColumnDto} columnJsonSchema
443447
* @param {AlterCollectionDto} collection
444-
* @return {KeyTransitionDto}
448+
* @return {UniqueKeyTransitionDto}
445449
* */
446450
const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJsonSchema, collection) => {
447451
const oldName = columnJsonSchema.compMod.oldField.name;
@@ -451,7 +455,7 @@ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJson
451455
const wasTheFieldAnyUniqueKey = oldColumnJsonSchema?.unique || oldColumnJsonSchema.compositeUniqueKey;
452456

453457
if (!(isRegularUniqueKey && wasTheFieldAnyUniqueKey)) {
454-
return KeyTransitionDto.noTransition();
458+
return UniqueKeyTransitionDto.noTransition();
455459
}
456460

457461
/**
@@ -484,20 +488,19 @@ const wasRegularUniqueKeyChangedInTransitionFromCompositeToRegular = (columnJson
484488
}
485489
const oldCompositeUniqueKeyAsRegularUniqueKeyOptions =
486490
getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldCompositeUniqueKey);
487-
return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions)
488-
.differenceWith(constraintOptions, _.isEqual)
489-
.isEmpty();
491+
492+
return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions);
490493
});
491-
return KeyTransitionDto.transition(!areOptionsEqual);
494+
return UniqueKeyTransitionDto.transition(!areOptionsEqual);
492495
}
493496

494-
return KeyTransitionDto.noTransition();
497+
return UniqueKeyTransitionDto.noTransition();
495498
};
496499

497500
/**
498501
* @param {AlterCollectionColumnDto} columnJsonSchema
499502
* @param {AlterCollectionDto} collection
500-
* @return {KeyTransitionDto}
503+
* @return {UniqueKeyTransitionDto}
501504
* */
502505
const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJsonSchema, collection) => {
503506
const oldName = columnJsonSchema.compMod.oldField.name;
@@ -507,7 +510,7 @@ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJson
507510
const isTheFieldAnyUniqueKey = Boolean(columnJsonSchema?.unique);
508511

509512
if (!(wasRegularUniqueKey && isTheFieldAnyUniqueKey)) {
510-
return KeyTransitionDto.noTransition();
513+
return UniqueKeyTransitionDto.noTransition();
511514
}
512515

513516
/**
@@ -540,14 +543,14 @@ const wasRegularUniqueKeyChangedInTransitionFromRegularToComposite = (columnJson
540543
}
541544
const oldCompositeUniqueKeyAsRegularUniqueKeyOptions =
542545
getCustomPropertiesOfCompositeUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldCompositeUniqueKey);
543-
return _(oldCompositeUniqueKeyAsRegularUniqueKeyOptions)
544-
.differenceWith(constraintOptions, _.isEqual)
545-
.isEmpty();
546+
547+
return areConstraintOptionsEqual(oldCompositeUniqueKeyAsRegularUniqueKeyOptions, constraintOptions);
546548
});
547-
return KeyTransitionDto.transition(!areOptionsEqual);
549+
550+
return UniqueKeyTransitionDto.transition(!areOptionsEqual);
548551
}
549552

550-
return KeyTransitionDto.noTransition();
553+
return UniqueKeyTransitionDto.noTransition();
551554
};
552555

553556
/**
@@ -584,8 +587,8 @@ const wasRegularUniqueKeyModified = (columnJsonSchema, collection) => {
584587
getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(columnJsonSchema);
585588
const oldConstraintOptions =
586589
getCustomPropertiesOfRegularUniqueKeyForComparisonWithRegularUniqueKeyOptions(oldJsonSchema);
587-
const areOptionsEqual = _(oldConstraintOptions).differenceWith(constraintOptions, _.isEqual).isEmpty();
588-
return !areOptionsEqual;
590+
591+
return !areConstraintOptionsEqual(oldConstraintOptions, constraintOptions);
589592
};
590593

591594
/**

0 commit comments

Comments
 (0)