Add some tests for CTE and remove unnecessary one
This commit is contained in:
parent
9972f279c4
commit
61eca8c30c
2 changed files with 62 additions and 34 deletions
|
|
@ -840,6 +840,31 @@ SELECT * FROM mv_cte ORDER BY i,j;
|
||||||
4 | 40
|
4 | 40
|
||||||
(6 rows)
|
(6 rows)
|
||||||
|
|
||||||
|
ROLLBACK;
|
||||||
|
BEGIN;
|
||||||
|
SELECT create_immv('mv_cte',
|
||||||
|
'WITH b AS ( SELECT * FROM (SELECT * FROM mv_base_b) b2) SELECT v.i,v.j FROM (WITH a AS (SELECT * FROM mv_base_a) SELECT a.i,a.j FROM a, b WHERE a.i = b.i) v');
|
||||||
|
NOTICE: could not create an index on immv "mv_cte" automatically
|
||||||
|
DETAIL: This target list does not have all the primary key columns, or this view does not contain GROUP BY or DISTINCT clause.
|
||||||
|
HINT: Create an index on the immv for efficient incremental maintenance.
|
||||||
|
create_immv
|
||||||
|
-------------
|
||||||
|
4
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
INSERT INTO mv_base_a VALUES(2,20);
|
||||||
|
INSERT INTO mv_base_b VALUES(3,300);
|
||||||
|
SELECT * FROM mv_cte ORDER BY i,j;
|
||||||
|
i | j
|
||||||
|
---+----
|
||||||
|
1 | 10
|
||||||
|
2 | 20
|
||||||
|
2 | 20
|
||||||
|
3 | 30
|
||||||
|
3 | 30
|
||||||
|
4 | 40
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
SELECT create_immv('mv_cte',
|
SELECT create_immv('mv_cte',
|
||||||
|
|
@ -873,7 +898,12 @@ SELECT * FROM mv_cte ORDER BY i,j,k;
|
||||||
3 | 30 | 133
|
3 | 30 | 133
|
||||||
(8 rows)
|
(8 rows)
|
||||||
|
|
||||||
ROLLBACK;
|
END; -- don't remove for get_immv_def test
|
||||||
|
--- disallow not-simple CTE
|
||||||
|
SELECT create_immv('mv_cte_fail', 'WITH b AS (SELECT i, COUNT(*) FROM mv_base_b GROUP BY i) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i');
|
||||||
|
ERROR: aggregate functions in nested query are not supported on incrementally maintainable materialized view
|
||||||
|
SELECT create_immv('mv_cte_fail', 'WITH b AS (SELECT DISTINCT i FROM mv_base_b) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i');
|
||||||
|
ERROR: DISTINCT clause in nested query are not supported on incrementally maintainable materialized view
|
||||||
-- views including NULL
|
-- views including NULL
|
||||||
BEGIN;
|
BEGIN;
|
||||||
CREATE TABLE base_t (i int, v int);
|
CREATE TABLE base_t (i int, v int);
|
||||||
|
|
@ -1051,17 +1081,6 @@ ROLLBACK;
|
||||||
SELECT create_immv('mv(a,b)',
|
SELECT create_immv('mv(a,b)',
|
||||||
'SELECT a.i, b.i FROM mv_base_a a LEFT JOIN mv_base_b b ON a.i=b.i');
|
'SELECT a.i, b.i FROM mv_base_a a LEFT JOIN mv_base_b b ON a.i=b.i');
|
||||||
ERROR: OUTER JOIN is not supported on incrementally maintainable materialized view
|
ERROR: OUTER JOIN is not supported on incrementally maintainable materialized view
|
||||||
-- CTE is not supported
|
|
||||||
SELECT create_immv('mv',
|
|
||||||
'WITH b AS ( SELECT * FROM mv_base_b) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i;');
|
|
||||||
NOTICE: could not create an index on immv "mv" automatically
|
|
||||||
DETAIL: This target list does not have all the primary key columns, or this view does not contain GROUP BY or DISTINCT clause.
|
|
||||||
HINT: Create an index on the immv for efficient incremental maintenance.
|
|
||||||
create_immv
|
|
||||||
-------------
|
|
||||||
4
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
-- contain system column
|
-- contain system column
|
||||||
SELECT create_immv('mv_ivm01', 'SELECT i,j,xmin FROM mv_base_a');
|
SELECT create_immv('mv_ivm01', 'SELECT i,j,xmin FROM mv_base_a');
|
||||||
ERROR: system column is not supported on incrementally maintainable materialized view
|
ERROR: system column is not supported on incrementally maintainable materialized view
|
||||||
|
|
@ -1297,22 +1316,23 @@ ERROR: cannot change materialized view "mv_ivm_1"
|
||||||
-- get_immv_def function
|
-- get_immv_def function
|
||||||
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
|
||||||
-----------+----------------------------------
|
-----------+------------------------------------------
|
||||||
mv_ivm_1 | SELECT a.i, +
|
mv_ivm_1 | SELECT a.i, +
|
||||||
| a.j, +
|
| a.j, +
|
||||||
| b.k +
|
| b.k +
|
||||||
| FROM (mv_base_a a +
|
| FROM (mv_base_a a +
|
||||||
| JOIN mv_base_b b USING (i))
|
| JOIN mv_base_b b USING (i))
|
||||||
mv | WITH b AS ( +
|
mv_cte | WITH x AS ( +
|
||||||
| SELECT mv_base_b.i, +
|
| SELECT b.i, +
|
||||||
| mv_base_b.k +
|
| a.j, +
|
||||||
| FROM mv_base_b +
|
| b.k +
|
||||||
|
| FROM (mv_base_b b +
|
||||||
|
| JOIN mv_base_a a USING (i))+
|
||||||
| ) +
|
| ) +
|
||||||
| SELECT a.i, +
|
| SELECT i, +
|
||||||
| a.j +
|
| j, +
|
||||||
| FROM mv_base_a a, +
|
| k +
|
||||||
| b +
|
| FROM x
|
||||||
| WHERE (a.i = b.i)
|
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
-- mv_base_b is not immv
|
-- mv_base_b is not immv
|
||||||
|
|
@ -1325,7 +1345,7 @@ SELECT 'mv_base_b'::regclass, get_immv_def('mv_base_b');
|
||||||
DROP TABLE mv_base_b CASCADE;
|
DROP TABLE mv_base_b CASCADE;
|
||||||
NOTICE: drop cascades to 4 other objects
|
NOTICE: drop cascades to 4 other objects
|
||||||
DETAIL: drop cascades to table mv_ivm_1
|
DETAIL: drop cascades to table mv_ivm_1
|
||||||
drop cascades to table mv
|
drop cascades to table mv_cte
|
||||||
drop cascades to view b_view
|
drop cascades to view b_view
|
||||||
drop cascades to materialized view b_mview
|
drop cascades to materialized view b_mview
|
||||||
DROP TABLE mv_base_a CASCADE;
|
DROP TABLE mv_base_a CASCADE;
|
||||||
|
|
|
||||||
|
|
@ -290,6 +290,14 @@ INSERT INTO mv_base_b VALUES(3,300);
|
||||||
SELECT * FROM mv_cte ORDER BY i,j;
|
SELECT * FROM mv_cte ORDER BY i,j;
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT create_immv('mv_cte',
|
||||||
|
'WITH b AS ( SELECT * FROM (SELECT * FROM mv_base_b) b2) SELECT v.i,v.j FROM (WITH a AS (SELECT * FROM mv_base_a) SELECT a.i,a.j FROM a, b WHERE a.i = b.i) v');
|
||||||
|
INSERT INTO mv_base_a VALUES(2,20);
|
||||||
|
INSERT INTO mv_base_b VALUES(3,300);
|
||||||
|
SELECT * FROM mv_cte ORDER BY i,j;
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
SELECT create_immv('mv_cte',
|
SELECT create_immv('mv_cte',
|
||||||
'WITH x AS ( SELECT i, a.j, b.k FROM mv_base_b b INNER JOIN mv_base_a a USING(i)) SELECT * FROM x');
|
'WITH x AS ( SELECT i, a.j, b.k FROM mv_base_b b INNER JOIN mv_base_a a USING(i)) SELECT * FROM x');
|
||||||
|
|
@ -299,7 +307,11 @@ WITH
|
||||||
bd AS (DELETE FROM mv_base_b WHERE i = 4 RETURNING 0)
|
bd AS (DELETE FROM mv_base_b WHERE i = 4 RETURNING 0)
|
||||||
SELECT;
|
SELECT;
|
||||||
SELECT * FROM mv_cte ORDER BY i,j,k;
|
SELECT * FROM mv_cte ORDER BY i,j,k;
|
||||||
ROLLBACK;
|
END; -- don't remove for get_immv_def test
|
||||||
|
|
||||||
|
--- disallow not-simple CTE
|
||||||
|
SELECT create_immv('mv_cte_fail', 'WITH b AS (SELECT i, COUNT(*) FROM mv_base_b GROUP BY i) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i');
|
||||||
|
SELECT create_immv('mv_cte_fail', 'WITH b AS (SELECT DISTINCT i FROM mv_base_b) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i');
|
||||||
|
|
||||||
-- views including NULL
|
-- views including NULL
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
|
@ -392,10 +404,6 @@ ROLLBACK;
|
||||||
SELECT create_immv('mv(a,b)',
|
SELECT create_immv('mv(a,b)',
|
||||||
'SELECT a.i, b.i FROM mv_base_a a LEFT JOIN mv_base_b b ON a.i=b.i');
|
'SELECT a.i, b.i FROM mv_base_a a LEFT JOIN mv_base_b b ON a.i=b.i');
|
||||||
|
|
||||||
-- CTE is not supported
|
|
||||||
SELECT create_immv('mv',
|
|
||||||
'WITH b AS ( SELECT * FROM mv_base_b) SELECT a.i,a.j FROM mv_base_a a, b WHERE a.i = b.i;');
|
|
||||||
|
|
||||||
-- contain system column
|
-- contain system column
|
||||||
SELECT create_immv('mv_ivm01', 'SELECT i,j,xmin FROM mv_base_a');
|
SELECT create_immv('mv_ivm01', 'SELECT i,j,xmin FROM mv_base_a');
|
||||||
SELECT create_immv('mv_ivm02', 'SELECT i,j FROM mv_base_a WHERE xmin = ''610''');
|
SELECT create_immv('mv_ivm02', 'SELECT i,j FROM mv_base_a WHERE xmin = ''610''');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue