fix an irregular case of get_immv_def()

Add test case, when an argument of immvrelid is not IMMV oids.
This commit is contained in:
Takuma Hoshiai 2022-09-18 06:14:19 +09:00
parent 2d9abee78c
commit bd6776c7ff
3 changed files with 32 additions and 1 deletions

View file

@ -1043,6 +1043,24 @@ DELETE FROM mv_ivm_1;
ERROR: cannot change materialized view "mv_ivm_1" ERROR: cannot change materialized view "mv_ivm_1"
TRUNCATE mv_ivm_1; TRUNCATE mv_ivm_1;
ERROR: cannot change materialized view "mv_ivm_1" ERROR: cannot change materialized view "mv_ivm_1"
-- get_immv_def function
SELECT immvrelid, get_immv_def(immvrelid) FROM pg_ivm_immv ORDER BY 1;
immvrelid | get_immv_def
-----------+----------------------------------
mv_ivm_1 | SELECT a.i, +
| a.j, +
| b.k +
| FROM (mv_base_a a +
| JOIN mv_base_b b USING (i))
(1 row)
-- mv_base_b is not immv
SELECT 'mv_base_b'::regclass, get_immv_def('mv_base_b');
regclass | get_immv_def
-----------+--------------
mv_base_b |
(1 row)
DROP TABLE mv_base_b CASCADE; DROP TABLE mv_base_b CASCADE;
NOTICE: drop cascades to 3 other objects NOTICE: drop cascades to 3 other objects
DETAIL: drop cascades to table mv_ivm_1 DETAIL: drop cascades to table mv_ivm_1

View file

@ -330,12 +330,20 @@ get_immv_def(PG_FUNCTION_ARGS)
{ {
Oid matviewOid = PG_GETARG_OID(0); Oid matviewOid = PG_GETARG_OID(0);
Relation matviewRel = NULL; Relation matviewRel = NULL;
char * querystring = NULL; Query *query = NULL;
char *querystring = NULL;
matviewRel = table_open(matviewOid, AccessShareLock); matviewRel = table_open(matviewOid, AccessShareLock);
/* Make sure IMMV is a table. */ /* Make sure IMMV is a table. */
Assert(matviewRel->rd_rel->relkind == RELKIND_RELATION); Assert(matviewRel->rd_rel->relkind == RELKIND_RELATION);
query = get_immv_query(matviewRel);
if (query == NULL)
{
table_close(matviewRel, NoLock);
PG_RETURN_TEXT_P(cstring_to_text(""));
}
querystring = pg_ivm_get_querydef(get_immv_query(matviewRel), false); querystring = pg_ivm_get_querydef(get_immv_query(matviewRel), false);
table_close(matviewRel, NoLock); table_close(matviewRel, NoLock);

View file

@ -460,5 +460,10 @@ UPDATE mv_ivm_1 SET k = 1 WHERE i = 1;
DELETE FROM mv_ivm_1; DELETE FROM mv_ivm_1;
TRUNCATE mv_ivm_1; TRUNCATE mv_ivm_1;
-- get_immv_def function
SELECT immvrelid, get_immv_def(immvrelid) FROM pg_ivm_immv ORDER BY 1;
-- mv_base_b is not immv
SELECT 'mv_base_b'::regclass, get_immv_def('mv_base_b');
DROP TABLE mv_base_b CASCADE; DROP TABLE mv_base_b CASCADE;
DROP TABLE mv_base_a CASCADE; DROP TABLE mv_base_a CASCADE;