Skip to content

Commit 78074b9

Browse files
committed
Merge commit 'refs/pull/7/head' of https://github.com/hackolade/PostgreSQL
2 parents 1a2dcf7 + a2368f6 commit 78074b9

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

reverse_engineering/helpers/postgresHelpers/viewHelper.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ const isViewByName = name => _.endsWith(name, VIEW_SUFFIX);
1313
const removeViewNameSuffix = name => name.slice(0, -VIEW_SUFFIX.length);
1414
const setViewSuffix = name => `${name}${VIEW_SUFFIX}`;
1515

16-
const generateCreateViewScript = (viewName, viewData) => {
17-
return `CREATE VIEW ${viewName} AS ${viewData.view_definition}`;
16+
const generateCreateViewScript = (viewName, viewData, viewDefinitionFallback = {}) => {
17+
const selectStatement = _.trim(viewData.view_definition || viewDefinitionFallback.definition || '');
18+
19+
if (!selectStatement) {
20+
return ''
21+
}
22+
23+
return `CREATE VIEW ${viewName} AS ${selectStatement}`;
1824
};
1925

2026
const prepareViewData = (viewData, viewOptions) => {

reverse_engineering/helpers/postgresService.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,11 +315,24 @@ module.exports = {
315315
viewName = removeViewNameSuffix(viewName);
316316

317317
const viewData = await db.query(queryConstants.GET_VIEW_DATA, [viewName, schemaName], true);
318+
const viewDefinitionFallback =
319+
!viewData.view_definition &&
320+
(await db.queryTolerant(queryConstants.GET_VIEW_SELECT_STMT_FALLBACK, [viewName, schemaName], true));
318321
const viewOptions = await db.queryTolerant(queryConstants.GET_VIEW_OPTIONS, [viewName, schemaOid], true);
319322

320-
const script = generateCreateViewScript(viewName, viewData);
323+
const script = generateCreateViewScript(viewName, viewData, viewDefinitionFallback);
321324
const data = prepareViewData(viewData, viewOptions);
322325

326+
if (!script) {
327+
logger.info('View select statement was not retrieved', { schemaName, viewName });
328+
329+
return {
330+
name: viewName,
331+
data,
332+
jsonSchema: { properties: [] },
333+
};
334+
}
335+
323336
return {
324337
name: viewName,
325338
data,

reverse_engineering/helpers/queryConstants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ const queryConstants = {
150150
JOIN pg_catalog.pg_namespace AS foreign_table_namespace ON (pc_foreign_table.relnamespace = foreign_table_namespace.oid)
151151
WHERE pcon.conrelid = $1 AND pcon.contype = 'f';`,
152152
GET_VIEW_DATA: `SELECT * FROM information_schema.views WHERE table_name = $1 AND table_schema = $2;`,
153+
GET_VIEW_SELECT_STMT_FALLBACK: `SELECT definition FROM pg_views WHERE viewname = $1 AND schemaname = $2;`,
153154
GET_VIEW_OPTIONS: `
154155
SELECT reloptions AS view_options,
155156
relpersistence AS persistence,

0 commit comments

Comments
 (0)