Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit801f2ae

Browse files
committed
PartitionRouter supports AFTER STATEMENT triggers
1 parent2ee5d31 commit801f2ae

File tree

5 files changed

+249
-38
lines changed

5 files changed

+249
-38
lines changed

‎expected/pathman_update_triggers.out‎

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,76 @@ begin
2222
return new;
2323
end if; end;
2424
$$ language plpgsql;
25+
/* Enable our precious custom node */
26+
set pg_pathman.enable_partitionrouter = t;
27+
/*
28+
* Statement level triggers
29+
*/
30+
create trigger bus before update ON test_update_triggers.test
31+
execute procedure test_update_triggers.test_trigger ();
32+
create trigger bds before delete ON test_update_triggers.test
33+
execute procedure test_update_triggers.test_trigger ();
34+
create trigger bis before insert ON test_update_triggers.test
35+
execute procedure test_update_triggers.test_trigger ();
36+
create trigger aus after update ON test_update_triggers.test
37+
execute procedure test_update_triggers.test_trigger ();
38+
create trigger ads after delete ON test_update_triggers.test
39+
execute procedure test_update_triggers.test_trigger ();
40+
create trigger ais after insert ON test_update_triggers.test
41+
execute procedure test_update_triggers.test_trigger ();
42+
create trigger bus before update ON test_update_triggers.test_1
43+
execute procedure test_update_triggers.test_trigger ();
44+
create trigger bds before delete ON test_update_triggers.test_1
45+
execute procedure test_update_triggers.test_trigger ();
46+
create trigger bis before insert ON test_update_triggers.test_1
47+
execute procedure test_update_triggers.test_trigger ();
48+
create trigger aus after update ON test_update_triggers.test_1
49+
execute procedure test_update_triggers.test_trigger ();
50+
create trigger ads after delete ON test_update_triggers.test_1
51+
execute procedure test_update_triggers.test_trigger ();
52+
create trigger ais after insert ON test_update_triggers.test_1
53+
execute procedure test_update_triggers.test_trigger ();
54+
create trigger bus before update ON test_update_triggers.test_2
55+
execute procedure test_update_triggers.test_trigger ();
56+
create trigger bds before delete ON test_update_triggers.test_2
57+
execute procedure test_update_triggers.test_trigger ();
58+
create trigger bis before insert ON test_update_triggers.test_2
59+
execute procedure test_update_triggers.test_trigger ();
60+
create trigger aus after update ON test_update_triggers.test_2
61+
execute procedure test_update_triggers.test_trigger ();
62+
create trigger ads after delete ON test_update_triggers.test_2
63+
execute procedure test_update_triggers.test_trigger ();
64+
create trigger ais after insert ON test_update_triggers.test_2
65+
execute procedure test_update_triggers.test_trigger ();
66+
/* multiple values */
67+
insert into test_update_triggers.test select generate_series(1, 200);
68+
NOTICE: BEFORE INSERT STATEMENT (test)
69+
NOTICE: AFTER INSERT STATEMENT (test)
70+
update test_update_triggers.test set val = val + 1;
71+
NOTICE: BEFORE UPDATE STATEMENT (test)
72+
NOTICE: AFTER UPDATE STATEMENT (test)
73+
update test_update_triggers.test set val = val + 1;
74+
NOTICE: BEFORE UPDATE STATEMENT (test)
75+
NOTICE: AFTER UPDATE STATEMENT (test)
76+
update test_update_triggers.test set val = val + 1;
77+
NOTICE: BEFORE UPDATE STATEMENT (test)
78+
NOTICE: AFTER UPDATE STATEMENT (test)
79+
update test_update_triggers.test set val = val + 1;
80+
NOTICE: BEFORE UPDATE STATEMENT (test)
81+
NOTICE: AFTER UPDATE STATEMENT (test)
82+
update test_update_triggers.test set val = val + 1;
83+
NOTICE: BEFORE UPDATE STATEMENT (test)
84+
NOTICE: AFTER UPDATE STATEMENT (test)
85+
select count(distinct val) from test_update_triggers.test;
86+
count
87+
-------
88+
200
89+
(1 row)
90+
91+
truncate test_update_triggers.test;
92+
/*
93+
* Row level triggers
94+
*/
2595
create trigger bu before update ON test_update_triggers.test_1
2696
for each row execute procedure test_update_triggers.test_trigger ();
2797
create trigger bd before delete ON test_update_triggers.test_1
@@ -46,56 +116,74 @@ create trigger ad after delete ON test_update_triggers.test_2
46116
for each row execute procedure test_update_triggers.test_trigger ();
47117
create trigger ai after insert ON test_update_triggers.test_2
48118
for each row execute procedure test_update_triggers.test_trigger ();
119+
/* single value */
49120
insert into test_update_triggers.test values (1);
121+
NOTICE: BEFORE INSERT STATEMENT (test)
50122
NOTICE: BEFORE INSERT ROW (test_1)
51123
NOTICE: AFTER INSERT ROW (test_1)
52-
set pg_pathman.enable_partitionrouter = t;
124+
NOTICE: AFTER INSERT STATEMENT (test)
53125
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
126+
NOTICE: BEFORE UPDATE STATEMENT (test)
54127
NOTICE: BEFORE UPDATE ROW (test_1)
55128
NOTICE: AFTER UPDATE ROW (test_1)
129+
NOTICE: AFTER UPDATE STATEMENT (test)
56130
val | tableoid
57131
-----+-----------------------------
58132
2 | test_update_triggers.test_1
59133
(1 row)
60134

61135
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
136+
NOTICE: BEFORE UPDATE STATEMENT (test)
62137
NOTICE: BEFORE UPDATE ROW (test_1)
63138
NOTICE: BEFORE DELETE ROW (test_1)
64139
NOTICE: BEFORE INSERT ROW (test_2)
65140
NOTICE: AFTER DELETE ROW (test_1)
66141
NOTICE: AFTER INSERT ROW (test_2)
142+
NOTICE: AFTER UPDATE STATEMENT (test)
67143
val | tableoid
68144
-----+-----------------------------
69145
3 | test_update_triggers.test_2
70146
(1 row)
71147

72148
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
149+
NOTICE: BEFORE UPDATE STATEMENT (test)
73150
NOTICE: BEFORE UPDATE ROW (test_2)
74151
NOTICE: AFTER UPDATE ROW (test_2)
152+
NOTICE: AFTER UPDATE STATEMENT (test)
75153
val | tableoid
76154
-----+-----------------------------
77155
4 | test_update_triggers.test_2
78156
(1 row)
79157

80158
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
159+
NOTICE: BEFORE UPDATE STATEMENT (test)
81160
NOTICE: BEFORE UPDATE ROW (test_2)
82161
NOTICE: BEFORE DELETE ROW (test_2)
83162
NOTICE: BEFORE INSERT ROW (test_1)
84163
NOTICE: AFTER DELETE ROW (test_2)
85164
NOTICE: AFTER INSERT ROW (test_1)
165+
NOTICE: AFTER UPDATE STATEMENT (test)
86166
val | tableoid
87167
-----+-----------------------------
88168
5 | test_update_triggers.test_1
89169
(1 row)
90170

91171
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
172+
NOTICE: BEFORE UPDATE STATEMENT (test)
92173
NOTICE: BEFORE UPDATE ROW (test_1)
93174
NOTICE: AFTER UPDATE ROW (test_1)
175+
NOTICE: AFTER UPDATE STATEMENT (test)
94176
val | tableoid
95177
-----+-----------------------------
96178
6 | test_update_triggers.test_1
97179
(1 row)
98180

181+
select count(distinct val) from test_update_triggers.test;
182+
count
183+
-------
184+
1
185+
(1 row)
186+
99187
DROP SCHEMA test_update_triggers CASCADE;
100188
NOTICE: drop cascades to 4 other objects
101189
DROP EXTENSION pg_pathman CASCADE;

‎sql/pathman_update_triggers.sql‎

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,79 @@ begin
2525
$$ language plpgsql;
2626

2727

28+
/* Enable our precious custom node*/
29+
setpg_pathman.enable_partitionrouter= t;
30+
31+
32+
/*
33+
* Statement level triggers
34+
*/
35+
36+
createtriggerbus beforeupdateONtest_update_triggers.test
37+
execute proceduretest_update_triggers.test_trigger ();
38+
createtriggerbds beforedeleteONtest_update_triggers.test
39+
execute proceduretest_update_triggers.test_trigger ();
40+
createtriggerbis before insertONtest_update_triggers.test
41+
execute proceduretest_update_triggers.test_trigger ();
42+
43+
44+
createtriggeraus afterupdateONtest_update_triggers.test
45+
execute proceduretest_update_triggers.test_trigger ();
46+
createtriggerads afterdeleteONtest_update_triggers.test
47+
execute proceduretest_update_triggers.test_trigger ();
48+
createtriggerais after insertONtest_update_triggers.test
49+
execute proceduretest_update_triggers.test_trigger ();
50+
51+
52+
createtriggerbus beforeupdateONtest_update_triggers.test_1
53+
execute proceduretest_update_triggers.test_trigger ();
54+
createtriggerbds beforedeleteONtest_update_triggers.test_1
55+
execute proceduretest_update_triggers.test_trigger ();
56+
createtriggerbis before insertONtest_update_triggers.test_1
57+
execute proceduretest_update_triggers.test_trigger ();
58+
59+
createtriggeraus afterupdateONtest_update_triggers.test_1
60+
execute proceduretest_update_triggers.test_trigger ();
61+
createtriggerads afterdeleteONtest_update_triggers.test_1
62+
execute proceduretest_update_triggers.test_trigger ();
63+
createtriggerais after insertONtest_update_triggers.test_1
64+
execute proceduretest_update_triggers.test_trigger ();
65+
66+
67+
createtriggerbus beforeupdateONtest_update_triggers.test_2
68+
execute proceduretest_update_triggers.test_trigger ();
69+
createtriggerbds beforedeleteONtest_update_triggers.test_2
70+
execute proceduretest_update_triggers.test_trigger ();
71+
createtriggerbis before insertONtest_update_triggers.test_2
72+
execute proceduretest_update_triggers.test_trigger ();
73+
74+
createtriggeraus afterupdateONtest_update_triggers.test_2
75+
execute proceduretest_update_triggers.test_trigger ();
76+
createtriggerads afterdeleteONtest_update_triggers.test_2
77+
execute proceduretest_update_triggers.test_trigger ();
78+
createtriggerais after insertONtest_update_triggers.test_2
79+
execute proceduretest_update_triggers.test_trigger ();
80+
81+
82+
/* multiple values*/
83+
insert intotest_update_triggers.testselect generate_series(1,200);
84+
85+
updatetest_update_triggers.testset val= val+1;
86+
updatetest_update_triggers.testset val= val+1;
87+
updatetest_update_triggers.testset val= val+1;
88+
updatetest_update_triggers.testset val= val+1;
89+
updatetest_update_triggers.testset val= val+1;
90+
91+
selectcount(distinct val)fromtest_update_triggers.test;
92+
93+
94+
truncatetest_update_triggers.test;
95+
96+
97+
/*
98+
* Row level triggers
99+
*/
100+
28101
createtriggerbu beforeupdateONtest_update_triggers.test_1
29102
for each row execute proceduretest_update_triggers.test_trigger ();
30103
createtriggerbd beforedeleteONtest_update_triggers.test_1
@@ -55,15 +128,16 @@ create trigger ai after insert ON test_update_triggers.test_2
55128
for each row execute proceduretest_update_triggers.test_trigger ();
56129

57130

131+
/* single value*/
58132
insert intotest_update_triggers.testvalues (1);
59133

60-
setpg_pathman.enable_partitionrouter= t;
61134
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
62135
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
63136
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
64137
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
65138
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
66139

140+
selectcount(distinct val)fromtest_update_triggers.test;
67141

68142

69143
DROPSCHEMA test_update_triggers CASCADE;

‎src/include/partition_router.h‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,18 @@ typedef struct PartitionRouterState
3535
JunkFilter*junkfilter;/* 'ctid' extraction facility */
3636
ResultRelInfo*current_rri;
3737

38+
/* Machinery required for EvalPlanQual */
3839
EPQStateepqstate;
3940
intepqparam;
4041

41-
ModifyTableState*mt_state;/* need this for a GREAT deal of hackery */
42-
TupleTableSlot*saved_slot;
42+
/* Preserved slot from last call */
43+
boolyielded;
44+
TupleTableSlot*yielded_slot;
45+
46+
/* Need these for a GREAT deal of hackery */
47+
ModifyTableState*mt_state;
48+
boolupdate_stmt_triggers,
49+
insert_stmt_triggers;
4350
}PartitionRouterState;
4451

4552

‎src/partition_filter.c‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -801,8 +801,7 @@ partition_filter_end(CustomScanState *node)
801801
void
802802
partition_filter_rescan(CustomScanState*node)
803803
{
804-
Assert(list_length(node->custom_ps)==1);
805-
ExecReScan((PlanState*)linitial(node->custom_ps));
804+
elog(ERROR,"partition_filter_rescan is not implemented");
806805
}
807806

808807
void

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp