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

Commitabee4c2

Browse files
committed
Remove extraneous SeqScan node that make_noname was inserting
above a Sort or Materialize node. As far as I can tell, the only placethat actually needed that was set_tlist_references, which was being lazyabout checking to see if it had a noname node to fix or not...
1 parent6defe49 commitabee4c2

File tree

2 files changed

+32
-40
lines changed

2 files changed

+32
-40
lines changed

‎src/backend/optimizer/plan/createplan.c

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.72 1999/08/16 23:07:20 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.73 1999/08/18 04:15:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -895,9 +895,7 @@ copy_costsize(Plan *dest, Plan *src)
895895

896896
/*
897897
* make_noname
898-
* Create plan nodes to sort or materialize relations into noname. The
899-
* result returned for a sort will look like (SEQSCAN(SORT(plan_node)))
900-
* or (SEQSCAN(MATERIAL(plan_node)))
898+
* Create plan node to sort or materialize relations into noname.
901899
*
902900
* 'tlist' is the target list of the scan to be sorted or materialized
903901
* 'pathkeys' is the list of pathkeys by which the result is to be sorted
@@ -911,8 +909,7 @@ make_noname(List *tlist,
911909
{
912910
List*noname_tlist;
913911
intnumsortkeys;
914-
Plan*tmpplan;
915-
Noname*retval;
912+
Plan*retval;
916913

917914
/* Create a new target list for the noname, with sort keys set. */
918915
noname_tlist=new_unsorted_tlist(tlist);
@@ -921,27 +918,21 @@ make_noname(List *tlist,
921918
if (numsortkeys>0)
922919
{
923920
/* need to sort */
924-
tmpplan= (Plan*)make_sort(noname_tlist,
925-
_NONAME_RELATION_ID_,
926-
plan_node,
927-
numsortkeys);
921+
retval= (Plan*)make_sort(noname_tlist,
922+
_NONAME_RELATION_ID_,
923+
plan_node,
924+
numsortkeys);
928925
}
929926
else
930927
{
931928
/* no sort */
932-
tmpplan= (Plan*)make_material(noname_tlist,
933-
_NONAME_RELATION_ID_,
934-
plan_node,
935-
0);
929+
retval= (Plan*)make_material(noname_tlist,
930+
_NONAME_RELATION_ID_,
931+
plan_node,
932+
0);
936933
}
937934

938-
/* Return a seqscan using the original tlist */
939-
retval= (Noname*)make_seqscan(tlist,
940-
NIL,
941-
_NONAME_RELATION_ID_,
942-
tmpplan);
943-
944-
returnretval;
935+
return (Noname*)retval;
945936
}
946937

947938

‎src/backend/optimizer/plan/setrefs.c

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.54 1999/08/09 00:56:05 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.55 1999/08/18 04:15:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -82,10 +82,10 @@ set_tlist_references(Plan *plan)
8282

8383
if (IsA_Join(plan))
8484
set_join_tlist_references((Join*)plan);
85-
elseif (IsA(plan,SeqScan)&&plan->lefttree&&
85+
elseif (IsA(plan,SeqScan)&&plan->lefttree&&
8686
IsA_Noname(plan->lefttree))
8787
set_nonamescan_tlist_references((SeqScan*)plan);
88-
elseif (IsA(plan,Sort))
88+
elseif (IsA_Noname(plan))
8989
set_noname_tlist_references((Noname*)plan);
9090
elseif (IsA(plan,Result))
9191
set_result_tlist_references((Result*)plan);
@@ -112,12 +112,12 @@ set_tlist_references(Plan *plan)
112112
staticvoid
113113
set_join_tlist_references(Join*join)
114114
{
115-
Plan*outer=((Plan*)join)->lefttree;
116-
Plan*inner=((Plan*)join)->righttree;
115+
Plan*outer=join->lefttree;
116+
Plan*inner=join->righttree;
117117
List*outer_tlist= ((outer==NULL) ?NIL :outer->targetlist);
118118
List*inner_tlist= ((inner==NULL) ?NIL :inner->targetlist);
119119
List*new_join_targetlist=NIL;
120-
List*qptlist=((Plan*)join)->targetlist;
120+
List*qptlist=join->targetlist;
121121
List*entry;
122122

123123
foreach(entry,qptlist)
@@ -130,18 +130,16 @@ set_join_tlist_references(Join *join)
130130
new_join_targetlist=lappend(new_join_targetlist,
131131
makeTargetEntry(xtl->resdom,joinexpr));
132132
}
133+
join->targetlist=new_join_targetlist;
133134

134-
((Plan*)join)->targetlist=new_join_targetlist;
135-
if (outer!=NULL)
136-
set_tlist_references(outer);
137-
if (inner!=NULL)
138-
set_tlist_references(inner);
135+
set_tlist_references(outer);
136+
set_tlist_references(inner);
139137
}
140138

141139
/*
142140
* set_nonamescan_tlist_references
143141
* Modifies the target list of a node that scans a noname relation (i.e., a
144-
* sort orhash node) so that the varnos refer to the child noname.
142+
* sort ormaterialize node) so that the varnos refer to the child noname.
145143
*
146144
* 'nonamescan' is a seqscan node
147145
*
@@ -151,10 +149,13 @@ set_join_tlist_references(Join *join)
151149
staticvoid
152150
set_nonamescan_tlist_references(SeqScan*nonamescan)
153151
{
154-
Noname*noname= (Noname*)((Plan*)nonamescan)->lefttree;
152+
Noname*noname= (Noname*)nonamescan->plan.lefttree;
155153

156-
((Plan*)nonamescan)->targetlist=tlist_noname_references(noname->nonameid,
157-
((Plan*)nonamescan)->targetlist);
154+
nonamescan->plan.targetlist=tlist_noname_references(noname->nonameid,
155+
nonamescan->plan.targetlist);
156+
/* since we know child is a Noname, skip recursion through
157+
* set_tlist_references() and just get the job done
158+
*/
158159
set_noname_tlist_references(noname);
159160
}
160161

@@ -164,21 +165,21 @@ set_nonamescan_tlist_references(SeqScan *nonamescan)
164165
* modified version of the target list of the node from which noname node
165166
* receives its tuples.
166167
*
167-
* 'noname' is a noname (e.g., sort,hash) plan node
168+
* 'noname' is a noname (e.g., sort,materialize) plan node
168169
*
169170
* Returns nothing of interest, but modifies internal fields of nodes.
170171
*
171172
*/
172173
staticvoid
173174
set_noname_tlist_references(Noname*noname)
174175
{
175-
Plan*source=((Plan*)noname)->lefttree;
176+
Plan*source=noname->plan.lefttree;
176177

177178
if (source!=NULL)
178179
{
179180
set_tlist_references(source);
180-
((Plan*)noname)->targetlist=copy_vars(((Plan*)noname)->targetlist,
181-
(source)->targetlist);
181+
noname->plan.targetlist=copy_vars(noname->plan.targetlist,
182+
source->targetlist);
182183
}
183184
else
184185
elog(ERROR,"calling set_noname_tlist_references with empty lefttree");

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp