From b2e357612dc2abc5d0a5b76818b821ef8e59f5cc Mon Sep 17 00:00:00 2001 From: Takuma Hoshiai Date: Fri, 30 Sep 2022 17:08:51 +0900 Subject: [PATCH] Fix for get_immv_def() Fix that get_immv_def() return NULL when oid is not a Relation. --- expected/create_immv.out | 4 ++-- expected/pg_ivm.out | 2 +- pg_ivm.c | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/expected/create_immv.out b/expected/create_immv.out index 88c259a..8bebe42 100644 --- a/expected/create_immv.out +++ b/expected/create_immv.out @@ -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) diff --git a/expected/pg_ivm.out b/expected/pg_ivm.out index ba0a3b0..8b19e59 100644 --- a/expected/pg_ivm.out +++ b/expected/pg_ivm.out @@ -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 diff --git a/pg_ivm.c b/pg_ivm.c index 29b567b..8db5ac0 100644 --- a/pg_ivm.c +++ b/pg_ivm.c @@ -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));