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

Commitfbfd149

Browse files
committed
resolve conflicts caused by a merge of PostgreSQL 9.6 compatibility fixes
2 parentse8a47aa +e999b86 commitfbfd149

File tree

11 files changed

+265
-79
lines changed

11 files changed

+265
-79
lines changed

‎.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ before_install:
1414
-sudo sh ./travis/apt.postgresql.org.sh
1515

1616
env:
17+
-PGVERSION=9.6 CHECK_CODE=true
18+
-PGVERSION=9.6 CHECK_CODE=false
1719
-PGVERSION=9.5 CHECK_CODE=true
1820
-PGVERSION=9.5 CHECK_CODE=false
1921

‎Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ MODULE_big = pg_pathman
44
OBJS = src/init.o src/relation_info.o src/utils.o src/partition_filter.o src/runtimeappend.o\
55
src/runtime_merge_append.o src/pg_pathman.o src/dsm_array.o src/rangeset.o src/pl_funcs.o\
66
src/pathman_workers.o src/hooks.o src/nodes_common.o src/xact_handling.o src/copy_stmt_hooking.o\
7-
$(WIN32RES)
7+
src/pg_compat.o$(WIN32RES)
88

99
EXTENSION = pg_pathman
1010
EXTVERSION = 1.0

‎range.sql

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ DECLARE
9191
v_rows_countINTEGER;
9292
v_maxp_start_value%TYPE;
9393
v_cur_valuep_start_value%TYPE := p_start_value;
94+
p_end_valuep_start_value%TYPE;
9495
iINTEGER;
9596

9697
BEGIN
@@ -132,12 +133,19 @@ BEGIN
132133
* and specifies partition count as 0 then do not check boundaries
133134
*/
134135
IF p_count!=0 THEN
136+
/* compute right bound of partitioning through additions*/
137+
p_end_value := p_start_value;
138+
FOR iIN1..p_count
139+
LOOP
140+
p_end_value := p_end_value+ p_interval;
141+
END LOOP;
142+
135143
/* Check boundaries*/
136144
EXECUTE format('SELECT @extschema@.check_boundaries(''%s'',''%s'',''%s'',''%s''::%s)',
137145
parent_relid,
138146
p_attribute,
139147
p_start_value,
140-
p_start_value+ p_interval* p_count,
148+
p_end_value,
141149
@extschema@.get_base_type(pg_typeof(p_start_value))::TEXT);
142150
END IF;
143151

@@ -195,6 +203,7 @@ DECLARE
195203
v_rows_countINTEGER;
196204
v_maxp_start_value%TYPE;
197205
v_cur_valuep_start_value%TYPE := p_start_value;
206+
p_end_valuep_start_value%TYPE;
198207
iINTEGER;
199208

200209
BEGIN
@@ -240,11 +249,18 @@ BEGIN
240249
* and specifies partition count as 0 then do not check boundaries
241250
*/
242251
IF p_count!=0 THEN
252+
/* compute right bound of partitioning through additions*/
253+
p_end_value := p_start_value;
254+
FOR iIN1..p_count
255+
LOOP
256+
p_end_value := p_end_value+ p_interval;
257+
END LOOP;
258+
243259
/* check boundaries*/
244260
PERFORM @extschema@.check_boundaries(parent_relid,
245261
p_attribute,
246262
p_start_value,
247-
p_start_value+ p_interval* p_count);
263+
p_end_value);
248264
END IF;
249265

250266
/* Create sequence for child partitions names*/

