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:
parent
2d9abee78c
commit
bd6776c7ff
3 changed files with 32 additions and 1 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
10
pg_ivm.c
10
pg_ivm.c
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue