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

Commit0dc040b

Browse files
committed
fix evaluation of expressions with PARAMs in handle_modification_query()
1 parentd0d128d commit0dc040b

File tree

3 files changed

+76
-6
lines changed

3 files changed

+76
-6
lines changed

‎expected/pathman_param_upd_del.out

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,64 @@ EXPLAIN (COSTS OFF) EXECUTE upd(11);
6868
Filter: (key = 11)
6969
(3 rows)
7070

71+
DEALLOCATE upd;
72+
PREPARE upd(INT4) AS UPDATE param_upd_del.test SET val = val + 1 WHERE key = ($1 + 3) * 2;
73+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
74+
QUERY PLAN
75+
----------------------------
76+
Update on test_7
77+
-> Seq Scan on test_7
78+
Filter: (key = 16)
79+
(3 rows)
80+
81+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
82+
QUERY PLAN
83+
----------------------------
84+
Update on test_7
85+
-> Seq Scan on test_7
86+
Filter: (key = 16)
87+
(3 rows)
88+
89+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
90+
QUERY PLAN
91+
----------------------------
92+
Update on test_7
93+
-> Seq Scan on test_7
94+
Filter: (key = 16)
95+
(3 rows)
96+
97+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
98+
QUERY PLAN
99+
----------------------------
100+
Update on test_7
101+
-> Seq Scan on test_7
102+
Filter: (key = 16)
103+
(3 rows)
104+
105+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
106+
QUERY PLAN
107+
----------------------------
108+
Update on test_7
109+
-> Seq Scan on test_7
110+
Filter: (key = 16)
111+
(3 rows)
112+
113+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
114+
QUERY PLAN
115+
----------------------------
116+
Update on test_7
117+
-> Seq Scan on test_7
118+
Filter: (key = 16)
119+
(3 rows)
120+
121+
EXPLAIN (COSTS OFF) EXECUTE upd(6);
122+
QUERY PLAN
123+
----------------------------
124+
Update on test_3
125+
-> Seq Scan on test_3
126+
Filter: (key = 18)
127+
(3 rows)
128+
71129
DEALLOCATE upd;
72130
PREPARE del(INT4) AS DELETE FROM param_upd_del.test WHERE key = $1;
73131
EXPLAIN (COSTS OFF) EXECUTE del(10);

‎sql/pathman_param_upd_del.sql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ EXPLAIN (COSTS OFF) EXECUTE upd(11);
2323
DEALLOCATE upd;
2424

2525

26+
PREPARE upd(INT4)ASUPDATEparam_upd_del.testSET val= val+1WHERE key= ($1+3)*2;
27+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
28+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
29+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
30+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
31+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
32+
EXPLAIN (COSTS OFF) EXECUTE upd(5);
33+
EXPLAIN (COSTS OFF) EXECUTE upd(6);
34+
DEALLOCATE upd;
35+
36+
2637
PREPARE del(INT4)ASDELETEFROMparam_upd_del.testWHERE key= $1;
2738
EXPLAIN (COSTS OFF) EXECUTE del(10);
2839
EXPLAIN (COSTS OFF) EXECUTE del(10);

‎src/planner_tree_modification.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,8 @@ static void
374374
handle_modification_query(Query*parse,transform_query_cxt*context)
375375
{
376376
RangeTblEntry*rte;
377-
Expr*quals;
378377
Oidchild;
378+
Node*quals=parse->jointree->quals;
379379
Indexresult_rti=parse->resultRelation;
380380
ParamListInfoparams=context->query_params;
381381

@@ -390,14 +390,15 @@ handle_modification_query(Query *parse, transform_query_cxt *context)
390390
if (!rte->inh)
391391
return;
392392

393-
quals= (Expr*)eval_const_expressions(NULL,parse->jointree->quals);
394-
395393
/* Check if we can replace PARAMs with CONSTs */
396-
if (params&&clause_contains_params((Node*)quals))
397-
quals= (Expr*)eval_extern_params_mutator((Node*)quals,params);
394+
if (params&&clause_contains_params(quals))
395+
quals=eval_extern_params_mutator(quals,params);
396+
397+
/* Evaluate constaint expressions */
398+
quals=eval_const_expressions(NULL,quals);
398399

399400
/* Parse syntax tree and extract deepest partition if possible */
400-
child=find_deepest_partition(rte->relid,result_rti,quals);
401+
child=find_deepest_partition(rte->relid,result_rti,(Expr*)quals);
401402

402403
/* Substitute parent table with partition */
403404
if (OidIsValid(child))

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp