Skip to content

Commit 4a60513

Browse files
HCK-7614: column DEFAULT (#113)
* feat: added column DEFAULT prop handler * fix: drop DEFAULT statement params * fix: bump pg version * fix: adjusted statements with fail-safe check IF EXISTS * fix: handle _fasly_ values properly * fix: handle drop statement for empty values * fix: appropriately generate drop statement * chore: simplify
1 parent 76c6383 commit 4a60513

24 files changed

+460
-401
lines changed

forward_engineering/alterScript/alterScriptBuilder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const { AlterScriptDto } = require('./types/AlterScriptDto');
66
* @return {(dtos: AlterScriptDto[], shouldApplyDropStatements: boolean) => string}
77
* */
88
const joinAlterScriptDtosIntoScript = _ => (dtos, shouldApplyDropStatements) => {
9-
const { commentIfDeactivated } = require('../utils/general')(_);
9+
const { commentIfDeactivated } = require('../utils/general');
1010
return dtos
1111
.map(dto => {
1212
if (dto.isActivated === false) {

forward_engineering/alterScript/alterScriptHelpers/alterContainerHelper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const { AlterScriptDto } = require('../types/AlterScriptDto');
77
const getAddContainerScriptDto = app => containerName => {
88
const _ = app.require('lodash');
99
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
10-
const { wrapInQuotes } = require('../../utils/general')(_);
10+
const { wrapInQuotes } = require('../../utils/general');
1111
const script = ddlProvider.createSchemaOnly(wrapInQuotes(containerName));
1212
return AlterScriptDto.getInstance([script], true, false);
1313
};
@@ -18,7 +18,7 @@ const getAddContainerScriptDto = app => containerName => {
1818
const getDeleteContainerScriptDto = app => containerName => {
1919
const _ = app.require('lodash');
2020
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
21-
const { wrapInQuotes } = require('../../utils/general')(_);
21+
const { wrapInQuotes } = require('../../utils/general');
2222

2323
const script = ddlProvider.dropSchema(wrapInQuotes(containerName));
2424
return AlterScriptDto.getInstance([script], true, true);

forward_engineering/alterScript/alterScriptHelpers/alterEntityHelper.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const {
1313
getAddedIndexesScriptDtos,
1414
getAdditionalDataForDdlProvider,
1515
} = require('./entityHelpers/indexesHelper');
16+
const { getModifiedDefaultColumnValueScriptDtos } = require('./columnHelpers/defaultValueHelper');
1617

1718
/**
1819
* @return {(collection: AlterCollectionDto) => AlterScriptDto | undefined}
@@ -21,7 +22,7 @@ const getAddCollectionScriptDto =
2122
({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }) =>
2223
collection => {
2324
const _ = app.require('lodash');
24-
const { getEntityName } = require('../../utils/general')(_);
25+
const { getEntityName } = require('../../utils/general');
2526
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(app);
2627
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
2728
const { getDefinitionByReference } = app.require('@hackolade/ddl-fe-utils');
@@ -76,7 +77,7 @@ const getAddCollectionScriptDto =
7677
const getDeleteCollectionScriptDto = app => collection => {
7778
const _ = app.require('lodash');
7879
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
79-
const { getFullTableName } = require('../../utils/general')(_);
80+
const { getFullTableName } = require('../../utils/general');
8081

8182
const fullName = getFullTableName(collection);
8283
const script = ddlProvider.dropTable(fullName);
@@ -116,7 +117,7 @@ const getAddColumnsByConditionScriptDtos =
116117
({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }) =>
117118
(collection, predicate) => {
118119
const _ = app.require('lodash');
119-
const { getEntityName, getNamePrefixedWithSchemaName } = require('../../utils/general')(_);
120+
const { getEntityName, getNamePrefixedWithSchemaName } = require('../../utils/general');
120121
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(app);
121122
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
122123
const { getDefinitionByReference } = app.require('@hackolade/ddl-fe-utils');
@@ -204,7 +205,7 @@ const getAddColumnScriptDtos =
204205
const getDeleteColumnsByConditionScriptDtos = app => (collection, predicate) => {
205206
const _ = app.require('lodash');
206207
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
207-
const { getEntityName, getNamePrefixedWithSchemaName, wrapInQuotes } = require('../../utils/general')(_);
208+
const { getEntityName, getNamePrefixedWithSchemaName, wrapInQuotes } = require('../../utils/general');
208209

209210
const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) };
210211
const tableName = getEntityName(collectionSchema);
@@ -294,12 +295,17 @@ const getModifyColumnScriptDtos =
294295
const updateTypeScriptDtos = getUpdateTypesScriptDtos(_, ddlProvider)(collection);
295296
const modifyNotNullScriptDtos = getModifyNonNullColumnsScriptDtos(_, ddlProvider)(collection);
296297
const modifyCommentScriptDtos = getModifiedCommentOnColumnScriptDtos(_, ddlProvider)(collection);
298+
const modifyDefaultColumnValueScriptDtos = getModifiedDefaultColumnValueScriptDtos({
299+
ddlProvider,
300+
collection,
301+
});
297302

298303
return [
299304
...renameColumnScriptDtos,
300305
...updateTypeScriptDtos,
301306
...modifyNotNullScriptDtos,
302307
...modifyCommentScriptDtos,
308+
...modifyDefaultColumnValueScriptDtos,
303309
].filter(Boolean);
304310
};
305311

forward_engineering/alterScript/alterScriptHelpers/alterRelationshipsHelper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const getRelationshipName = relationship => {
1313
* @return {(relationship: AlterRelationshipDto) => string}
1414
* */
1515
const getFullChildTableName = _ => relationship => {
16-
const { getNamePrefixedWithSchemaName } = require('../../utils/general')(_);
16+
const { getNamePrefixedWithSchemaName } = require('../../utils/general');
1717
const compMod = relationship.role.compMod;
1818

1919
const childBucketName = compMod.child.bucket.name;
@@ -88,7 +88,7 @@ const getAddForeignKeyScriptDtos = (ddlProvider, _) => addedRelationships => {
8888
* }}
8989
* */
9090
const getDeleteSingleForeignKeyStatementDto = (ddlProvider, _) => relationship => {
91-
const { wrapInQuotes } = require('../../utils/general')(_);
91+
const { wrapInQuotes } = require('../../utils/general');
9292
const compMod = relationship.role.compMod;
9393

9494
const ddlChildEntityName = getFullChildTableName(_)(relationship);

forward_engineering/alterScript/alterScriptHelpers/alterUdtHelper.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const getDeleteUdtScriptDto = app => udt => {
5353
const _ = app.require('lodash');
5454
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
5555

56-
const { getUdtName, wrapInQuotes } = require('../../utils/general')(_);
56+
const { getUdtName, wrapInQuotes } = require('../../utils/general');
5757

5858
const ddlUdtName = wrapInQuotes(getUdtName(udt));
5959
if (udt.type === 'domain') {
@@ -73,7 +73,7 @@ const getAddColumnToTypeScriptDtos =
7373
udt => {
7474
const _ = app.require('lodash');
7575
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(app);
76-
const { getUdtName, wrapInQuotes } = require('../../utils/general')(_);
76+
const { getUdtName, wrapInQuotes } = require('../../utils/general');
7777
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
7878
const { getDefinitionByReference } = app.require('@hackolade/ddl-fe-utils');
7979

@@ -112,7 +112,7 @@ const getDeleteColumnFromTypeScriptDtos = app => udt => {
112112
const _ = app.require('lodash');
113113
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
114114

115-
const { wrapInQuotes } = require('../../utils/general')(_);
115+
const { wrapInQuotes } = require('../../utils/general');
116116

117117
const fullName = wrapInQuotes(udt.code || udt.name);
118118

@@ -130,7 +130,7 @@ const getModifyColumnOfTypeScriptDtos = app => udt => {
130130
const _ = app.require('lodash');
131131
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
132132

133-
const { checkFieldPropertiesChanged, wrapInQuotes } = require('../../utils/general')(_);
133+
const { checkFieldPropertiesChanged, wrapInQuotes } = require('../../utils/general');
134134

135135
const fullName = wrapInQuotes(udt.code || udt.name);
136136

forward_engineering/alterScript/alterScriptHelpers/alterViewHelper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const getAddViewScriptDto = app => view => {
2424
const getDeleteViewScriptDto = app => view => {
2525
const _ = app.require('lodash');
2626
const ddlProvider = require('../../ddlProvider/ddlProvider')(null, null, app);
27-
const { wrapInQuotes } = require('../../utils/general')(_);
27+
const { wrapInQuotes } = require('../../utils/general');
2828
const viewName = wrapInQuotes(view.code || view.name);
2929

3030
const script = ddlProvider.dropView(viewName);

forward_engineering/alterScript/alterScriptHelpers/columnHelpers/alterTypeHelper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const hasPrecisionOrScaleChanged = (collection, oldFieldName, currentJsonSchema)
2929
* @return {(collection: Object) => AlterScriptDto[]}
3030
* */
3131
const getUpdateTypesScriptDtos = (_, ddlProvider) => collection => {
32-
const { checkFieldPropertiesChanged, getFullTableName, wrapInQuotes } = require('../../../utils/general')(_);
32+
const { checkFieldPropertiesChanged, getFullTableName, wrapInQuotes } = require('../../../utils/general');
3333
const fullTableName = getFullTableName(collection);
3434

3535
return _.toPairs(collection.properties)

forward_engineering/alterScript/alterScriptHelpers/columnHelpers/commentsHelper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { AlterScriptDto } = require('../../types/AlterScriptDto');
44
* @return {(collection: Object) => AlterScriptDto[]}
55
* */
66
const getUpdatedCommentOnColumnScriptDtos = (_, ddlProvider) => collection => {
7-
const { getFullColumnName, wrapComment } = require('../../../utils/general')(_);
7+
const { getFullColumnName, wrapComment } = require('../../../utils/general');
88
return _.toPairs(collection.properties)
99
.filter(([name, jsonSchema]) => {
1010
const newComment = jsonSchema.description;
@@ -25,7 +25,7 @@ const getUpdatedCommentOnColumnScriptDtos = (_, ddlProvider) => collection => {
2525
* @return {(collection: Object) => AlterScriptDto[]}
2626
* */
2727
const getDeletedCommentOnColumnScriptDtos = (_, ddlProvider) => collection => {
28-
const { getFullColumnName } = require('../../../utils/general')(_);
28+
const { getFullColumnName } = require('../../../utils/general');
2929

3030
return _.toPairs(collection.properties)
3131
.filter(([name, jsonSchema]) => {
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
const { toPairs } = require('lodash');
2+
const { AlterScriptDto } = require('../../types/AlterScriptDto');
3+
const { getFullTableName, wrapInQuotes, wrapInSingleQuotes } = require('../../../utils/general');
4+
5+
/**
6+
* @param { ({ ddlProvider: Object, collection: Object }) }
7+
* @returns { Array<AlterScriptDto> }
8+
* */
9+
const getUpdatedDefaultColumnValueScriptDtos = ({ ddlProvider, collection }) =>
10+
toPairs(collection.properties)
11+
.filter(([_name, jsonSchema]) => {
12+
const newDefault = jsonSchema.default;
13+
const oldName = jsonSchema.compMod.oldField.name;
14+
const oldDefault = collection.role.properties[oldName]?.default;
15+
return newDefault !== undefined && (!oldDefault || newDefault !== oldDefault);
16+
})
17+
.map(([columnName, jsonSchema]) => {
18+
const newDefaultValue = jsonSchema.default;
19+
const scriptGenerationConfig = {
20+
tableName: getFullTableName(collection),
21+
columnName: wrapInQuotes(columnName),
22+
defaultValue: wrapInSingleQuotes({ name: newDefaultValue }),
23+
};
24+
return ddlProvider.updateColumnDefaultValue(scriptGenerationConfig);
25+
})
26+
.map(script => AlterScriptDto.getInstance([script], true, false))
27+
.filter(Boolean);
28+
29+
/**
30+
* @param { ({ ddlProvider: Object, collection: Object }) }
31+
* @returns { Array<AlterScriptDto> }
32+
* */
33+
const getDeletedDefaultColumnValueScriptDtos = ({ ddlProvider, collection }) =>
34+
toPairs(collection.properties)
35+
.filter(([_name, jsonSchema]) => {
36+
const newDefault = jsonSchema.default;
37+
const oldName = jsonSchema.compMod.oldField.name;
38+
const oldDefault = collection.role.properties[oldName]?.default;
39+
const hasPrevValue = oldDefault !== undefined;
40+
const hasNewValue = newDefault !== undefined;
41+
return hasPrevValue && !hasNewValue;
42+
})
43+
.map(([columnName]) => {
44+
const scriptGenerationConfig = {
45+
tableName: getFullTableName(collection),
46+
columnName: wrapInQuotes(columnName),
47+
};
48+
return ddlProvider.dropColumnDefaultValue(scriptGenerationConfig);
49+
})
50+
.map(script => AlterScriptDto.getInstance([script], true, true))
51+
.filter(Boolean);
52+
53+
/**
54+
* @param { ({ ddlProvider: Object, collection: Object }) }
55+
* @returns { Array<AlterScriptDto> }
56+
* */
57+
const getModifiedDefaultColumnValueScriptDtos = ({ ddlProvider, collection }) => {
58+
const updatedDefaultValuesScriptDtos = getUpdatedDefaultColumnValueScriptDtos({ ddlProvider, collection });
59+
const dropDefaultValuesScriptDtos = getDeletedDefaultColumnValueScriptDtos({ ddlProvider, collection });
60+
return [...updatedDefaultValuesScriptDtos, ...dropDefaultValuesScriptDtos];
61+
};
62+
63+
module.exports = {
64+
getModifiedDefaultColumnValueScriptDtos,
65+
};

forward_engineering/alterScript/alterScriptHelpers/columnHelpers/nonNullConstraintHelper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const { AlterScriptDto } = require('../../types/AlterScriptDto');
44
* @return {(collection: Object) => AlterScriptDto[]}
55
* */
66
const getModifyNonNullColumnsScriptDtos = (_, ddlProvider) => collection => {
7-
const { getFullTableName, wrapInQuotes } = require('../../../utils/general')(_);
7+
const { getFullTableName, wrapInQuotes } = require('../../../utils/general');
88
const fullTableName = getFullTableName(collection);
99

1010
const currentRequiredColumnNames = collection.required || [];

0 commit comments

Comments
 (0)