Fix for get_immv_def()

Fix that get_immv_def() return  NULL when oid is not a Relation.
This commit is contained in:
Takuma Hoshiai 2022-09-30 17:08:51 +09:00
parent bd6776c7ff
commit b2e357612d
3 changed files with 8 additions and 7 deletions

View file

@ -21,7 +21,7 @@ SELECT immvrelid, get_immv_def(immvrelid) FROM pg_ivm_immv ORDER BY 1;
-----------+----------------------- -----------+-----------------------
mv | SELECT i + mv | SELECT i +
| FROM t | FROM t
mv2 | SELECT i + mv2 | SELECT i AS x +
| FROM t + | FROM t +
| WHERE ((i % 2) = 0) | WHERE ((i % 2) = 0)
(2 rows) (2 rows)
@ -35,7 +35,7 @@ DROP TABLE mv;
SELECT immvrelid, get_immv_def(immvrelid) FROM pg_ivm_immv ORDER BY 1; SELECT immvrelid, get_immv_def(immvrelid) FROM pg_ivm_immv ORDER BY 1;
immvrelid | get_immv_def immvrelid | get_immv_def
-----------+----------------------- -----------+-----------------------
mv2 | SELECT i + mv2 | SELECT i AS x +
| FROM t + | FROM t +
| WHERE ((i % 2) = 0) | WHERE ((i % 2) = 0)
(1 row) (1 row)

View file

@ -430,7 +430,7 @@ SELECT * FROM mv_ivm_min_max ORDER BY 1,2,3;
ROLLBACK; ROLLBACK;
-- support MIN(), MAX() aggregate functions without GROUP clause -- support MIN(), MAX() aggregate functions without GROUP clause
BEGIN; BEGIN;
SELECT create_immv('mv_ivm_min_max', 'SELECT MIN(j), MAX(j) FROM mv_base_a'); SELECT create_immv('mv_ivm_min_max(min_j, max_j)', 'SELECT MIN(j), MAX(j) FROM mv_base_a');
create_immv create_immv
------------- -------------
1 1

View file

@ -333,18 +333,19 @@ get_immv_def(PG_FUNCTION_ARGS)
Query *query = NULL; Query *query = NULL;
char *querystring = NULL; char *querystring = NULL;
matviewRel = table_open(matviewOid, AccessShareLock);
/* Make sure IMMV is a table. */ /* Make sure IMMV is a table. */
Assert(matviewRel->rd_rel->relkind == RELKIND_RELATION); if (get_rel_relkind(matviewOid) != RELKIND_RELATION)
PG_RETURN_NULL();
matviewRel = table_open(matviewOid, AccessShareLock);
query = get_immv_query(matviewRel); query = get_immv_query(matviewRel);
if (query == NULL) if (query == NULL)
{ {
table_close(matviewRel, NoLock); table_close(matviewRel, NoLock);
PG_RETURN_TEXT_P(cstring_to_text("")); PG_RETURN_NULL();
} }
querystring = pg_ivm_get_querydef(get_immv_query(matviewRel), false); querystring = pg_ivm_get_viewdef(matviewRel, false);
table_close(matviewRel, NoLock); table_close(matviewRel, NoLock);
PG_RETURN_TEXT_P(cstring_to_text(querystring)); PG_RETURN_TEXT_P(cstring_to_text(querystring));