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
413 changes: 413 additions & 0 deletions forward_engineering/config.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions forward_engineering/configs/templates.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ module.exports = {
createKeyConstraint: '${constraintName}${keyType}${clustered}${columns}${options}${partition}',

createRegularPrimaryKeyConstraint: '${constraintName} PRIMARY KEY (${columnName})',
createRegularUniqueKeyConstraint: '${constraintName} UNIQUE (${columnName})',

createDefaultConstraint:
'ALTER TABLE ${tableName} ADD CONSTRAINT [${constraintName}] DEFAULT (${default}) FOR [${columnName}]${terminator}\n',
Expand Down
37 changes: 32 additions & 5 deletions forward_engineering/ddlProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ module.exports = (baseProvider, options, app) => {
} = require('./helpers/general')(app);
const keyHelper = require('./helpers/keyHelper')(app);
const { getTerminator } = require('./helpers/optionsHelper');
const { createKeyConstraint, createDefaultConstraint, generateConstraintsString } =
const { createPKConstraint, createUKConstraint, createDefaultConstraint, generateConstraintsString } =
require('./helpers/constraintsHelper')(app);
const { wrapIfNotExistSchema, wrapIfNotExistDatabase, wrapIfNotExistTable, wrapIfNotExistView } =
require('./helpers/ifNotExistStatementHelper')(app);
Expand Down Expand Up @@ -130,7 +130,7 @@ module.exports = (baseProvider, options, app) => {
: '';
const columnComments = getColumnsComments(name, tableTerminator, columnDefinitions);
const dividedKeysConstraints = divideIntoActivatedAndDeactivated(
keyConstraints.map(createKeyConstraint(templates, tableTerminator, isActivated)),
keyConstraints.map(createPKConstraint(templates, tableTerminator, isActivated)),
key => key.statement,
);
const keyConstraintsString = generateConstraintsString(dividedKeysConstraints, isActivated);
Expand Down Expand Up @@ -199,7 +199,7 @@ module.exports = (baseProvider, options, app) => {
: getTableName(columnDefinition.type, columnDefinition.schemaName);
const notNull = columnDefinition.nullable ? '' : ' NOT NULL';
const primaryKey = columnDefinition.primaryKey
? ' ' + createKeyConstraint(templates, terminator, true)(columnDefinition.primaryKeyOptions).statement
? ' ' + createPKConstraint(templates, terminator, true)(columnDefinition.primaryKeyOptions).statement
: '';
const defaultValue = getDefaultValue(
columnDefinition.default,
Expand All @@ -215,7 +215,7 @@ module.exports = (baseProvider, options, app) => {
? getEncryptedWith(columnDefinition.encryption[0])
: '';
const unique = columnDefinition.unique
? ' ' + createKeyConstraint(templates, terminator, true)(columnDefinition.uniqueKeyOptions).statement
? ' ' + createUKConstraint(templates, terminator, true)(columnDefinition.uniqueKeyOptions).statement
: '';
const temporalTableTime = getTempTableTime(
columnDefinition.isTempTableStartTimeColumn,
Expand Down Expand Up @@ -995,7 +995,7 @@ module.exports = (baseProvider, options, app) => {
},

addPKConstraint(tableName, isParentActivated, keyData, isPKWithOptions, isAlterScript) {
const constraintStatementDto = createKeyConstraint(
const constraintStatementDto = createPKConstraint(
templates,
terminator,
isParentActivated,
Expand Down Expand Up @@ -1029,5 +1029,32 @@ module.exports = (baseProvider, options, app) => {
};
return assignTemplates(templates.dropConstraint, templateConfig);
},

addUniqueConstraint(tableName, isParentActivated, keyData, isUKWithOptions, isAlterScript) {
const constraintStatementDto = createUKConstraint(
templates,
terminator,
isParentActivated,
isUKWithOptions,
isAlterScript,
)(keyData);

return {
statement: assignTemplates(templates.addConstraint, {
tableName,
constraintStatement: (constraintStatementDto.statement || '').trim(),
terminator,
}),
isActivated: constraintStatementDto.isActivated,
};
},

dropUniqueConstraint(tableName, constraintName) {
return assignTemplates(templates.dropConstraint, {
tableName,
constraintName,
terminator,
});
},
};
};
9 changes: 9 additions & 0 deletions forward_engineering/helpers/alterScriptFromDeltaHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,14 @@ module.exports = _ => {
const { getAddViewScriptDto, getDeleteViewScriptDto, getModifiedViewScriptDto } =
require('./alterScriptHelpers/alterViewHelper')(app, options);

const checkIfOnlyDescriptionChanged = view => {
const changedProps = Object.entries(view.role?.compMod).filter(([_, value]) => value.new !== value.old);

// If the only change is the description, we ignore it
// descriptions are handled in separate methods
return !(changedProps.length === 1 && changedProps[0][0] === 'description');
};

const createViewsScriptsDtos = []
.concat(collection.properties?.views?.properties?.added?.items)
.filter(Boolean)
Expand All @@ -134,6 +142,7 @@ module.exports = _ => {
.map(item => Object.values(item.properties)[0])
.map(view => ({ ...view, ...(view.role || {}) }))
.filter(view => !view.compMod?.created && !view.compMod?.deleted)
.filter(checkIfOnlyDescriptionChanged)
.flatMap(getModifiedViewScriptDto);

return { deleteViewsScriptsDtos, createViewsScriptsDtos, modifiedViewsScriptsDtos };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ module.exports = (app, options) => {
const { getModifyCheckConstraintScriptDtos } = require('./entityHelpers/checkConstraintHelper');
const { getModifyPkConstraintsScriptDtos } = require('./entityHelpers/primaryKeyHelper');
const { getModifyNonNullColumnsScriptDtos } = require('./columnHelpers/notNullConstraintsHelper');
const { getModifyUniqueConstraintsScriptDtos } = require('./entityHelpers/uniqueConstraintHelper');

/**
* @param {Collection} collection
Expand Down Expand Up @@ -96,6 +97,7 @@ module.exports = (app, options) => {
const idToNameHashTable = generateIdToNameHashTable(jsonSchema);
const idToActivatedHashTable = generateIdToActivatedHashTable(jsonSchema);
const modifyCheckConstraintScriptDtos = getModifyCheckConstraintScriptDtos(_, ddlProvider)(collection);
const modifyUniqueConstraintsScriptDtos = getModifyUniqueConstraintsScriptDtos(app, _, ddlProvider)(collection);
const modifyPKConstraintDtos = getModifyPkConstraintsScriptDtos(app, _, ddlProvider)(collection);
const indexesScriptsDtos = modifyGroupItems({
data: jsonSchema,
Expand All @@ -118,7 +120,12 @@ module.exports = (app, options) => {
AlterScriptDto.getInstance([ddlProvider.dropIndex(tableName, index)], true, true),
}).flat();

return [...modifyCheckConstraintScriptDtos, ...modifyPKConstraintDtos, ...indexesScriptsDtos].filter(Boolean);
return [
...modifyCheckConstraintScriptDtos,
...modifyPKConstraintDtos,
...modifyUniqueConstraintsScriptDtos,
...indexesScriptsDtos,
].filter(Boolean);
};

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

if (comment || !oldComment) {
if (!comment || oldComment) {
return undefined;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ const getAddCompositePkScriptDtos = (app, _, ddlProvider) => collection => {
return [];
}

const { fullTableName, entityName } = getCollectionNames(_, collection);
const { fullTableName } = getCollectionNames(_, collection);

return newPrimaryKeys
.map(newPk => {
Expand Down
Loading