‎src/hooks.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include"hooks.h"
1313
#include"init.h"
1414
#include"partition_filter.h"
15+
#include"pg_compat.h"
1516
#include"runtimeappend.h"
1617
#include"runtime_merge_append.h"
1718
#include"utils.h"
@@ -169,12 +170,12 @@ pathman_join_pathlist_hook(PlannerInfo *root,
169170
* Currently we use get_parameterized_joinrel_size() since
170171
* it works just fine, but this might change some day.
171172
*/
172-
nest_path->path.rows=get_parameterized_joinrel_size(root,
173-
joinrel,
174-
outer->rows,
175-
inner->rows,
176-
extra->sjinfo,
177-
filtered_joinclauses);
173+
nest_path->path.rows=get_parameterized_joinrel_size_compat(root,
174+
joinrel,
175+
outer,
176+
inner,
177+
extra->sjinfo,
178+
filtered_joinclauses);
178179

179180
/* Finally we can add the new NestLoop path */
180181
add_path(joinrel, (Path*)nest_path);
@@ -183,7 +184,10 @@ pathman_join_pathlist_hook(PlannerInfo *root,
183184

184185
/* Cope with simple relations */
185186
void
186-
pathman_rel_pathlist_hook(PlannerInfo*root,RelOptInfo*rel,Indexrti,RangeTblEntry*rte)
187+
pathman_rel_pathlist_hook(PlannerInfo*root,
188+
RelOptInfo*rel,
189+
Indexrti,
190+
RangeTblEntry*rte)
187191
{
188192
constPartRelationInfo*prel;
189193
RangeTblEntry**new_rte_array;
@@ -315,15 +319,16 @@ pathman_rel_pathlist_hook(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTb
315319
IndexRangeirange=lfirst_irange(lc);
316320

317321
for (i=irange.ir_lower;i <=irange.ir_upper;i++)
318-
append_child_relation(root,rel,rti,rte,i,children[i],wrappers);
322+
append_child_relation(root,rel,rti,rte,i,children[i],
323+
wrappers);
319324
}
320325

321326
/* Clear old path list */
322327
list_free(rel->pathlist);
323328

324329
rel->pathlist=NIL;
325330
set_append_rel_pathlist(root,rel,rti,rte,pathkeyAsc,pathkeyDesc);
326-
set_append_rel_size(root,rel,rti,rte);
331+
set_append_rel_size_compat(root,rel,rti,rte);
327332

328333
/* No need to go further (both nodes are disabled), return */
329334
if (!(pg_pathman_enable_runtimeappend||

‎src/init.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
#include"utils/syscache.h"
3939
#include"utils/typcache.h"
4040

41+
#ifPG_VERSION_NUM >=90600
42+
#include"catalog/pg_constraint_fn.h"
43+
#endif
44+
4145

4246
/* Help user in case of emergency */
4347
#defineINIT_ERROR_HINT "pg_pathman will be disabled to allow you to resolve this issue"

‎src/nodes_common.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
#include"commands/explain.h"
1818
#include"optimizer/planner.h"
1919

20+
#ifPG_VERSION_NUM >=90600
21+
#include"nodes/extensible.h"
22+
#endif
23+
2024

2125
/*
2226
* Common structure for storing selected

‎src/partition_filter.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
#include"commands/explain.h"
1919
#include"optimizer/planner.h"
2020

21+
#ifPG_VERSION_NUM >=90600
22+
#include"nodes/extensible.h"
23+
#endif
24+
2125

2226
#defineERR_PART_ATTR_NULL"partitioned column's value should not be NULL"
2327
#defineERR_PART_ATTR_NO_PART"no suitable partition for key '%s'"

‎src/pg_compat.c

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/* ------------------------------------------------------------------------
2+
*
3+
* pg_compat.c
4+
*Compatibility tools
5+
*
6+
* Copyright (c) 2016, Postgres Professional
7+
*
8+
* ------------------------------------------------------------------------
9+
*/
10+
11+
#include"pg_compat.h"
12+
13+
#include"optimizer/pathnode.h"
14+
#include"port.h"
15+
#include"utils.h"
16+
17+
#include<math.h>
18+
19+
20+
void
21+
set_append_rel_size_compat(PlannerInfo*root,RelOptInfo*rel,
22+
Indexrti,RangeTblEntry*rte)
23+
{
24+
doubleparent_rows=0;
25+
doubleparent_size=0;
26+
ListCell*l;
27+
28+
foreach(l,root->append_rel_list)
29+
{
30+
AppendRelInfo*appinfo= (AppendRelInfo*)lfirst(l);
31+
IndexchildRTindex,
32+
parentRTindex=rti;
33+
RelOptInfo*childrel;
34+
35+
/* append_rel_list contains all append rels; ignore others */
36+
if (appinfo->parent_relid!=parentRTindex)
37+
continue;
38+
39+
childRTindex=appinfo->child_relid;
40+
41+
childrel=find_base_rel(root,childRTindex);
42+
Assert(childrel->reloptkind==RELOPT_OTHER_MEMBER_REL);
43+
44+
/*
45+
* Accumulate size information from each live child.
46+
*/
47+
Assert(childrel->rows>0);
48+
49+
parent_rows+=childrel->rows;
50+
#ifPG_VERSION_NUM >=90600
51+
parent_size+=childrel->reltarget->width*childrel->rows;
52+
#else
53+
parent_size+=childrel->width*childrel->rows;
54+
#endif
55+
}
56+
57+
rel->rows=parent_rows;
58+
#ifPG_VERSION_NUM >=90600
59+
rel->reltarget->width=rint(parent_size /parent_rows);
60+
#else
61+
rel->width=rint(parent_size /parent_rows);
62+
#endif
63+
rel->tuples=parent_rows;
64+
}
65+
66+
extern
67+
voidcopy_targetlist_compat(RelOptInfo*dest,RelOptInfo*rel)
68+
{
69+
ListCell*lc;
70+
71+
#ifPG_VERSION_NUM >=90600
72+
dest->reltarget->exprs=NIL;
73+
foreach(lc,rel->reltarget->exprs)
74+
#else
75+
dest->reltargetlist=NIL;
76+
foreach(lc,rel->reltargetlist)
77+
#endif
78+
{
79+
Node*new_target;
80+
Node*node;
81+
82+
node= (Node*)lfirst(lc);
83+
new_target=copyObject(node);
84+
change_varnos(new_target,rel->relid,dest->relid);
85+
#ifPG_VERSION_NUM >=90600
86+
dest->reltarget->exprs=lappend(dest->reltarget->exprs,new_target);
87+
#else
88+
dest->reltargetlist=lappend(dest->reltargetlist,new_target);
89+
#endif
90+
}
91+
}
92+
93+
#ifPG_VERSION_NUM >=90600
94+
/*
95+
* make_result
96+
* Build a Result plan node
97+
*/
98+
Result*
99+
make_result(List*tlist,
100+
Node*resconstantqual,
101+
Plan*subplan)
102+
{
103+
Result*node=makeNode(Result);
104+
Plan*plan=&node->plan;
105+
106+
plan->targetlist=tlist;
107+
plan->qual=NIL;
108+
plan->lefttree=subplan;
109+
plan->righttree=NULL;
110+
node->resconstantqual=resconstantqual;
111+
112+
returnnode;
113+
}
114+
#endif

‎src/pg_compat.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/* ------------------------------------------------------------------------
2+
*
3+
* pg_compat.h
4+
*Compatibility tools
5+
*
6+
* Copyright (c) 2016, Postgres Professional
7+
*
8+
* ------------------------------------------------------------------------
9+
*/
10+
11+
#ifndefPG_COMPAT_H
12+
#definePG_COMPAT_H
13+
14+
#include"postgres.h"
15+
16+
#include"nodes/relation.h"
17+
#include"nodes/pg_list.h"
18+
#include"optimizer/cost.h"
19+
#include"optimizer/paths.h"
20+
21+
22+
externvoidset_append_rel_size_compat(PlannerInfo*root,RelOptInfo*rel,
23+
Indexrti,RangeTblEntry*rte);
24+
externvoidcopy_targetlist_compat(RelOptInfo*dest,RelOptInfo*rel);
25+
26+
#ifPG_VERSION_NUM >=90600
27+
28+
#defineget_parameterized_joinrel_size_compat(root,rel,outer_path, \
29+
inner_path,sjinfo, \
30+
restrict_clauses) \
31+
get_parameterized_joinrel_size(root, rel, outer_path, \
32+
inner_path, sjinfo, \
33+
restrict_clauses)
34+
35+
#definecheck_index_predicates_compat(rool,rel) \
36+
check_index_predicates(root, rel)
37+
38+
#definecreate_append_path_compat(rel,subpaths,required_outer,parallel_workers) \
39+
create_append_path(rel, subpaths, required_outer, parallel_workers)
40+
41+
#definepull_var_clause_compat(node,aggbehavior,phbehavior) \
42+
pull_var_clause(node, aggbehavior | phbehavior)
43+
44+
externResult*make_result(List*tlist,Node*resconstantqual,Plan*subplan);
45+
#definemake_result_compat(root,tlist,resconstantqual,subplan) \
46+
make_result(tlist, resconstantqual, subplan)
47+
48+
#else/* PG_VERSION_NUM >= 90500 */
49+
50+
#defineget_parameterized_joinrel_size_compat(root,rel, \
51+
outer_path, \
52+
inner_path, \
53+
sjinfo,restrict_clauses) \
54+
get_parameterized_joinrel_size(root, rel, \
55+
(outer_path)->rows, \
56+
(inner_path)->rows, \
57+
sjinfo, restrict_clauses)
58+
59+
#definecheck_index_predicates_compat(rool,rel) \
60+
check_partial_indexes(root, rel)
61+
62+
#definecreate_append_path_compat(rel,subpaths,required_outer,parallel_workers) \
63+
create_append_path(rel, subpaths, required_outer)
64+
65+
#definepull_var_clause_compat(node,aggbehavior,phbehavior) \
66+
pull_var_clause(node, aggbehavior, phbehavior)
67+
68+
#definemake_result_compat(root,tlist,resconstantqual,subplan) \
69+
make_result(root, tlist, resconstantqual, subplan)
70+
71+
#endif
72+
73+
74+
#endif/* PG_COMPAT_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp