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

Commitd8be066

Browse files
committed
resolve a small conflict
2 parents526f237 +07bf75f commitd8be066

19 files changed

+1297
-180
lines changed

‎Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ OBJS = src/init.o src/relation_info.o src/utils.o src/partition_filter.o \
55
src/runtimeappend.o src/runtime_merge_append.o src/pg_pathman.o src/rangeset.o\
66
src/pl_funcs.o src/pl_range_funcs.o src/pl_hash_funcs.o src/pathman_workers.o\
77
src/hooks.o src/nodes_common.o src/xact_handling.o src/copy_stmt_hooking.o\
8-
src/pg_compat.o$(WIN32RES)
8+
src/debug_print.o src/pg_compat.o$(WIN32RES)
99

1010
EXTENSION = pg_pathman
1111
EXTVERSION = 1.1

‎src/debug_print.c

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/* ------------------------------------------------------------------------
2+
*
3+
* debug_print.c
4+
*Print sophisticated structs as CSTRING
5+
*
6+
* Copyright (c) 2016, Postgres Professional
7+
*
8+
* ------------------------------------------------------------------------
9+
*/
10+
11+
#include"rangeset.h"
12+
13+
#include"postgres.h"
14+
#include"nodes/bitmapset.h"
15+
#include"nodes/pg_list.h"
16+
#include"lib/stringinfo.h"
17+
18+
19+
/*
20+
* Print Bitmapset as cstring.
21+
*/
22+
#ifdef__GNUC__
23+
__attribute__((unused))
24+
#endif
25+
staticchar*
26+
bms_print(Bitmapset*bms)
27+
{
28+
StringInfoDatastr;
29+
intx;
30+
31+
initStringInfo(&str);
32+
x=-1;
33+
while ((x=bms_next_member(bms,x)) >=0)
34+
appendStringInfo(&str," %d",x);
35+
36+
returnstr.data;
37+
}
38+
39+
/*
40+
* Print list of IndexRanges as cstring.
41+
*/
42+
#ifdef__GNUC__
43+
__attribute__((unused))
44+
#endif
45+
staticchar*
46+
rangeset_print(List*rangeset)
47+
{
48+
StringInfoDatastr;
49+
ListCell*lc;
50+
boolfirst_irange= true;
51+
charlossy='L',/* Lossy IndexRange */
52+
complete='C';/* Complete IndexRange */
53+
54+
initStringInfo(&str);
55+
56+
foreach (lc,rangeset)
57+
{
58+
IndexRangeirange=lfirst_irange(lc);
59+
60+
/* Append comma if needed */
61+
if (!first_irange)
62+
appendStringInfo(&str,", ");
63+
64+
if (!is_irange_valid(irange))
65+
appendStringInfo(&str,"X");
66+
elseif (irange_lower(irange)==irange_upper(irange))
67+
appendStringInfo(&str,"%u%c",
68+
irange_lower(irange),
69+
(is_irange_lossy(irange) ?lossy :complete));
70+
else
71+
appendStringInfo(&str,"[%u-%u]%c",
72+
irange_lower(irange),irange_upper(irange),
73+
(is_irange_lossy(irange) ?lossy :complete));
74+
75+
first_irange= false;
76+
}
77+
78+
returnstr.data;
79+
}
80+
81+
/*
82+
* Print IndexRange struct as cstring.
83+
*/
84+
#ifdef__GNUC__
85+
__attribute__((unused))
86+
#endif
87+
staticchar*
88+
irange_print(IndexRangeirange)
89+
{
90+
StringInfoDatastr;
91+
92+
initStringInfo(&str);
93+
94+
appendStringInfo(&str,"{ valid: %s, lossy: %s, lower: %u, upper: %u }",
95+
(is_irange_valid(irange) ?"true" :"false"),
96+
(is_irange_lossy(irange) ?"true" :"false"),
97+
irange_lower(irange),
98+
irange_upper(irange));
99+
100+
returnstr.data;
101+
}

‎src/hooks.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
256256
rte->inh= true;/* we must restore 'inh' flag! */
257257

258258
children=PrelGetChildrenArray(prel);
259-
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),false));
259+
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_COMPLETE));
260260

261261
/* Make wrappers over restrictions and collect final rangeset */
262262
InitWalkerContext(&context,prel,NULL, false);
@@ -270,7 +270,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
270270

271271
paramsel *=wrap->paramsel;
272272
wrappers=lappend(wrappers,wrap);
273-
ranges=irange_list_intersect(ranges,wrap->rangeset);
273+
ranges=irange_list_intersection(ranges,wrap->rangeset);
274274
}
275275

276276
/* Get number of selected partitions */
@@ -319,7 +319,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
319319
{
320320
IndexRangeirange=lfirst_irange(lc);
321321

322-
for (i=irange.ir_lower;i <=irange.ir_upper;i++)
322+
for (i=irange_lower(irange);i <=irange_upper(irange);i++)
323323
append_child_relation(root,parent_rel,rti,i,children[i],wrappers);
324324
}
325325

‎src/nodes_common.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ get_partition_oids(List *ranges, int *n, const PartRelationInfo *prel,
303303
foreach (range_cell,ranges)
304304
{
305305
uint32i;
306-
uint32a=lfirst_irange(range_cell).ir_lower,
307-
b=lfirst_irange(range_cell).ir_upper;
306+
uint32a=irange_lower(lfirst_irange(range_cell)),
307+
b=irange_upper(lfirst_irange(range_cell));
308308

309309
for (i=a;i <=b;i++)
310310
{
@@ -556,7 +556,7 @@ rescan_append_common(CustomScanState *node)
556556
Assert(prel);
557557

558558
/* First we select all available partitions... */
559-
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),false));
559+
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_COMPLETE));
560560

561561
InitWalkerContext(&wcxt,prel,econtext, false);
562562
foreach (lc,scan_state->custom_exprs)
@@ -565,7 +565,7 @@ rescan_append_common(CustomScanState *node)
565565

566566
/* ... then we cut off irrelevant ones using the provided clauses */
567567
wn=walk_expr_tree((Expr*)lfirst(lc),&wcxt);
568-
ranges=irange_list_intersect(ranges,wn->rangeset);
568+
ranges=irange_list_intersection(ranges,wn->rangeset);
569569
}
570570

571571
/* Get Oids of the required partitions */

‎src/pg_pathman.c

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ handle_modification_query(Query *parse)
327327
return;
328328

329329
/* Parse syntax tree and extract partition ranges */
330-
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),false));
330+
ranges=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_COMPLETE));
331331
expr= (Expr*)eval_const_expressions(NULL,parse->jointree->quals);
332332
if (!expr)
333333
return;
@@ -336,16 +336,16 @@ handle_modification_query(Query *parse)
336336
InitWalkerContext(&context,prel,NULL, false);
337337
wrap=walk_expr_tree(expr,&context);
338338

339-
ranges=irange_list_intersect(ranges,wrap->rangeset);
339+
ranges=irange_list_intersection(ranges,wrap->rangeset);
340340

341341
/* If only one partition is affected then substitute parent table with partition */
342342
if (irange_list_length(ranges)==1)
343343
{
344344
IndexRangeirange=linitial_irange(ranges);
345-
if (irange.ir_lower==irange.ir_upper)
345+
if (irange_lower(irange)==irange_upper(irange))
346346
{
347347
Oid*children=PrelGetChildrenArray(prel);
348-
rte->relid=children[irange.ir_lower];
348+
rte->relid=children[irange_lower(irange)];
349349
rte->inh= false;
350350
}
351351
}
@@ -688,7 +688,7 @@ walk_expr_tree(Expr *expr, WalkerContext *context)
688688
result->paramsel=1.0;
689689

690690
result->rangeset=list_make1_irange(
691-
make_irange(0,PrelLastChild(context->prel),true));
691+
make_irange(0,PrelLastChild(context->prel),IR_LOSSY));
692692

693693
returnresult;
694694
}
@@ -1077,14 +1077,18 @@ select_range_partitions(const Datum value,
10771077
if ((cmp_min<0&&strategy==BTGreaterStrategyNumber)||
10781078
(cmp_min <=0&&strategy==BTGreaterEqualStrategyNumber))
10791079
{
1080-
result->rangeset=list_make1_irange(make_irange(startidx,endidx, false));
1080+
result->rangeset=list_make1_irange(make_irange(startidx,
1081+
endidx,
1082+
IR_COMPLETE));
10811083
return;
10821084
}
10831085

10841086
if (cmp_max >=0&& (strategy==BTLessEqualStrategyNumber||
10851087
strategy==BTLessStrategyNumber))
10861088
{
1087-
result->rangeset=list_make1_irange(make_irange(startidx,endidx, false));
1089+
result->rangeset=list_make1_irange(make_irange(startidx,
1090+
endidx,
1091+
IR_COMPLETE));
10881092
return;
10891093
}
10901094
}
@@ -1145,39 +1149,39 @@ select_range_partitions(const Datum value,
11451149
caseBTLessEqualStrategyNumber:
11461150
if (lossy)
11471151
{
1148-
result->rangeset=list_make1_irange(make_irange(i,i,true));
1152+
result->rangeset=list_make1_irange(make_irange(i,i,IR_LOSSY));
11491153
if (i>0)
1150-
result->rangeset=lcons_irange(make_irange(0,i-1,false),
1154+
result->rangeset=lcons_irange(make_irange(0,i-1,IR_COMPLETE),
11511155
result->rangeset);
11521156
}
11531157
else
11541158
{
1155-
result->rangeset=list_make1_irange(make_irange(0,i,false));
1159+
result->rangeset=list_make1_irange(make_irange(0,i,IR_COMPLETE));
11561160
}
11571161
break;
11581162

11591163
caseBTEqualStrategyNumber:
1160-
result->rangeset=list_make1_irange(make_irange(i,i,true));
1164+
result->rangeset=list_make1_irange(make_irange(i,i,IR_LOSSY));
11611165
break;
11621166

11631167
caseBTGreaterEqualStrategyNumber:
11641168
caseBTGreaterStrategyNumber:
11651169
if (lossy)
11661170
{
1167-
result->rangeset=list_make1_irange(make_irange(i,i,true));
1171+
result->rangeset=list_make1_irange(make_irange(i,i,IR_LOSSY));
11681172
if (i<nranges-1)
11691173
result->rangeset=
11701174
lappend_irange(result->rangeset,
11711175
make_irange(i+1,
11721176
nranges-1,
1173-
false));
1177+
IR_COMPLETE));
11741178
}
11751179
else
11761180
{
11771181
result->rangeset=
11781182
list_make1_irange(make_irange(i,
11791183
nranges-1,
1180-
false));
1184+
IR_COMPLETE));
11811185
}
11821186
break;
11831187

@@ -1237,7 +1241,7 @@ handle_binary_opexpr(WalkerContext *context, WrapperNode *result,
12371241
PrelChildrenCount(prel));
12381242

12391243
result->paramsel=estimate_paramsel_using_prel(prel,strategy);
1240-
result->rangeset=list_make1_irange(make_irange(idx,idx,true));
1244+
result->rangeset=list_make1_irange(make_irange(idx,idx,IR_LOSSY));
12411245

12421246
return;/* exit on equal */
12431247
}
@@ -1263,7 +1267,7 @@ handle_binary_opexpr(WalkerContext *context, WrapperNode *result,
12631267
}
12641268

12651269
binary_opexpr_return:
1266-
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),true));
1270+
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_LOSSY));
12671271
result->paramsel=1.0;
12681272
}
12691273

@@ -1289,7 +1293,7 @@ handle_binary_opexpr_param(const PartRelationInfo *prel,
12891293
tce=lookup_type_cache(vartype,TYPECACHE_BTREE_OPFAMILY);
12901294
strategy=get_op_opfamily_strategy(expr->opno,tce->btree_opf);
12911295

1292-
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),true));
1296+
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_LOSSY));
12931297
result->paramsel=estimate_paramsel_using_prel(prel,strategy);
12941298
}
12951299

