Skip to content

Commit 134ee69

Browse files
committed
Merge commit 'refs/pull/24/head' of https://github.com/hackolade/PostgreSQL
2 parents a3527f4 + 361f7ee commit 134ee69

File tree

7 files changed

+215
-207
lines changed

7 files changed

+215
-207
lines changed

forward_engineering/api.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,33 @@ module.exports = {
2121
);
2222
}
2323

24+
const modelDefinitions = JSON.parse(data.modelDefinitions);
25+
const internalDefinitions = JSON.parse(data.internalDefinitions);
26+
const externalDefinitions = JSON.parse(data.externalDefinitions);
2427
const dbVersion = data.modelData[0]?.dbVersion;
2528
const containersScripts = getAlterContainersScripts(collection);
26-
const collectionsScripts = getAlterCollectionsScripts(collection, app, dbVersion);
29+
const collectionsScripts = getAlterCollectionsScripts({
30+
collection,
31+
app,
32+
dbVersion,
33+
modelDefinitions,
34+
internalDefinitions,
35+
externalDefinitions,
36+
});
2737
const viewScripts = getAlterViewScripts(collection, app);
28-
const modelDefinitionsScripts = getAlterModelDefinitionsScripts(collection, app);
38+
const modelDefinitionsScripts = getAlterModelDefinitionsScripts({
39+
collection,
40+
app,
41+
dbVersion,
42+
modelDefinitions,
43+
internalDefinitions,
44+
externalDefinitions,
45+
});
2946
const script = [
3047
...containersScripts,
48+
...modelDefinitionsScripts,
3149
...collectionsScripts,
3250
...viewScripts,
33-
...modelDefinitionsScripts,
3451
].join('\n\n');
3552

3653
const applyDropStatements = data.options?.additionalOptions?.some(
@@ -50,6 +67,7 @@ module.exports = {
5067
generateContainerScript(data, logger, callback, app) {
5168
try {
5269
data.jsonSchema = data.collections[0];
70+
data.internalDefinitions = Object.values(data.internalDefinitions)[0];
5371
this.generateScript(data, logger, callback, app);
5472
} catch (error) {
5573
logger.log('error', { message: error.message, stack: error.stack }, 'PostgreSQL Forward-Engineering Error');

forward_engineering/ddlProvider.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ module.exports = (baseProvider, options, app) => {
481481
};
482482
},
483483

484-
hydrateColumn({ columnDefinition, jsonSchema, schemaData, definitionJsonSchema }) {
484+
hydrateColumn({ columnDefinition, jsonSchema, schemaData, definitionJsonSchema = {} }) {
485485
const collationRule = _.includes(['char', 'varchar', 'text'], columnDefinition.type)
486486
? jsonSchema.collationRule
487487
: '';

forward_engineering/helpers/alterScriptFromDeltaHelper.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,20 @@ const getAlterContainersScripts = collection => {
3737
return [].concat(addContainersScripts).concat(deleteContainersScripts);
3838
};
3939

40-
const getAlterCollectionsScripts = (collection, app, dbVersion) => {
40+
const getAlterCollectionsScripts = ({
41+
collection,
42+
app,
43+
dbVersion,
44+
modelDefinitions,
45+
internalDefinitions,
46+
externalDefinitions,
47+
}) => {
4148
const createCollectionsScripts = []
4249
.concat(collection.properties?.entities?.properties?.added?.items)
4350
.filter(Boolean)
4451
.map(item => Object.values(item.properties)[0])
4552
.filter(collection => collection.compMod?.created)
46-
.map(getAddCollectionScript(app, dbVersion));
53+
.map(getAddCollectionScript({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }));
4754
const deleteCollectionScripts = []
4855
.concat(collection.properties?.entities?.properties?.deleted?.items)
4956
.filter(Boolean)
@@ -55,7 +62,7 @@ const getAlterCollectionsScripts = (collection, app, dbVersion) => {
5562
.filter(Boolean)
5663
.map(item => Object.values(item.properties)[0])
5764
.filter(collection => !collection.compMod)
58-
.flatMap(getAddColumnScript(app));
65+
.flatMap(getAddColumnScript({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }));
5966
const deleteColumnScripts = []
6067
.concat(collection.properties?.entities?.properties?.deleted?.items)
6168
.filter(Boolean)
@@ -97,14 +104,21 @@ const getAlterViewScripts = (collection, app) => {
97104
return [...deleteViewsScripts, ...createViewsScripts].map(script => script.trim());
98105
};
99106

100-
const getAlterModelDefinitionsScripts = (collection, app, dbVersion) => {
107+
const getAlterModelDefinitionsScripts = ({
108+
collection,
109+
app,
110+
dbVersion,
111+
modelDefinitions,
112+
internalDefinitions,
113+
externalDefinitions,
114+
}) => {
101115
const createUdtScripts = []
102116
.concat(collection.properties?.modelDefinitions?.properties?.added?.items)
103117
.filter(Boolean)
104118
.map(item => Object.values(item.properties)[0])
105119
.map(item => ({ ...item, ...(app.require('lodash').omit(item.role, 'properties') || {}) }))
106120
.filter(item => item.compMod?.created)
107-
.map(getCreateUdtScript(app, dbVersion));
121+
.map(getCreateUdtScript({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }));
108122
const deleteUdtScripts = []
109123
.concat(collection.properties?.modelDefinitions?.properties?.deleted?.items)
110124
.filter(Boolean)
@@ -119,7 +133,9 @@ const getAlterModelDefinitionsScripts = (collection, app, dbVersion) => {
119133
.filter(item => !item.compMod)
120134
.map(item => ({ ...item, ...(app.require('lodash').omit(item.role, 'properties') || {}) }))
121135
.filter(item => item.childType === 'composite')
122-
.flatMap(getAddColumnToTypeScript(app));
136+
.flatMap(
137+
getAddColumnToTypeScript({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }),
138+
);
123139
const deleteColumnScripts = []
124140
.concat(collection.properties?.modelDefinitions?.properties?.deleted?.items)
125141
.filter(Boolean)
@@ -144,7 +160,9 @@ const getAlterModelDefinitionsScripts = (collection, app, dbVersion) => {
144160
...addColumnScripts,
145161
...deleteColumnScripts,
146162
...modifyColumnScripts,
147-
].map(script => script.trim());
163+
]
164+
.filter(Boolean)
165+
.map(script => script.trim());
148166
};
149167

150168
module.exports = {

forward_engineering/helpers/alterScriptHelpers/alterEntityHelper.js

Lines changed: 80 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,49 @@
11
const { checkFieldPropertiesChanged } = require('./common');
22

3-
const getAddCollectionScript = (app, dbVersion) => collection => {
4-
const _ = app.require('lodash');
5-
const { getEntityName } = require('../../utils/general')(_);
6-
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(_);
7-
const ddlProvider = require('../../ddlProvider')(null, null, app);
8-
9-
const schemaName = collection.compMod.keyspaceName;
10-
const schemaData = { schemaName, dbVersion };
11-
const jsonSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) };
12-
const columnDefinitions = _.toPairs(jsonSchema.properties).map(([name, column]) =>
13-
createColumnDefinitionBySchema({
14-
name,
15-
jsonSchema: column,
16-
parentJsonSchema: jsonSchema,
17-
ddlProvider,
3+
const getAddCollectionScript =
4+
({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }) =>
5+
collection => {
6+
const _ = app.require('lodash');
7+
const { getEntityName } = require('../../utils/general')(_);
8+
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(app);
9+
const ddlProvider = require('../../ddlProvider')(null, null, app);
10+
const { getDefinitionByReference } = app.require('@hackolade/ddl-fe-utils');
11+
12+
const schemaName = collection.compMod.keyspaceName;
13+
const schemaData = { schemaName, dbVersion };
14+
const jsonSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) };
15+
const columnDefinitions = _.toPairs(jsonSchema.properties).map(([name, column]) => {
16+
const definitionJsonSchema = getDefinitionByReference({
17+
propertySchema: column,
18+
modelDefinitions,
19+
internalDefinitions,
20+
externalDefinitions,
21+
});
22+
23+
return createColumnDefinitionBySchema({
24+
name,
25+
jsonSchema: column,
26+
parentJsonSchema: jsonSchema,
27+
ddlProvider,
28+
schemaData,
29+
definitionJsonSchema,
30+
});
31+
});
32+
const checkConstraints = (jsonSchema.chkConstr || []).map(check =>
33+
ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check)),
34+
);
35+
const tableData = {
36+
name: getEntityName(jsonSchema),
37+
columns: columnDefinitions.map(ddlProvider.convertColumnDefinition),
38+
checkConstraints: checkConstraints,
39+
foreignKeyConstraints: [],
1840
schemaData,
19-
}),
20-
);
21-
const checkConstraints = (jsonSchema.chkConstr || []).map(check =>
22-
ddlProvider.createCheckConstraint(ddlProvider.hydrateCheckConstraint(check)),
23-
);
24-
const tableData = {
25-
name: getEntityName(jsonSchema),
26-
columns: columnDefinitions.map(ddlProvider.convertColumnDefinition),
27-
checkConstraints: checkConstraints,
28-
foreignKeyConstraints: [],
29-
schemaData,
30-
columnDefinitions,
31-
};
32-
const hydratedTable = ddlProvider.hydrateTable({ tableData, entityData: [jsonSchema], jsonSchema });
41+
columnDefinitions,
42+
};
43+
const hydratedTable = ddlProvider.hydrateTable({ tableData, entityData: [jsonSchema], jsonSchema });
3344

34-
return ddlProvider.createTable(hydratedTable, jsonSchema.isActivated);
35-
};
45+
return ddlProvider.createTable(hydratedTable, jsonSchema.isActivated);
46+
};
3647

3748
const getDeleteCollectionScript = app => collection => {
3849
const _ = app.require('lodash');
@@ -47,33 +58,44 @@ const getDeleteCollectionScript = app => collection => {
4758
return `DROP TABLE IF EXISTS ${fullName};`;
4859
};
4960

50-
const getAddColumnScript = (app, dbVersion) => collection => {
51-
const _ = app.require('lodash');
52-
const { getEntityName } = require('../../utils/general')(_);
53-
const { getNamePrefixedWithSchemaName } = require('../general')({ _ });
54-
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(_);
55-
const ddlProvider = require('../../ddlProvider')(null, null, app);
56-
57-
const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) };
58-
const tableName = getEntityName(collectionSchema);
59-
const schemaName = collectionSchema.compMod?.keyspaceName;
60-
const fullName = getNamePrefixedWithSchemaName(tableName, schemaName);
61-
const schemaData = { schemaName, dbVersion };
62-
63-
return _.toPairs(collection.properties)
64-
.filter(([name, jsonSchema]) => !jsonSchema.compMod)
65-
.map(([name, jsonSchema]) =>
66-
createColumnDefinitionBySchema({
67-
name,
68-
jsonSchema,
69-
parentJsonSchema: collectionSchema,
70-
ddlProvider,
71-
schemaData,
72-
}),
73-
)
74-
.map(ddlProvider.convertColumnDefinition)
75-
.map(script => `ALTER TABLE IF EXISTS ${fullName} ADD COLUMN IF NOT EXISTS ${script};`);
76-
};
61+
const getAddColumnScript =
62+
({ app, dbVersion, modelDefinitions, internalDefinitions, externalDefinitions }) =>
63+
collection => {
64+
const _ = app.require('lodash');
65+
const { getEntityName } = require('../../utils/general')(_);
66+
const { getNamePrefixedWithSchemaName } = require('../general')({ _ });
67+
const { createColumnDefinitionBySchema } = require('./createColumnDefinition')(app);
68+
const ddlProvider = require('../../ddlProvider')(null, null, app);
69+
const { getDefinitionByReference } = app.require('@hackolade/ddl-fe-utils');
70+
71+
const collectionSchema = { ...collection, ...(_.omit(collection?.role, 'properties') || {}) };
72+
const tableName = getEntityName(collectionSchema);
73+
const schemaName = collectionSchema.compMod?.keyspaceName;
74+
const fullName = getNamePrefixedWithSchemaName(tableName, schemaName);
75+
const schemaData = { schemaName, dbVersion };
76+
77+
return _.toPairs(collection.properties)
78+
.filter(([name, jsonSchema]) => !jsonSchema.compMod)
79+
.map(([name, jsonSchema]) => {
80+
const definitionJsonSchema = getDefinitionByReference({
81+
propertySchema: jsonSchema,
82+
modelDefinitions,
83+
internalDefinitions,
84+
externalDefinitions,
85+
});
86+
87+
return createColumnDefinitionBySchema({
88+
name,
89+
jsonSchema,
90+
parentJsonSchema: collectionSchema,
91+
ddlProvider,
92+
schemaData,
93+
definitionJsonSchema,
94+
});
95+
})
96+
.map(ddlProvider.convertColumnDefinition)
97+
.map(script => `ALTER TABLE IF EXISTS ${fullName} ADD COLUMN IF NOT EXISTS ${script};`);
98+
};
7799

78100
const getDeleteColumnScript = app => collection => {
79101
const _ = app.require('lodash');

0 commit comments

Comments
 (0)