Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bd2e71c

Browse files
committed
add more tests for UPDATE/DELETE on PostgreSQL 9.5 (issue #77)
1 parent f1b5316 commit bd2e71c

File tree

4 files changed

+315
-1
lines changed

4 files changed

+315
-1
lines changed

Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ REGRESS = pathman_array_qual \
5353
pathman_runtime_nodes \
5454
pathman_update_trigger \
5555
pathman_upd_del \
56-
pathman_utility_stmt
56+
pathman_utility_stmt \
57+
pathman_views
5758

5859
EXTRA_REGRESS_OPTS=--temp-config=$(top_srcdir)/$(subdir)/conf.add
5960

expected/pathman_views.out

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* -------------------------------------------
3+
* NOTE: This test behaves differenly on 9.5
4+
* -------------------------------------------
5+
*/
6+
\set VERBOSITY terse
7+
SET search_path = 'public';
8+
CREATE EXTENSION pg_pathman;
9+
CREATE SCHEMA views;
10+
/* create a partitioned table */
11+
create table views._abc(id int4 not null);
12+
select create_hash_partitions('views._abc', 'id', 10);
13+
create_hash_partitions
14+
------------------------
15+
10
16+
(1 row)
17+
18+
insert into views._abc select generate_series(1, 100);
19+
/* create a facade view */
20+
create view views.abc as select * from views._abc;
21+
create or replace function views.disable_modification()
22+
returns trigger as
23+
$$
24+
BEGIN
25+
RAISE EXCEPTION '%', TG_OP;
26+
RETURN NULL;
27+
END;
28+
$$
29+
language 'plpgsql';
30+
create trigger abc_mod_tr
31+
instead of insert or update or delete
32+
on views.abc for each row
33+
execute procedure views.disable_modification();
34+
/* Test SELECT */
35+
explain (costs off) select * from views.abc;
36+
QUERY PLAN
37+
--------------------------
38+
Append
39+
-> Seq Scan on _abc_0
40+
-> Seq Scan on _abc_1
41+
-> Seq Scan on _abc_2
42+
-> Seq Scan on _abc_3
43+
-> Seq Scan on _abc_4
44+
-> Seq Scan on _abc_5
45+
-> Seq Scan on _abc_6
46+
-> Seq Scan on _abc_7
47+
-> Seq Scan on _abc_8
48+
-> Seq Scan on _abc_9
49+
(11 rows)
50+
51+
explain (costs off) select * from views.abc where id = 1;
52+
QUERY PLAN
53+
--------------------------
54+
Append
55+
-> Seq Scan on _abc_0
56+
Filter: (id = 1)
57+
(3 rows)
58+
59+
select count (*) from views.abc;
60+
count
61+
-------
62+
100
63+
(1 row)
64+
65+
/* Test INSERT */
66+
explain (costs off) insert into views.abc values (1);
67+
QUERY PLAN
68+
---------------
69+
Insert on abc
70+
-> Result
71+
(2 rows)
72+
73+
insert into views.abc values (1);
74+
ERROR: INSERT
75+
/* Test UPDATE */
76+
explain (costs off) update views.abc set id = 2 where id = 1 or id = 2;
77+
QUERY PLAN
78+
--------------------------------------
79+
Update on abc
80+
-> Result
81+
-> Append
82+
-> Seq Scan on _abc_0
83+
Filter: (id = 1)
84+
-> Seq Scan on _abc_6
85+
Filter: (id = 2)
86+
(7 rows)
87+
88+
update views.abc set id = 2 where id = 1 or id = 2;
89+
ERROR: UPDATE
90+
/* Test DELETE */
91+
explain (costs off) delete from views.abc where id = 1 or id = 2;
92+
QUERY PLAN
93+
--------------------------------------
94+
Delete on abc
95+
-> Result
96+
-> Append
97+
-> Seq Scan on _abc_0
98+
Filter: (id = 1)
99+
-> Seq Scan on _abc_6
100+
Filter: (id = 2)
101+
(7 rows)
102+
103+
delete from views.abc where id = 1 or id = 2;
104+
ERROR: DELETE
105+
DROP SCHEMA views CASCADE;
106+
NOTICE: drop cascades to 13 other objects
107+
DROP EXTENSION pg_pathman;

expected/pathman_views_1.out

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
/*
2+
* -------------------------------------------
3+
* NOTE: This test behaves differenly on 9.5
4+
* -------------------------------------------
5+
*/
6+
\set VERBOSITY terse
7+
SET search_path = 'public';
8+
CREATE EXTENSION pg_pathman;
9+
CREATE SCHEMA views;
10+
/* create a partitioned table */
11+
create table views._abc(id int4 not null);
12+
select create_hash_partitions('views._abc', 'id', 10);
13+
create_hash_partitions
14+
------------------------
15+
10
16+
(1 row)
17+
18+
insert into views._abc select generate_series(1, 100);
19+
/* create a facade view */
20+
create view views.abc as select * from views._abc;
21+
create or replace function views.disable_modification()
22+
returns trigger as
23+
$$
24+
BEGIN
25+
RAISE EXCEPTION '%', TG_OP;
26+
RETURN NULL;
27+
END;
28+
$$
29+
language 'plpgsql';
30+
create trigger abc_mod_tr
31+
instead of insert or update or delete
32+
on views.abc for each row
33+
execute procedure views.disable_modification();
34+
/* Test SELECT */
35+
explain (costs off) select * from views.abc;
36+
QUERY PLAN
37+
--------------------------
38+
Append
39+
-> Seq Scan on _abc_0
40+
-> Seq Scan on _abc_1
41+
-> Seq Scan on _abc_2
42+
-> Seq Scan on _abc_3
43+
-> Seq Scan on _abc_4
44+
-> Seq Scan on _abc_5
45+
-> Seq Scan on _abc_6
46+
-> Seq Scan on _abc_7
47+
-> Seq Scan on _abc_8
48+
-> Seq Scan on _abc_9
49+
(11 rows)
50+
51+
explain (costs off) select * from views.abc where id = 1;
52+
QUERY PLAN
53+
--------------------------
54+
Append
55+
-> Seq Scan on _abc_0
56+
Filter: (id = 1)
57+
(3 rows)
58+
59+
select count (*) from views.abc;
60+
count
61+
-------
62+
100
63+
(1 row)
64+
65+
/* Test INSERT */
66+
explain (costs off) insert into views.abc values (1);
67+
QUERY PLAN
68+
---------------
69+
Insert on abc
70+
-> Result
71+
(2 rows)
72+
73+
insert into views.abc values (1);
74+
ERROR: INSERT
75+
/* Test UPDATE */
76+
explain (costs off) update views.abc set id = 2 where id = 1 or id = 2;
77+
QUERY PLAN
78+
----------------------------------------------------
79+
Update on abc
80+
-> Result
81+
-> Append
82+
-> Seq Scan on _abc
83+
Filter: ((id = 1) OR (id = 2))
84+
-> Seq Scan on _abc_0
85+
Filter: ((id = 1) OR (id = 2))
86+
-> Seq Scan on _abc_1
87+
Filter: ((id = 1) OR (id = 2))
88+
-> Seq Scan on _abc_2
89+
Filter: ((id = 1) OR (id = 2))
90+
-> Seq Scan on _abc_3
91+
Filter: ((id = 1) OR (id = 2))
92+
-> Seq Scan on _abc_4
93+
Filter: ((id = 1) OR (id = 2))
94+
-> Seq Scan on _abc_5
95+
Filter: ((id = 1) OR (id = 2))
96+
-> Seq Scan on _abc_6
97+
Filter: ((id = 1) OR (id = 2))
98+
-> Seq Scan on _abc_7
99+
Filter: ((id = 1) OR (id = 2))
100+
-> Seq Scan on _abc_8
101+
Filter: ((id = 1) OR (id = 2))
102+
-> Seq Scan on _abc_9
103+
Filter: ((id = 1) OR (id = 2))
104+
(25 rows)
105+
106+
update views.abc set id = 2 where id = 1 or id = 2;
107+
ERROR: UPDATE
108+
/* Test DELETE */
109+
explain (costs off) delete from views.abc where id = 1 or id = 2;
110+
QUERY PLAN
111+
----------------------------------------------------
112+
Delete on abc
113+
-> Result
114+
-> Append
115+
-> Seq Scan on _abc
116+
Filter: ((id = 1) OR (id = 2))
117+
-> Seq Scan on _abc_0
118+
Filter: ((id = 1) OR (id = 2))
119+
-> Seq Scan on _abc_1
120+
Filter: ((id = 1) OR (id = 2))
121+
-> Seq Scan on _abc_2
122+
Filter: ((id = 1) OR (id = 2))
123+
-> Seq Scan on _abc_3
124+
Filter: ((id = 1) OR (id = 2))
125+
-> Seq Scan on _abc_4
126+
Filter: ((id = 1) OR (id = 2))
127+
-> Seq Scan on _abc_5
128+
Filter: ((id = 1) OR (id = 2))
129+
-> Seq Scan on _abc_6
130+
Filter: ((id = 1) OR (id = 2))
131+
-> Seq Scan on _abc_7
132+
Filter: ((id = 1) OR (id = 2))
133+
-> Seq Scan on _abc_8
134+
Filter: ((id = 1) OR (id = 2))
135+
-> Seq Scan on _abc_9
136+
Filter: ((id = 1) OR (id = 2))
137+
(25 rows)
138+
139+
delete from views.abc where id = 1 or id = 2;
140+
ERROR: DELETE
141+
DROP SCHEMA views CASCADE;
142+
NOTICE: drop cascades to 13 other objects
143+
DROP EXTENSION pg_pathman;

sql/pathman_views.sql

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* -------------------------------------------
3+
* NOTE: This test behaves differenly on 9.5
4+
* -------------------------------------------
5+
*/
6+
7+
\set VERBOSITY terse
8+
9+
SET search_path = 'public';
10+
CREATE EXTENSION pg_pathman;
11+
CREATE SCHEMA views;
12+
13+
14+
15+
/* create a partitioned table */
16+
create table views._abc(id int4 not null);
17+
select create_hash_partitions('views._abc', 'id', 10);
18+
insert into views._abc select generate_series(1, 100);
19+
20+
21+
/* create a facade view */
22+
create view views.abc as select * from views._abc;
23+
24+
create or replace function views.disable_modification()
25+
returns trigger as
26+
$$
27+
BEGIN
28+
RAISE EXCEPTION '%', TG_OP;
29+
RETURN NULL;
30+
END;
31+
$$
32+
language 'plpgsql';
33+
34+
create trigger abc_mod_tr
35+
instead of insert or update or delete
36+
on views.abc for each row
37+
execute procedure views.disable_modification();
38+
39+
40+
/* Test SELECT */
41+
explain (costs off) select * from views.abc;
42+
explain (costs off) select * from views.abc where id = 1;
43+
select count (*) from views.abc;
44+
45+
46+
/* Test INSERT */
47+
explain (costs off) insert into views.abc values (1);
48+
insert into views.abc values (1);
49+
50+
51+
/* Test UPDATE */
52+
explain (costs off) update views.abc set id = 2 where id = 1 or id = 2;
53+
update views.abc set id = 2 where id = 1 or id = 2;
54+
55+
56+
/* Test DELETE */
57+
explain (costs off) delete from views.abc where id = 1 or id = 2;
58+
delete from views.abc where id = 1 or id = 2;
59+
60+
61+
62+
DROP SCHEMA views CASCADE;
63+
DROP EXTENSION pg_pathman;

0 commit comments

Comments
 (0)