Skip to content

Commit e216629

Browse files
Feature/hck 4566 bbva sequences definition for postgresql re fro (#91)
* RE: add handling of schema sequences * FE: add alter script generation for modified schema sequences * FE: FE: add alter script generation for deleted schema sequences * FE: FE: add alter script generation for added schema sequences * FE: define types for sequence helper * FE: fix changing of sequence type * FE: add schema name for sequence owned by option column name * RE: fix duplicating of sequences in SELECT query * RE: update passing arguments in functions * Add missed types * RE: fix incorrect argument passing
1 parent c0c0417 commit e216629

File tree

11 files changed

+497
-63
lines changed

11 files changed

+497
-63
lines changed

forward_engineering/alterScript/alterScriptFromDeltaHelper.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const {
3131
const {AlterScriptDto, ModificationScript} = require("./types/AlterScriptDto");
3232
const {App, CoreData} = require("../types/coreApplicationTypes");
3333
const {InternalDefinitions, ModelDefinitions, ExternalDefinitions} = require("../types/coreApplicationDataTypes");
34+
const { getModifyContainerSequencesScriptDtos, getDeleteContainerSequencesScriptDtos, getAddContainerSequencesScriptDtos } = require('./alterScriptHelpers/containerHelpers/sequencesHelper');
3435

3536

3637
/**
@@ -300,6 +301,41 @@ const prettifyAlterScriptDto = (dto) => {
300301
}
301302
}
302303

304+
/**
305+
* @param {{
306+
* collection: Object,
307+
* app: App,
308+
* }} dto
309+
* @return {AlterScriptDto[]}
310+
* */
311+
const getAlterContainersSequencesScriptDtos = ({ collection, app }) => {
312+
const addedContainers = collection.properties?.containers?.properties?.added?.items;
313+
const deletedContainers = collection.properties?.containers?.properties?.deleted?.items;
314+
const modifiedContainers = collection.properties?.containers?.properties?.modified?.items;
315+
316+
const addContainersSequencesScriptDtos = []
317+
.concat(addedContainers)
318+
.filter(Boolean)
319+
.map(container => Object.values(container.properties)[0])
320+
.flatMap(container => getAddContainerSequencesScriptDtos({ app })({ container }))
321+
const deleteContainersScriptDtos = []
322+
.concat(deletedContainers)
323+
.filter(Boolean)
324+
.map(container => Object.values(container.properties)[0])
325+
.flatMap(container => getDeleteContainerSequencesScriptDtos({ app })({ container }))
326+
const modifyContainersScriptDtos = []
327+
.concat(modifiedContainers)
328+
.filter(Boolean)
329+
.map(container => Object.values(container.properties)[0])
330+
.flatMap(container => getModifyContainerSequencesScriptDtos({ app })({ container }))
331+
332+
return [
333+
...addContainersSequencesScriptDtos,
334+
...deleteContainersScriptDtos,
335+
...modifyContainersScriptDtos,
336+
].filter(Boolean);
337+
};
338+
303339
/**
304340
* @param data {CoreData}
305341
* @param app {App}
@@ -336,11 +372,13 @@ const getAlterScriptDtos = (data, app) => {
336372
externalDefinitions,
337373
});
338374
const relationshipScriptDtos = getAlterRelationshipsScriptDtos({collection, app});
375+
const containersSequencesScriptDtos = getAlterContainersSequencesScriptDtos({collection, app});
339376

340377
return [
341378
...containersScriptDtos,
342379
...modelDefinitionsScriptDtos,
343380
...collectionsScriptDtos,
381+
...containersSequencesScriptDtos,
344382
...viewScriptDtos,
345383
...relationshipScriptDtos,
346384
]
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
const { AlterScriptDto } = require('../../types/AlterScriptDto');
2+
const { App } = require('../../../types/coreApplicationTypes');
3+
const sequencesCompModKey = 'sequences';
4+
5+
/**
6+
* @param {{ app: App }}
7+
* @return {({ container }: { container: object }) => AlterScriptDto[]}
8+
* */
9+
const getAddContainerSequencesScriptDtos = ({ app }) => ({ container }) => {
10+
const _ = app.require('lodash');
11+
const ddlProvider = require('../../../ddlProvider')(null, null, app);
12+
const { getDbName } = require('../../../utils/general')(_);
13+
const schemaName = getDbName([container.role]);
14+
15+
return (container.role?.sequences || [])
16+
.map((sequence) => ddlProvider.createSchemaSequence({ schemaName, sequence }))
17+
.map((script) => AlterScriptDto.getInstance([script], true, false))
18+
.filter(Boolean);
19+
};
20+
21+
/**
22+
* @param {{ app: App }}
23+
* @return {({ container }: { container: object }) => AlterScriptDto[]}
24+
* */
25+
const getModifyContainerSequencesScriptDtos = ({ app }) => ({ container }) => {
26+
const _ = app.require('lodash');
27+
const ddlProvider = require('../../../ddlProvider')(null, null, app);
28+
const { getDbName, getGroupItemsByCompMode } = require('../../../utils/general')(_);
29+
30+
const schemaName = getDbName([container.role]);
31+
const sequencesCompMod = container.role?.compMod?.[sequencesCompModKey] || {};
32+
const { new: newItems = [], old: oldItems = [] } = sequencesCompMod;
33+
34+
const { removed, added, modified } = getGroupItemsByCompMode({
35+
newItems,
36+
oldItems,
37+
});
38+
39+
const removedScriptDtos = removed
40+
.map((sequence) => {
41+
return ddlProvider.dropSchemaSequence({ schemaName, sequence });
42+
})
43+
.map((script) => AlterScriptDto.getInstance([script], true, true));
44+
const addedScriptDtos = added
45+
.map((sequence) =>
46+
ddlProvider.createSchemaSequence({ schemaName, sequence })
47+
)
48+
.map((script) => AlterScriptDto.getInstance([script], true, false));
49+
50+
const modifiedScriptDtos = modified
51+
.map((sequence) => {
52+
const oldSequence = _.find(oldItems, { id: sequence.id }) || {};
53+
return ddlProvider.alterSchemaSequence({
54+
schemaName,
55+
sequence,
56+
oldSequence,
57+
});
58+
})
59+
.map((script) => AlterScriptDto.getInstance([script], true, false));
60+
61+
return [
62+
...modifiedScriptDtos,
63+
...removedScriptDtos,
64+
...addedScriptDtos,
65+
].filter(Boolean);
66+
};
67+
68+
/**
69+
* @param {{ app: App }}
70+
* @return {({ container }: { container: object }) => AlterScriptDto[]}
71+
* */
72+
const getDeleteContainerSequencesScriptDtos = ({ app }) => ({ container }) => {
73+
const _ = app.require('lodash');
74+
const ddlProvider = require('../../../ddlProvider')(null, null, app);
75+
const { getDbName } = require('../../../utils/general')(_);
76+
const schemaName = getDbName([container.role]);
77+
78+
return (container.role?.sequences || [])
79+
.map((sequence) => ddlProvider.dropSchemaSequence({ schemaName, sequence }))
80+
.map((script) => AlterScriptDto.getInstance([script], true, true))
81+
.filter(Boolean);
82+
};
83+
84+
module.exports = {
85+
getAddContainerSequencesScriptDtos,
86+
getModifyContainerSequencesScriptDtos,
87+
getDeleteContainerSequencesScriptDtos,
88+
};

0 commit comments

Comments
 (0)