@@ -1353,13 +1357,13 @@ search_range_partition_eq(const Datum value,
13531357
IndexRangeirange=linitial_irange(result.rangeset);
13541358

13551359
Assert(list_length(result.rangeset)==1);
1356-
Assert(irange.ir_lower==irange.ir_upper);
1357-
Assert(irange.ir_valid);
1360+
Assert(irange_lower(irange)==irange_upper(irange));
1361+
Assert(is_irange_valid(irange));
13581362

13591363
/* Write result to the 'out_rentry' if necessary */
13601364
if (out_re)
13611365
memcpy((void*)out_re,
1362-
(constvoid*)&ranges[irange.ir_lower],
1366+
(constvoid*)&ranges[irange_lower(irange)],
13631367
sizeof(RangeEntry));
13641368

13651369
returnSEARCH_RANGEREL_FOUND;
@@ -1408,7 +1412,7 @@ handle_const(const Const *c, WalkerContext *context)
14081412
PrelChildrenCount(prel));
14091413

14101414
result->paramsel=estimate_paramsel_using_prel(prel,strategy);
1411-
result->rangeset=list_make1_irange(make_irange(idx,idx,true));
1415+
result->rangeset=list_make1_irange(make_irange(idx,idx,IR_LOSSY));
14121416
}
14131417
break;
14141418

@@ -1469,7 +1473,7 @@ handle_opexpr(const OpExpr *expr, WalkerContext *context)
14691473
}
14701474
}
14711475

1472-
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),true));
1476+
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_LOSSY));
14731477
result->paramsel=1.0;
14741478
returnresult;
14751479
}
@@ -1542,7 +1546,7 @@ handle_boolexpr(const BoolExpr *expr, WalkerContext *context)
15421546
if (expr->boolop==AND_EXPR)
15431547
result->rangeset=list_make1_irange(make_irange(0,
15441548
PrelLastChild(prel),
1545-
false));
1549+
IR_COMPLETE));
15461550
else
15471551
result->rangeset=NIL;
15481552

@@ -1561,15 +1565,15 @@ handle_boolexpr(const BoolExpr *expr, WalkerContext *context)
15611565
break;
15621566

15631567
caseAND_EXPR:
1564-
result->rangeset=irange_list_intersect(result->rangeset,
1565-
arg->rangeset);
1568+
result->rangeset=irange_list_intersection(result->rangeset,
1569+
arg->rangeset);
15661570
result->paramsel *=arg->paramsel;
15671571
break;
15681572

15691573
default:
15701574
result->rangeset=list_make1_irange(make_irange(0,
15711575
PrelLastChild(prel),
1572-
false));
1576+
IR_COMPLETE));
15731577
break;
15741578
}
15751579
}
@@ -1580,8 +1584,8 @@ handle_boolexpr(const BoolExpr *expr, WalkerContext *context)
15801584

15811585
foreach (lc,result->args)
15821586
{
1583-
WrapperNode*arg= (WrapperNode*)lfirst(lc);
1584-
intlen=irange_list_length(arg->rangeset);
1587+
WrapperNode*arg= (WrapperNode*)lfirst(lc);
1588+
intlen=irange_list_length(arg->rangeset);
15851589

15861590
result->paramsel *= (1.0-arg->paramsel* (double)len / (double)totallen);
15871591
}
@@ -1671,7 +1675,7 @@ handle_arrexpr(const ScalarArrayOpExpr *expr, WalkerContext *context)
16711675
idx=hash_to_part_index(DatumGetUInt32(value),
16721676
PrelChildrenCount(prel));
16731677

1674-
irange=list_make1_irange(make_irange(idx,idx,true));
1678+
irange=list_make1_irange(make_irange(idx,idx,IR_LOSSY));
16751679
}
16761680
/* No children if Const is NULL */
16771681
elseirange=NIL;
@@ -1740,7 +1744,7 @@ handle_arrexpr(const ScalarArrayOpExpr *expr, WalkerContext *context)
17401744
result->paramsel=DEFAULT_INEQ_SEL;
17411745

17421746
handle_arrexpr_return:
1743-
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),true));
1747+
result->rangeset=list_make1_irange(make_irange(0,PrelLastChild(prel),IR_LOSSY));
17441748
result->paramsel=1.0;
17451749
returnresult;
17461750
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp