Skip to content

Commit 3ac7625

Browse files
authored
Merge pull request #56 from Vitalii4as/fix/HCK-3441
RE: add possibility to ignore functions. procedures and triggers
2 parents 1e2de9d + 452379f commit 3ac7625

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

reverse_engineering/api.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,11 @@ module.exports = {
130130
collections[schemaName],
131131
data.recordSamplingSettings,
132132
data.includePartitions,
133+
data.ignoreUdfUdpTriggers,
133134
);
134135
const { functions, procedures, triggers } = await postgresService.retrieveSchemaLevelData(
135136
schemaName,
137+
data.ignoreUdfUdpTriggers,
136138
);
137139

138140
postgresLogger.progress('Schema reversed successfully', schemaName);

reverse_engineering/config.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
"inputLabel": "Include partitions",
2121
"inputTooltip": "Reverse-engineer all partitions as tables",
2222
"inputKeyword": "includePartitions"
23+
},
24+
{
25+
"inputLabel": "Ignore Functions, Procedures and Triggers",
26+
"inputTooltip": "Ignore reverse-engineering of function, procedures and triggers",
27+
"inputKeyword": "ignoreUdfUdpTriggers"
2328
}
2429
]
2530
}

reverse_engineering/helpers/postgresService.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,13 @@ module.exports = {
143143
});
144144
},
145145

146-
async retrieveEntitiesData(schemaName, entitiesNames, recordSamplingSettings, includePartitions = false) {
146+
async retrieveEntitiesData(
147+
schemaName,
148+
entitiesNames,
149+
recordSamplingSettings,
150+
includePartitions = false,
151+
ignoreUdfUdpTriggers = false,
152+
) {
147153
const userDefinedTypes = await this._retrieveUserDefinedTypes(schemaName);
148154
const schemaOidResult = await db.queryTolerant(queryConstants.GET_NAMESPACE_OID, [schemaName], true);
149155
const schemaOid = schemaOidResult?.oid;
@@ -168,15 +174,25 @@ module.exports = {
168174
schemaOid,
169175
schemaName,
170176
userDefinedTypes,
177+
ignoreUdfUdpTriggers,
171178
),
172179
);
173180

174-
const views = await mapPromises(viewsNames, _.bind(this._retrieveSingleViewData, this, schemaOid, schemaName));
181+
const views = await mapPromises(
182+
viewsNames,
183+
_.bind(this._retrieveSingleViewData, this, schemaOid, schemaName, ignoreUdfUdpTriggers),
184+
);
175185

176186
return { views, tables, modelDefinitions: getJsonSchema(userDefinedTypes) };
177187
},
178188

179-
async retrieveSchemaLevelData(schemaName) {
189+
async retrieveSchemaLevelData(schemaName, ignoreUdfUdpTriggers) {
190+
if (ignoreUdfUdpTriggers) {
191+
logger.info('Functions and procedures ignored');
192+
193+
return { functions: [], procedures: [] };
194+
}
195+
180196
logger.progress('Get Functions and Procedures', schemaName);
181197

182198
const schemaOid = (await db.queryTolerant(queryConstants.GET_NAMESPACE_OID, [schemaName], true))?.oid;
@@ -245,6 +261,7 @@ module.exports = {
245261
schemaOid,
246262
schemaName,
247263
userDefinedTypes,
264+
ignoreUdfUdpTriggers,
248265
{ tableName, isParentPartitioned },
249266
) {
250267
logger.progress('Get table data', schemaName, tableName);
@@ -268,11 +285,7 @@ module.exports = {
268285
const tableConstraintsResult = await db.queryTolerant(queryConstants.GET_TABLE_CONSTRAINTS, [tableOid]);
269286
const tableIndexesResult = await db.queryTolerant(getGetIndexesQuery(version), [tableOid]);
270287
const tableForeignKeys = await db.queryTolerant(queryConstants.GET_TABLE_FOREIGN_KEYS, [tableOid]);
271-
const triggersData = await db.queryTolerant(queryConstants.GET_TRIGGERS, [schemaName, tableName]);
272-
const triggersAdditionalData = await db.queryTolerant(queryConstants.GET_TRIGGERS_ADDITIONAL_DATA, [
273-
schemaOid,
274-
tableOid,
275-
]);
288+
const triggers = await this._getTriggers(schemaName, tableName, schemaOid, tableOid, ignoreUdfUdpTriggers);
276289

277290
const partitioning = prepareTablePartition(partitionResult, tableColumns);
278291
const tableLevelProperties = prepareTableLevelData(tableLevelData, tableToastOptions);
@@ -281,7 +294,6 @@ module.exports = {
281294
const tableConstraint = prepareTableConstraints(tableConstraintsResult, tableColumns, tableIndexesResult);
282295
const tableIndexes = prepareTableIndexes(tableIndexesResult);
283296
const relationships = prepareForeignKeys(tableForeignKeys, tableName, schemaName, tableColumns);
284-
const triggers = getTriggers(triggersData, triggersAdditionalData);
285297

286298
const tableData = {
287299
partitioning,
@@ -316,6 +328,22 @@ module.exports = {
316328
};
317329
},
318330

331+
async _getTriggers(schemaName, objectName, schemaOid, objectOid, ignoreUdfUdpTriggers) {
332+
if (ignoreUdfUdpTriggers) {
333+
logger.info('Triggers ignored');
334+
335+
return [];
336+
}
337+
338+
const triggersData = await db.queryTolerant(queryConstants.GET_TRIGGERS, [schemaName, objectName]);
339+
const triggersAdditionalData = await db.queryTolerant(queryConstants.GET_TRIGGERS_ADDITIONAL_DATA, [
340+
schemaOid,
341+
objectOid,
342+
]);
343+
344+
return getTriggers(triggersData, triggersAdditionalData);
345+
},
346+
319347
async _getTableColumns(tableName, schemaName, tableOid) {
320348
logger.progress('Get columns', schemaName, tableName);
321349

@@ -349,7 +377,7 @@ module.exports = {
349377
return await db.queryTolerant(queryConstants.GET_SAMPLED_DATA(fullTableName, jsonColumns), [limit]);
350378
},
351379

352-
async _retrieveSingleViewData(schemaOid, schemaName, viewName) {
380+
async _retrieveSingleViewData(schemaOid, schemaName, ignoreUdfUdpTriggers, viewName) {
353381
logger.progress('Get view data', schemaName, viewName);
354382

355383
viewName = removeViewNameSuffix(viewName);
@@ -359,12 +387,13 @@ module.exports = {
359387
!viewData.view_definition &&
360388
(await db.queryTolerant(queryConstants.GET_VIEW_SELECT_STMT_FALLBACK, [viewName, schemaName], true));
361389
const viewOptions = await db.queryTolerant(queryConstants.GET_VIEW_OPTIONS, [viewName, schemaOid], true);
362-
const triggersData = await db.queryTolerant(queryConstants.GET_TRIGGERS, [schemaName, viewName]);
363-
const triggersAdditionalData = await db.queryTolerant(queryConstants.GET_TRIGGERS_ADDITIONAL_DATA, [
390+
const triggers = await this._getTriggers(
391+
schemaName,
392+
viewName,
364393
schemaOid,
365394
viewOptions?.oid,
366-
]);
367-
const triggers = getTriggers(triggersData, triggersAdditionalData);
395+
ignoreUdfUdpTriggers,
396+
);
368397

369398
const script = generateCreateViewScript(viewName, viewData, viewDefinitionFallback);
370399
const data = prepareViewData(viewData, viewOptions, triggers);

0 commit comments

Comments
 (0)