Skip to content

Commit 336fbc8

Browse files
authored
HCK-11722: Add support for script generation options (#138)
* HCK-11722: Add support for script generation options * HCK-11722: fix sq warings * HCK-11722: Fix falling tests * HCK-11722: Fix coments * HCK-11722: Improve code quality
1 parent 854df29 commit 336fbc8

9 files changed

Lines changed: 866 additions & 12 deletions

File tree

forward_engineering/config.json

Lines changed: 413 additions & 0 deletions
Large diffs are not rendered by default.

forward_engineering/configs/templates.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module.exports = {
4141
createKeyConstraint: '${constraintName}${keyType}${clustered}${columns}${options}${partition}',
4242

4343
createRegularPrimaryKeyConstraint: '${constraintName} PRIMARY KEY (${columnName})',
44+
createRegularUniqueKeyConstraint: '${constraintName} UNIQUE (${columnName})',
4445

4546
createDefaultConstraint:
4647
'ALTER TABLE ${tableName} ADD CONSTRAINT [${constraintName}] DEFAULT (${default}) FOR [${columnName}]${terminator}\n',

forward_engineering/ddlProvider.js

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module.exports = (baseProvider, options, app) => {
3535
} = require('./helpers/general')(app);
3636
const keyHelper = require('./helpers/keyHelper')(app);
3737
const { getTerminator } = require('./helpers/optionsHelper');
38-
const { createKeyConstraint, createDefaultConstraint, generateConstraintsString } =
38+
const { createPKConstraint, createUKConstraint, createDefaultConstraint, generateConstraintsString } =
3939
require('./helpers/constraintsHelper')(app);
4040
const { wrapIfNotExistSchema, wrapIfNotExistDatabase, wrapIfNotExistTable, wrapIfNotExistView } =
4141
require('./helpers/ifNotExistStatementHelper')(app);
@@ -130,7 +130,7 @@ module.exports = (baseProvider, options, app) => {
130130
: '';
131131
const columnComments = getColumnsComments(name, tableTerminator, columnDefinitions);
132132
const dividedKeysConstraints = divideIntoActivatedAndDeactivated(
133-
keyConstraints.map(createKeyConstraint(templates, tableTerminator, isActivated)),
133+
keyConstraints.map(createPKConstraint(templates, tableTerminator, isActivated)),
134134
key => key.statement,
135135
);
136136
const keyConstraintsString = generateConstraintsString(dividedKeysConstraints, isActivated);
@@ -199,7 +199,7 @@ module.exports = (baseProvider, options, app) => {
199199
: getTableName(columnDefinition.type, columnDefinition.schemaName);
200200
const notNull = columnDefinition.nullable ? '' : ' NOT NULL';
201201
const primaryKey = columnDefinition.primaryKey
202-
? ' ' + createKeyConstraint(templates, terminator, true)(columnDefinition.primaryKeyOptions).statement
202+
? ' ' + createPKConstraint(templates, terminator, true)(columnDefinition.primaryKeyOptions).statement
203203
: '';
204204
const defaultValue = getDefaultValue(
205205
columnDefinition.default,
@@ -215,7 +215,7 @@ module.exports = (baseProvider, options, app) => {
215215
? getEncryptedWith(columnDefinition.encryption[0])
216216
: '';
217217
const unique = columnDefinition.unique
218-
? ' ' + createKeyConstraint(templates, terminator, true)(columnDefinition.uniqueKeyOptions).statement
218+
? ' ' + createUKConstraint(templates, terminator, true)(columnDefinition.uniqueKeyOptions).statement
219219
: '';
220220
const temporalTableTime = getTempTableTime(
221221
columnDefinition.isTempTableStartTimeColumn,
@@ -995,7 +995,7 @@ module.exports = (baseProvider, options, app) => {
995995
},
996996

997997
addPKConstraint(tableName, isParentActivated, keyData, isPKWithOptions, isAlterScript) {
998-
const constraintStatementDto = createKeyConstraint(
998+
const constraintStatementDto = createPKConstraint(
999999
templates,
10001000
terminator,
10011001
isParentActivated,
@@ -1029,5 +1029,32 @@ module.exports = (baseProvider, options, app) => {
10291029
};
10301030
return assignTemplates(templates.dropConstraint, templateConfig);
10311031
},
1032+
1033+
addUniqueConstraint(tableName, isParentActivated, keyData, isUKWithOptions, isAlterScript) {
1034+
const constraintStatementDto = createUKConstraint(
1035+
templates,
1036+
terminator,
1037+
isParentActivated,
1038+
isUKWithOptions,
1039+
isAlterScript,
1040+
)(keyData);
1041+
1042+
return {
1043+
statement: assignTemplates(templates.addConstraint, {
1044+
tableName,
1045+
constraintStatement: (constraintStatementDto.statement || '').trim(),
1046+
terminator,
1047+
}),
1048+
isActivated: constraintStatementDto.isActivated,
1049+
};
1050+
},
1051+
1052+
dropUniqueConstraint(tableName, constraintName) {
1053+
return assignTemplates(templates.dropConstraint, {
1054+
tableName,
1055+
constraintName,
1056+
terminator,
1057+
});
1058+
},
10321059
};
10331060
};

forward_engineering/helpers/alterScriptFromDeltaHelper.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,14 @@ module.exports = _ => {
112112
const { getAddViewScriptDto, getDeleteViewScriptDto, getModifiedViewScriptDto } =
113113
require('./alterScriptHelpers/alterViewHelper')(app, options);
114114

115+
const checkIfOnlyDescriptionChanged = view => {
116+
const changedProps = Object.entries(view.role?.compMod).filter(([_, value]) => value.new !== value.old);
117+
118+
// If the only change is the description, we ignore it
119+
// descriptions are handled in separate methods
120+
return !(changedProps.length === 1 && changedProps[0][0] === 'description');
121+
};
122+
115123
const createViewsScriptsDtos = []
116124
.concat(collection.properties?.views?.properties?.added?.items)
117125
.filter(Boolean)
@@ -134,6 +142,7 @@ module.exports = _ => {
134142
.map(item => Object.values(item.properties)[0])
135143
.map(view => ({ ...view, ...(view.role || {}) }))
136144
.filter(view => !view.compMod?.created && !view.compMod?.deleted)
145+
.filter(checkIfOnlyDescriptionChanged)
137146
.flatMap(getModifiedViewScriptDto);
138147

139148
return { deleteViewsScriptsDtos, createViewsScriptsDtos, modifiedViewsScriptsDtos };

forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = (app, options) => {
1818
const { getModifyCheckConstraintScriptDtos } = require('./entityHelpers/checkConstraintHelper');
1919
const { getModifyPkConstraintsScriptDtos } = require('./entityHelpers/primaryKeyHelper');
2020
const { getModifyNonNullColumnsScriptDtos } = require('./columnHelpers/notNullConstraintsHelper');
21+
const { getModifyUniqueConstraintsScriptDtos } = require('./entityHelpers/uniqueConstraintHelper');
2122

2223
/**
2324
* @param {Collection} collection
@@ -96,6 +97,7 @@ module.exports = (app, options) => {
9697
const idToNameHashTable = generateIdToNameHashTable(jsonSchema);
9798
const idToActivatedHashTable = generateIdToActivatedHashTable(jsonSchema);
9899
const modifyCheckConstraintScriptDtos = getModifyCheckConstraintScriptDtos(_, ddlProvider)(collection);
100+
const modifyUniqueConstraintsScriptDtos = getModifyUniqueConstraintsScriptDtos(app, _, ddlProvider)(collection);
99101
const modifyPKConstraintDtos = getModifyPkConstraintsScriptDtos(app, _, ddlProvider)(collection);
100102
const indexesScriptsDtos = modifyGroupItems({
101103
data: jsonSchema,
@@ -118,7 +120,12 @@ module.exports = (app, options) => {
118120
AlterScriptDto.getInstance([ddlProvider.dropIndex(tableName, index)], true, true),
119121
}).flat();
120122

121-
return [...modifyCheckConstraintScriptDtos, ...modifyPKConstraintDtos, ...indexesScriptsDtos].filter(Boolean);
123+
return [
124+
...modifyCheckConstraintScriptDtos,
125+
...modifyPKConstraintDtos,
126+
...modifyUniqueConstraintsScriptDtos,
127+
...indexesScriptsDtos,
128+
].filter(Boolean);
122129
};
123130

124131
/**
@@ -302,7 +309,7 @@ module.exports = (app, options) => {
302309
const comment = column.description;
303310
const oldComment = tables[tableName].role?.properties[columnNameToSearchComment]?.description;
304311

305-
if (comment || !oldComment) {
312+
if (!comment || oldComment) {
306313
return undefined;
307314
}
308315

forward_engineering/helpers/alterScriptHelpers/entityHelpers/primaryKeyHelper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ const getAddCompositePkScriptDtos = (app, _, ddlProvider) => collection => {
282282
return [];
283283
}
284284

285-
const { fullTableName, entityName } = getCollectionNames(_, collection);
285+
const { fullTableName } = getCollectionNames(_, collection);
286286

287287
return newPrimaryKeys
288288
.map(newPk => {

0 commit comments

Comments
 (0)