Skip to content

Commit d5f392b

Browse files
authored
HCK-16516: Added logic to skip procedures during RE (#196)
* HCK-16516: Added logic to skip procedures during RE * HCK-16516: Fix typo & improve log messages
1 parent 8d79e0c commit d5f392b

4 files changed

Lines changed: 54 additions & 6 deletions

File tree

localization/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
"MODAL_WINDOW___SUBDOCUMENT_IN_CHILD": "Sub-document in child",
8080
"MODAL_WINDOW___ARRAY_IN_PARENT": "Array in parent",
8181
"MODAL_WINDOW___INCLUDE_EMPTY_COLLECTION": "Include empty tables",
82+
"MODAL_WINDOW___INCLUDE_PROCEDURES": "Include stored procedures",
8283
"MODAL_WINDOW___CREATE_COLLECTION": "Create table",
8384
"MODAL_WINDOW___CREATE_BUCKET": "Create schema",
8485
"MODAL_WINDOW___ALL_COLLECTIONS": "and all nested tables",

reverse_engineering/databaseService/databaseService.js

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ const getDatabaseIndexes = async ({ client, dbName, tablesInfo, logger }) => {
316316

317317
const getIndexesBucketCount = async ({ client, dbName, indexesId, logger }) => {
318318
if (!indexesId.length) {
319+
logger.log('info', { message: `No database indexes to get. Skipping...` }, 'Reverse Engineering');
319320
return [];
320321
}
321322

@@ -874,7 +875,7 @@ const getTableDefaultConstraintNames = async ({ client, dbName, tableName, schem
874875
client,
875876
dbName,
876877
meta: {
877-
action: 'getting default cosntraint names',
878+
action: 'getting default constraint names',
878879
objects: ['sys.all_columns', 'sys.tables', 'sys.schemas', 'sys.default_constraints'],
879880
skip: true,
880881
},
@@ -1000,7 +1001,21 @@ const getWhereClauseForUniqueSchemasAndTables = ({ tableAlias, allUniqueSchemasA
10001001
`OBJECT_SCHEMA_NAME(${tableAlias}.object_id) IN (${[...schemas].join(', ')})
10011002
AND OBJECT_NAME(${tableAlias}.object_id) IN (${[...tables].join(', ')})`;
10021003

1003-
const getDatabaseProcedures = async ({ client, dbName, logger }) => {
1004+
const getDatabaseProcedures = async ({ client, dbName, logger, includeProcedures }) => {
1005+
if (!includeProcedures) {
1006+
logger.log(
1007+
'info',
1008+
{ message: "'Include stored procedures' is not selected in reverse-engineering options." },
1009+
'Reverse Engineering',
1010+
);
1011+
logger.progress({
1012+
message: 'Skipped: discovering stored procedure',
1013+
containerName: dbName,
1014+
entityName: '',
1015+
});
1016+
return [];
1017+
}
1018+
10041019
const currentDbConnectionClient = await getClient({
10051020
client,
10061021
dbName,
@@ -1035,7 +1050,17 @@ const getDatabaseProcedures = async ({ client, dbName, logger }) => {
10351050

10361051
const rawProcedures = await mapResponse(response);
10371052

1038-
return rawProcedures.map(parseProcedure(logger));
1053+
logger.log('info', { message: `Parsing procedures.` }, 'Reverse Engineering');
1054+
logger.progress({ message: 'Parsing procedures', containerName: dbName, entityName: '' });
1055+
const start = Date.now();
1056+
const parsedProcedures = rawProcedures.map(parseProcedure(logger));
1057+
logger.log(
1058+
'info',
1059+
{ message: `Procedures parsed. Time taken to parse procedures: ${Date.now() - start}ms` },
1060+
'Reverse Engineering',
1061+
);
1062+
1063+
return parsedProcedures;
10391064
};
10401065

10411066
module.exports = {

reverse_engineering/helpers/getOptionsFromConnectionInfo.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const getOptionsFromConnectionInfo = connectionInfo => ({
22
includeEmptyCollection: connectionInfo.includeEmptyCollection,
33
isFieldOrderAlphabetic: connectionInfo.fieldInference.active === 'alphabetical',
4+
includeProcedures: connectionInfo.includeProcedures || false,
45
recordSamplingSettings: {
56
...connectionInfo.recordSamplingSettings,
67
},

reverse_engineering/reverseEngineeringService/reverseEngineeringService.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,44 +285,65 @@ const addTotalBucketCountToDatabaseIndexes = ({ databaseIndexes, indexesBucketCo
285285
});
286286
};
287287

288-
const fetchDatabaseMetadata = async ({ client, dbName, tablesInfo, logger }) => {
288+
const logDiscoveredMetadataCount = ({ logger, label, items = [] }) => {
289+
logger.log('info', { message: `Found ${items.length} ${label}.` }, 'Reverse Engineering');
290+
};
291+
292+
const fetchDatabaseMetadata = async ({ client, dbName, tablesInfo, logger, reverseEngineeringOptions }) => {
293+
const { includeProcedures = false } = reverseEngineeringOptions;
289294
const allUniqueSchemasAndTables = getAllUniqueSchemasAndTables({ tablesInfo });
290295

291296
const rawDatabaseIndexes = await getDatabaseIndexes({ client, dbName, tablesInfo, logger });
297+
logDiscoveredMetadataCount({ logger, label: 'database indexes', items: rawDatabaseIndexes });
298+
292299
const databaseCheckConstraints = await getDatabaseCheckConstraints({
293300
client,
294301
dbName,
295302
allUniqueSchemasAndTables,
296303
logger,
297304
});
305+
logDiscoveredMetadataCount({ logger, label: 'check constraints', items: databaseCheckConstraints });
306+
298307
const viewsIndexes = await getViewsIndexes({ client, dbName, logger });
308+
logDiscoveredMetadataCount({ logger, label: 'view indexes', items: viewsIndexes });
309+
299310
const fullTextIndexes = await getFullTextIndexes({
300311
client,
301312
dbName,
302313
allUniqueSchemasAndTables,
303314
logger,
304315
});
316+
logDiscoveredMetadataCount({ logger, label: 'full-text indexes', items: fullTextIndexes });
317+
305318
const spatialIndexes = await getSpatialIndexes({
306319
client,
307320
dbName,
308321
allUniqueSchemasAndTables,
309322
logger,
310323
});
311-
const procedures = await getDatabaseProcedures({ client, dbName, logger });
324+
logDiscoveredMetadataCount({ logger, label: 'spatial indexes', items: spatialIndexes });
325+
326+
const procedures = await getDatabaseProcedures({ client, dbName, logger, includeProcedures });
327+
312328
const indexesBucketCount = await getIndexesBucketCount({
313329
client,
314330
dbName,
315331
indexesId: rawDatabaseIndexes.map(i => i.index_id),
316332
logger,
317333
});
318334
const databaseUDT = await getDatabaseUserDefinedTypes({ client, dbName, logger });
335+
logDiscoveredMetadataCount({ logger, label: 'user-defined types', items: databaseUDT });
336+
319337
const databaseMemoryOptimizedTables = await getDatabaseMemoryOptimizedTables({ client, dbName, logger });
338+
logDiscoveredMetadataCount({ logger, label: 'memory-optimized tables', items: databaseMemoryOptimizedTables });
339+
320340
const xmlSchemaCollections = await getDatabaseXmlSchemaCollection({
321341
client,
322342
dbName,
323343
allUniqueSchemasAndTables,
324344
logger,
325345
});
346+
logDiscoveredMetadataCount({ logger, label: 'xml schema collection usages', items: xmlSchemaCollections });
326347

327348
const uniqueDatabaseIndexesColumns = getUniqueIndexesColumns({ indexesColumns: rawDatabaseIndexes });
328349
const databaseIndexes = addTotalBucketCountToDatabaseIndexes({
@@ -564,7 +585,7 @@ const reverseCollectionsToJSON = async ({ client, tablesInfo, reverseEngineering
564585
fullTextIndexes,
565586
spatialIndexes,
566587
procedures,
567-
} = await fetchDatabaseMetadata({ client, dbName, tablesInfo, logger });
588+
} = await fetchDatabaseMetadata({ client, dbName, tablesInfo, logger, reverseEngineeringOptions });
568589

569590
return processSchemas({
570591
tablesInfo,

0 commit comments

Comments
 (0)