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

View file

@ -430,7 +430,7 @@ SELECT * FROM mv_ivm_min_max ORDER BY 1,2,3;
ROLLBACK;
-- support MIN(), MAX() aggregate functions without GROUP clause
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
-------------
1

View file

@ -333,18 +333,19 @@ get_immv_def(PG_FUNCTION_ARGS)
Query *query = NULL;
char *querystring = NULL;
matviewRel = table_open(matviewOid, AccessShareLock);
/* 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);
if (query == NULL)
{
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);
PG_RETURN_TEXT_P(cstring_to_text(querystring));