Skip to content

Commit 452379f

Browse files
committed
RE: add possibility to ignore triggers
1 parent 6949497 commit 452379f

File tree

3 files changed

+43
-19
lines changed

3 files changed

+43
-19
lines changed

reverse_engineering/api.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,10 +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,
136-
data.ignoreUdfUdp,
137+
data.ignoreUdfUdpTriggers,
137138
);
138139

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

reverse_engineering/config.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
"inputKeyword": "includePartitions"
2323
},
2424
{
25-
"inputLabel": "Ignore Functions and Procedures",
26-
"inputTooltip": "Ignore reverse-engineering of function and procedures",
27-
"inputKeyword": "ignoreUdfUdp"
25+
"inputLabel": "Ignore Functions, Procedures and Triggers",
26+
"inputTooltip": "Ignore reverse-engineering of function, procedures and triggers",
27+
"inputKeyword": "ignoreUdfUdpTriggers"
2828
}
2929
]
3030
}

reverse_engineering/helpers/postgresService.js

Lines changed: 38 additions & 15 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,16 +174,20 @@ 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, ignoreUdfUdp) {
180-
if (ignoreUdfUdp) {
189+
async retrieveSchemaLevelData(schemaName, ignoreUdfUdpTriggers) {
190+
if (ignoreUdfUdpTriggers) {
181191
logger.info('Functions and procedures ignored');
182192

183193
return { functions: [], procedures: [] };
@@ -251,6 +261,7 @@ module.exports = {
251261
schemaOid,
252262
schemaName,
253263
userDefinedTypes,
264+
ignoreUdfUdpTriggers,
254265
{ tableName, isParentPartitioned },
255266
) {
256267
logger.progress('Get table data', schemaName, tableName);
@@ -274,11 +285,7 @@ module.exports = {
274285
const tableConstraintsResult = await db.queryTolerant(queryConstants.GET_TABLE_CONSTRAINTS, [tableOid]);
275286
const tableIndexesResult = await db.queryTolerant(getGetIndexesQuery(version), [tableOid]);
276287
const tableForeignKeys = await db.queryTolerant(queryConstants.GET_TABLE_FOREIGN_KEYS, [tableOid]);
277-
const triggersData = await db.queryTolerant(queryConstants.GET_TRIGGERS, [schemaName, tableName]);
278-
const triggersAdditionalData = await db.queryTolerant(queryConstants.GET_TRIGGERS_ADDITIONAL_DATA, [
279-
schemaOid,
280-
tableOid,
281-
]);
288+
const triggers = await this._getTriggers(schemaName, tableName, schemaOid, tableOid, ignoreUdfUdpTriggers);
282289

283290
const partitioning = prepareTablePartition(partitionResult, tableColumns);
284291
const tableLevelProperties = prepareTableLevelData(tableLevelData, tableToastOptions);
@@ -287,7 +294,6 @@ module.exports = {
287294
const tableConstraint = prepareTableConstraints(tableConstraintsResult, tableColumns, tableIndexesResult);
288295
const tableIndexes = prepareTableIndexes(tableIndexesResult);
289296
const relationships = prepareForeignKeys(tableForeignKeys, tableName, schemaName, tableColumns);
290-
const triggers = getTriggers(triggersData, triggersAdditionalData);
291297

292298
const tableData = {
293299
partitioning,
@@ -322,6 +328,22 @@ module.exports = {
322328
};
323329
},
324330

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+
325347
async _getTableColumns(tableName, schemaName, tableOid) {
326348
logger.progress('Get columns', schemaName, tableName);
327349

@@ -355,7 +377,7 @@ module.exports = {
355377
return await db.queryTolerant(queryConstants.GET_SAMPLED_DATA(fullTableName, jsonColumns), [limit]);
356378
},
357379

358-
async _retrieveSingleViewData(schemaOid, schemaName, viewName) {
380+
async _retrieveSingleViewData(schemaOid, schemaName, ignoreUdfUdpTriggers, viewName) {
359381
logger.progress('Get view data', schemaName, viewName);
360382

361383
viewName = removeViewNameSuffix(viewName);
@@ -365,12 +387,13 @@ module.exports = {
365387
!viewData.view_definition &&
366388
(await db.queryTolerant(queryConstants.GET_VIEW_SELECT_STMT_FALLBACK, [viewName, schemaName], true));
367389
const viewOptions = await db.queryTolerant(queryConstants.GET_VIEW_OPTIONS, [viewName, schemaOid], true);
368-
const triggersData = await db.queryTolerant(queryConstants.GET_TRIGGERS, [schemaName, viewName]);
369-
const triggersAdditionalData = await db.queryTolerant(queryConstants.GET_TRIGGERS_ADDITIONAL_DATA, [
390+
const triggers = await this._getTriggers(
391+
schemaName,
392+
viewName,
370393
schemaOid,
371394
viewOptions?.oid,
372-
]);
373-
const triggers = getTriggers(triggersData, triggersAdditionalData);
395+
ignoreUdfUdpTriggers,
396+
);
374397

375398
const script = generateCreateViewScript(viewName, viewData, viewDefinitionFallback);
376399
const data = prepareViewData(viewData, viewOptions, triggers);

0 commit comments

Comments
 (0)