Skip to content

Commit c0ec66d

Browse files
authored
Merge pull request #96 from DrMyroslav/HCK-2571-hackolade-compare-and-forward-processing-drop-of-column-in-solr
HCK-2571: add filter complex type list udt
2 parents 740c220 + 665d2c2 commit c0ec66d

File tree

6 files changed

+195
-72
lines changed

6 files changed

+195
-72
lines changed

forward_engineering/helpers/schemaHelper.js

+25-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
11
'use strict'
22

3+
const attributesForReturn = ['isActivated', 'type', 'compositePartitionKey'];
4+
5+
const getAttributes = (field = {}) => {
6+
return attributesForReturn.reduce((fieldAttributes, attribute) => {
7+
if (!field.hasOwnProperty(attribute) || field[attribute] === undefined) {
8+
return fieldAttributes
9+
}
10+
11+
return {
12+
...fieldAttributes,
13+
[attribute]: field[attribute],
14+
}
15+
}, {});
16+
};
17+
318
const getPathById = (schema, id, path) => {
4-
if (schema.GUID === id) {
19+
if (schema.GUID === id || schema.id === id) {
520
return path;
621
}
722

@@ -10,7 +25,8 @@ const getPathById = (schema, id, path) => {
1025
if (newPath) {
1126
return newPath;
1227
} else {
13-
return getPathById(schema.properties[propertyName], id, [...path, schema.properties[propertyName].GUID]);
28+
const property = schema.properties[propertyName]
29+
return getPathById(property, id, [...path, property.GUID || property.id]);
1430
}
1531
}, undefined);
1632
} else if (schema.items) {
@@ -19,7 +35,7 @@ const getPathById = (schema, id, path) => {
1935
if (newPath) {
2036
return newPath;
2137
} else {
22-
return getPathById(item, id, [...path, item.GUID]);
38+
return getPathById(item, id, [...path, item.GUID || item.id]);
2339
}
2440
}, undefined);
2541
} else {
@@ -29,13 +45,13 @@ const getPathById = (schema, id, path) => {
2945
};
3046

3147
const getRootItemMetadataById = (id, properties) => {
32-
const propertyName = Object.keys(properties).find(propertyName => (properties[propertyName].GUID === id));
48+
const propertyName = Object.keys(properties).find(propertyName => (properties[propertyName].GUID === id || properties[propertyName].id === id));
3349

3450
if (properties[propertyName] && properties[propertyName].code) {
35-
return { name: properties[propertyName].code, isActivated: properties[propertyName].isActivated };
51+
return { name: properties[propertyName].code, ...getAttributes(properties[propertyName]) };
3652
}
3753

38-
return { name: propertyName, isActivated: properties[propertyName] && properties[propertyName].isActivated };
54+
return { name: propertyName, ...getAttributes(properties[propertyName]) };
3955
};
4056

4157
const findFieldMetadataById = (id, source) => {
@@ -51,10 +67,10 @@ const findFieldMetadataById = (id, source) => {
5167
const getAttributesDataByIds = (ids, sources) => {
5268
return ids.reduce((hash, id) => {
5369
for (let i = 0; i < sources.length; i++) {
54-
const { name, isActivated } = findFieldMetadataById(id, sources[i]);
70+
const fieldData = findFieldMetadataById(id, sources[i]);
5571

56-
if (name) {
57-
return Object.assign({}, hash, { [id]: { name, isActivated }});
72+
if (fieldData?.name) {
73+
return Object.assign({}, hash, { [id]: fieldData});
5874
}
5975
}
6076

forward_engineering/helpers/typeHelper.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ const getStructuralTypeHandler = (type, isNeedToBeFrozen, udtTypeMap) => {
8484
const getValueTypeFromArray = (arraySchema, defaultType, udtTypeMap, propertyName) => {
8585
if (arraySchema.items) {
8686
if (Array.isArray(arraySchema.items)) {
87-
return complexType(arraySchema.items[0], isFrozen(arraySchema), 0);
87+
const name = arraySchema.items[0].code || arraySchema.items[0].name;
88+
return complexType(arraySchema.items[0], isFrozen(arraySchema), name || 0);
8889
} else {
8990
return complexType(arraySchema.items, isFrozen(arraySchema), 0);
9091
}

forward_engineering/helpers/udtHelper.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ const getUdtMap = (udtSources) => {
3737
return udtSources.reduce((map, source) => {
3838
eachField(source, (field, fieldName) => {
3939
if (field.type === 'udt') {
40-
map[fieldName] = {
41-
name: getName(fieldName, field),
40+
const name = getName(fieldName, field);
41+
map[name] = {
42+
name,
4243
frozen: field.frozen
4344
};
4445
}

forward_engineering/helpers/updateHelper.js

+47-33
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@ const { mergeArrays, checkIsOldModel, fieldTypeCompatible } = require('./updateH
99
const { getViewScript } = require('./updateHelpers/viewHelper');
1010
const { getIndexTable, getDataColumnIndex } = require('./updateHelpers/indexHelper');
1111
const { getUdtScript, sortAddedUdt } = require('./updateHelpers/udtHelper');
12-
const { alterTablePrefix, getDelete, hydrateColumn, isTableChange, getTableParameter } = require('./updateHelpers/tableHelper');
12+
const {
13+
alterTablePrefix,
14+
getDelete,
15+
hydrateColumn,
16+
isTableChange,
17+
getTableParameter,
18+
addColumnInExistScript,
19+
getAdd,
20+
} = require('./updateHelpers/tableHelper');
21+
const { getUdtMap } = require('./udtHelper');
1322

1423
let _;
1524

@@ -19,19 +28,8 @@ const getUpdateType = updateTypeData =>
1928
`${alterTablePrefix(updateTypeData.tableName, updateTypeData.keySpace)}
2029
ALTER "${updateTypeData.columnData.name}" TYPE ${updateTypeData.columnData.type};`;
2130

22-
const addColumnStatement = columnData => `ADD "${columnData.name}" ${columnData.type}`;
2331
const renameColumnStatement = columnData => `RENAME "${columnData.oldName}" TO "${columnData.newName}"`;
2432

25-
const getAdd = addData => {
26-
const script = `${alterTablePrefix(addData.tableName, addData.keyspaceName)} ${addColumnStatement(addData.columnData)};`;
27-
return [{
28-
deleted: false,
29-
modified: false,
30-
added: true,
31-
script,
32-
field: 'field',
33-
}];
34-
};
3533
const getRenameColumn = renameData => {
3634
const script =
3735
`${alterTablePrefix(renameData.tableName, renameData.keyspaceName)} ${renameColumnStatement(renameData.columnData)};`;
@@ -117,6 +115,7 @@ const getUpdate = updateData => {
117115
} else if (hydratedColumn.isTypeChange) {
118116
return getUpdateColumnProvider.alterType(hydratedColumn);
119117
}
118+
addColumnInExistScript(hydratedColumn.dataForScript);
120119

121120
return [];
122121
};
@@ -168,7 +167,6 @@ const getUpdateTable = updateData => {
168167
const { item, propertiesScript = [] } = updateData;
169168
const { oldName, newName } = getCollectionName(item.role?.compMod);
170169

171-
const indexTableScript = getIndexTable(item, updateData.data);
172170
const compModeWithName = { ...item.role?.compMod || {}, name: { new: newName, old: oldName } }
173171

174172
const tableIsChange = isTableChange({
@@ -177,7 +175,9 @@ const getUpdateTable = updateData => {
177175
role: { ...item.role, compMod: compModeWithName },
178176
},
179177
data: updateData.data,
178+
dataSources: updateData.dataSources,
180179
});
180+
const indexTableScript = getIndexTable(item, updateData.data, tableIsChange);
181181

182182
if (!tableIsChange) {
183183
const tableName = updateData.tableName || oldName || newName;
@@ -210,8 +210,8 @@ const getUpdateTable = updateData => {
210210
tableOptions: getTableParameter(item, 'tableOptions') || {},
211211
}
212212
},
213-
modifiedProperties: item.properties,
214213
isKeyspaceActivated: true,
214+
dataSources: updateData.dataSources,
215215
};
216216
const deleteScript = getDeleteTable({ ...data, tableName: oldName });
217217
const addScript = getAddTable({ ...data, tableName: newName});
@@ -282,22 +282,33 @@ const handleItem = (item, udtMap, generator, data) => {
282282
];
283283
}
284284

285+
const dataSources = [
286+
data.modelDefinitions,
287+
data.internalDefinitions,
288+
data.externalDefinitions,
289+
tableProperties,
290+
{ properties: _.get(itemProperties[tableKey], 'role.properties', [])},
291+
{ properties: _.get(itemProperties[tableKey], 'role.compMod.newProperties', []) },
292+
{ properties: _.get(itemProperties[tableKey], 'role.compMod.oldProperties', []) }
293+
];
294+
285295
if (itemCompModData.created) {
286296
const addedIndexScript = getIndexTable(itemProperties[tableKey], data);
287297
return [
288298
...alterTableScript,
289299
...getAddTable({
290300
item: itemProperties[tableKey],
291-
keyspaceName,
301+
keyspaceName,
292302
data,
293303
tableName,
304+
dataSources,
294305
}),
295306
...addedIndexScript,
296307
];
297308
}
298309

299310
if (itemCompModData.modified) {
300-
const updateTableScript = getUpdateTable({ keyspaceName, data, item: itemProperties[tableKey], isOptionScript: true, tableName });
311+
const updateTableScript = getUpdateTable({ keyspaceName, data, item: itemProperties[tableKey], isOptionScript: true, tableName, dataSources });
301312

302313
return [...alterTableScript, ...updateTableScript];
303314
}
@@ -311,6 +322,7 @@ const handleItem = (item, udtMap, generator, data) => {
311322
tableName,
312323
isOldModel,
313324
data,
325+
dataSources,
314326
});
315327

316328
const updateTableScript = getUpdateTable({
@@ -320,6 +332,7 @@ const handleItem = (item, udtMap, generator, data) => {
320332
keyspaceName,
321333
tableName,
322334
data,
335+
dataSources,
323336
})
324337

325338
return [...alterTableScript, ...updateTableScript];
@@ -329,7 +342,7 @@ const handleItem = (item, udtMap, generator, data) => {
329342
}
330343

331344
const getAddTable = (addTableData) => {
332-
const table = addTableData.item;
345+
let table = addTableData.item;
333346
const data = addTableData.data;
334347
const compositePartitionKey = getTableParameter(table, 'compositePartitionKey') || [];
335348
const compositeClusteringKey = getTableParameter(table, 'compositeClusteringKey') || [];
@@ -343,19 +356,11 @@ const getAddTable = (addTableData) => {
343356
isActivated: table.role.isActivated,
344357
}];
345358

346-
const dataSources = [
347-
data.externalDefinitions,
348-
data.modelDefinitions,
349-
data.internalDefinitions,
350-
table,
351-
{ properties: addTableData.modifiedProperties || [] }
352-
];
353-
354359
const script = getTableStatement({
355360
tableData: table,
356361
tableMetaData: entityData,
357362
keyspaceMetaData: [{ name: addTableData.keyspaceName }],
358-
dataSources,
363+
dataSources: addTableData.dataSources,
359364
udtTypeMap: data.udtTypeMap || {},
360365
isKeyspaceActivated: addTableData.isKeyspaceActivated,
361366
});
@@ -369,13 +374,16 @@ const getAddTable = (addTableData) => {
369374
}];
370375
}
371376

372-
const handleProperties = ({ generator, tableProperties, udtMap, itemCompModData, tableName, isOldModel, data, item }) => {
377+
const handleProperties = ({ generator, tableProperties, udtMap, itemCompModData, tableName, isOldModel, data, item, dataSources }) => {
373378
return Object.keys(tableProperties)
374379
.reduce((alterTableScript, columnName) => {
375380
const property = tableProperties[columnName];
376381
if (generator.name !== 'getUpdate' && (property.compositePartitionKey || property.compositeClusteringKey)) {
377382
return alterTableScript;
378383
}
384+
if (generator.name === 'getAdd' && (property || {}).hasOwnProperty('compMod')) {
385+
return alterTableScript;
386+
}
379387
let columnType = getTypeByData(property, udtMap, columnName);
380388

381389
if (property.$ref && !columnType) {
@@ -405,7 +413,8 @@ const handleProperties = ({ generator, tableProperties, udtMap, itemCompModData,
405413
},
406414
property,
407415
isOldModel,
408-
udtMap
416+
udtMap,
417+
dataSources,
409418
})
410419
];
411420
}, []);
@@ -486,14 +495,14 @@ const getAlterTableScript = (child, udtMap, data) => {
486495
alterScript = mergeArrays(alterScript, getScript(sortAddedUdt(child.modelDefinitions), udtMap, data, 'udt'));
487496
}
488497

489-
if (objectContainsProp(child, 'added')) {
490-
alterScript = mergeArrays(alterScript, handleChange(child.added, udtMap, getAdd, data));
491-
}
492-
493498
if (objectContainsProp(child, 'modified')) {
494499
alterScript = mergeArrays(alterScript, handleChange(child.modified, udtMap, getUpdate, data));
495500
}
496501

502+
if (objectContainsProp(child, 'added')) {
503+
alterScript = mergeArrays(alterScript, handleChange(child.added, udtMap, getAdd, data));
504+
}
505+
497506
if (objectContainsProp(child, 'deleted')) {
498507
alterScript = mergeArrays(alterScript, handleChange(child.deleted, udtMap, getDelete, data));
499508
}
@@ -503,7 +512,12 @@ const getAlterTableScript = (child, udtMap, data) => {
503512

504513
const getAlterScript = (child, udtMap, data) => {
505514
setDependencies(dependencies);
506-
let scriptData = getAlterTableScript(child, udtMap, data);
515+
const generalUdtTypeMap = Object.assign(
516+
{},
517+
udtMap,
518+
getUdtMap([child])
519+
);
520+
let scriptData = getAlterTableScript(child, generalUdtTypeMap, data);
507521
scriptData = _.uniqWith(scriptData, _.isEqual);
508522
scriptData = getCommentedDropScript(scriptData, data);
509523
scriptData = sortScript(scriptData);

0 commit comments

Comments
 (0)