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

Commit7469e15

Browse files
committed
Bugfix for GROUP BY on expression problem.
Problematic query was: SELECT count(*) FROM pt group by pt.id + 1;
1 parent0a5f57d commit7469e15

File tree

5 files changed

+23
-15
lines changed

5 files changed

+23
-15
lines changed

‎contrib/pg_exchange/exchange.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ EXCHANGE_Init_methods(void)
197197
/* Initialize path generator methods */
198198
exchange_path_methods.CustomName=EXCHANGEPATHNAME;
199199
exchange_path_methods.PlanCustomPath=ExchangePlanCustomPath;
200-
exchange_path_methods.ReparameterizeCustomPathByChild=NULL;
200+
exchange_path_methods.ReparameterizeCustomPathByChild=NULL;
201201

202202
exchange_plan_methods.CustomName="ExchangePlan";
203203
exchange_plan_methods.CreateCustomScanState=EXCHANGE_Create_state;
@@ -399,7 +399,7 @@ add_exchange_paths(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry
399399
EXCH_GATHER);
400400
set_exchange_altrel(EXCH_GATHER, (ExchangePath*)path,rel,NULL,NULL,
401401
servers);
402-
path=create_distexec_path(root,rel,path,servers);
402+
path=(Path*)create_distexec_path(root,rel,path,servers);
403403
add_path(rel,path);
404404
}
405405
}
@@ -713,7 +713,6 @@ create_exchange_path(PlannerInfo *root, RelOptInfo *rel, Path *children,
713713
pathnode->pathkeys=NIL;
714714

715715
path->flags=0;
716-
/* Contains only one path */
717716
path->custom_paths=lappend(path->custom_paths,children);
718717

719718
path->custom_private=NIL;
@@ -790,6 +789,7 @@ make_exchange(List *custom_plans, List *tlist)
790789
{
791790
CustomScan*node=makeNode(CustomScan);
792791
Plan*plan=&node->scan.plan;
792+
List*child_tlist;
793793

794794
plan->startup_cost=1;
795795
plan->total_cost=1;
@@ -804,9 +804,10 @@ make_exchange(List *custom_plans, List *tlist)
804804

805805
/* Setup methods and child plan */
806806
node->methods=&exchange_plan_methods;
807-
node->custom_scan_tlist=tlist;
808807
node->scan.scanrelid=0;
809808
node->custom_plans=custom_plans;
809+
child_tlist= ((Plan*)linitial(node->custom_plans))->targetlist;
810+
node->custom_scan_tlist=child_tlist;
810811
node->custom_exprs=NIL;
811812
node->custom_private=NIL;
812813

‎contrib/pg_exchange/hooks.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ create_distributed_join_paths(PlannerInfo *root, RelOptInfo *joinrel,
226226
&inn_child->altrel,extra->restrictlist,
227227
bms_union(inner_servers,outer_servers));
228228
Assert(gather->altrel.part_scheme!=NULL);
229-
path=create_distexec_path(root,gather->cp.path.parent, (Path*)gather,
229+
path=(Path*)create_distexec_path(root,joinrel, (Path*)gather,
230230
bms_union(inner_servers,outer_servers));
231231
dist_paths=lappend(dist_paths,path);
232232
list_free(outerrel->pathlist);

‎contrib/pg_exchange/nodeDistPlanExec.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ DistExec_Init_methods(void)
412412
/* Initialize path generator methods */
413413
distplanexec_path_methods.CustomName=DISTEXECPATHNAME;
414414
distplanexec_path_methods.PlanCustomPath=CreateDistExecPlan;
415-
distplanexec_path_methods.ReparameterizeCustomPathByChild=NULL;
415+
distplanexec_path_methods.ReparameterizeCustomPathByChild=NULL;
416416

417417
distplanexec_plan_methods.CustomName="DistExecPlan";
418418
distplanexec_plan_methods.CreateCustomScanState=CreateDistPlanExecState;
@@ -440,6 +440,7 @@ make_distplanexec(List *custom_plans, List *tlist, List *private_data)
440440
CustomScan*node=makeNode(CustomScan);
441441
Plan*plan=&node->scan.plan;
442442
ListCell*lc;
443+
List*child_tlist;
443444

444445
plan->startup_cost=10;
445446
plan->total_cost=10;
@@ -454,9 +455,11 @@ make_distplanexec(List *custom_plans, List *tlist, List *private_data)
454455

455456
/* Setup methods and child plan */
456457
node->methods=&distplanexec_plan_methods;
457-
node->custom_scan_tlist=tlist;
458458
node->scan.scanrelid=0;
459459
node->custom_plans=custom_plans;
460+
461+
child_tlist= ((Plan*)linitial(node->custom_plans))->targetlist;
462+
node->custom_scan_tlist=child_tlist;
460463
node->custom_exprs=NIL;
461464
node->custom_private=NIL;
462465

@@ -471,7 +474,7 @@ make_distplanexec(List *custom_plans, List *tlist, List *private_data)
471474
returnnode;
472475
}
473476

474-
Path*
477+
CustomPath*
475478
create_distexec_path(PlannerInfo*root,RelOptInfo*rel,Path*children,
476479
Bitmapset*servers)
477480
{
@@ -480,27 +483,29 @@ create_distexec_path(PlannerInfo *root, RelOptInfo *rel, Path *children,
480483
intmember=-1;
481484

482485
pathnode->pathtype=T_CustomScan;
483-
pathnode->parent=rel;
484486
pathnode->pathtarget=rel->reltarget;
485487
pathnode->param_info=NULL;
488+
pathnode->parent=rel;
486489

487490
pathnode->parallel_aware= false;/* permanently */
488491
pathnode->parallel_safe= false;/* permanently */
489492
pathnode->parallel_workers=0;/* permanently */
490493
pathnode->pathkeys=NIL;
491494

492-
pathnode->rows=rel->tuples;
493-
pathnode->startup_cost=10;
494-
pathnode->total_cost=10;
495-
496495
path->flags=0;
497496
path->custom_paths=lappend(path->custom_paths,children);
497+
path->custom_private=NIL;
498498

499499
while ((member=bms_next_member(servers,member)) >=0)
500500
path->custom_private=lappend_oid(path->custom_private, (Oid)member);
501501

502502
path->methods=&distplanexec_path_methods;
503-
returnpathnode;
503+
504+
pathnode->rows=children->rows;
505+
pathnode->startup_cost=100.;
506+
pathnode->total_cost=pathnode->startup_cost;
507+
508+
returnpath;
504509
}
505510

506511
bool

‎contrib/pg_exchange/nodeDistPlanExec.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ extern char destsName[10];
3434
externBitmapset*extractForeignServers(CustomPath*path);
3535
externvoidDistExec_Init_methods(void);
3636
externCustomScan*make_distplanexec(List*custom_plans,List*tlist,List*private_data);
37-
externPath*create_distexec_path(PlannerInfo*root,RelOptInfo*rel,
37+
externCustomPath*create_distexec_path(PlannerInfo*root,RelOptInfo*rel,
3838
Path*children,Bitmapset*servers);
3939
externboollocalize_plan(PlanState*node,lcontext*context);
4040
externvoidFSExtractServerName(Oidfsid,char**host,int*port);

‎contrib/pg_execplan/tests/test.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ SELECT count(*) FROM pt,rt WHERE pt.id=rt.id;
88
SELECTcount(*)FROM pt,rt,stWHEREpt.id=rt.idandrt.id=st.id;
99
SELECTcount(*)FROM pt,rt,stWHEREpt.id=rt.idandrt.id=st.payload;
1010
SELECTcount(*)FROM pt,rt,stWHEREpt.id=rt.payloadandrt.id=st.payload;
11+
SELECTcount(*)FROM ptgroup bypt.id;
12+
SELECTcount(*)FROM ptgroup bypt.id+1;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp