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

Commitd977ff7

Browse files
committed
more optimizer cleanups
1 parent63393bd commitd977ff7

File tree

2 files changed

+40
-54
lines changed

2 files changed

+40
-54
lines changed

‎src/backend/optimizer/path/joinrels.c

Lines changed: 35 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.27 1999/02/1800:49:20 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.28 1999/02/1804:45:36 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -46,37 +46,35 @@ static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel,
4646
* of these exist for a given relation, all remaining possibilities are
4747
* considered.
4848
*
49-
* 'outer_rels' is the list of rel nodes
50-
*
5149
* Returns a list of rel nodes corresponding to the new join relations.
5250
*/
5351
List*
54-
make_rels_by_joins(Query*root,List*outer_rels)
52+
make_rels_by_joins(Query*root,List*old_rels)
5553
{
56-
List*joins=NIL;
54+
List*joined_rels=NIL;
5755
List*join_list=NIL;
5856
List*r=NIL;
5957

60-
foreach(r,outer_rels)
58+
foreach(r,old_rels)
6159
{
62-
RelOptInfo*outer_rel= (RelOptInfo*)lfirst(r);
60+
RelOptInfo*old_rel= (RelOptInfo*)lfirst(r);
6361

64-
if (!(joins=make_rels_by_clause_joins(root,outer_rel,
65-
outer_rel->joininfo,
62+
if (!(joined_rels=make_rels_by_clause_joins(root,old_rel,
63+
old_rel->joininfo,
6664
NIL)))
6765
{
6866
/*
6967
* Oops, we have a relation that is not joined to any other
7068
* relation. Cartesian product time.
7169
*/
72-
if (!BushyPlanFlag)
73-
joins=make_rels_by_clauseless_joins(outer_rel,
74-
root->base_rel_list);
75-
else
76-
joins=make_rels_by_clauseless_joins(outer_rel,outer_rels);
70+
joined_rels=make_rels_by_clauseless_joins(old_rel,
71+
root->base_rel_list);
72+
if (BushyPlanFlag)
73+
joined_rels=make_rels_by_clauseless_joins(old_rel,
74+
old_rels);
7775
}
7876

79-
join_list=nconc(join_list,joins);
77+
join_list=nconc(join_list,joined_rels);
8078
}
8179

8280
returnjoin_list;
@@ -98,7 +96,7 @@ make_rels_by_joins(Query *root, List *outer_rels)
9896
* Returns a list of new join relations.
9997
*/
10098
List*
101-
make_rels_by_clause_joins(Query*root,RelOptInfo*outer_rel,
99+
make_rels_by_clause_joins(Query*root,RelOptInfo*old_rel,
102100
List*joininfo_list,Relidsonly_relids)
103101
{
104102
List*join_list=NIL;
@@ -107,7 +105,7 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
107105
foreach(i,joininfo_list)
108106
{
109107
JoinInfo*joininfo= (JoinInfo*)lfirst(i);
110-
RelOptInfo*rel;
108+
RelOptInfo*joined_rel;
111109
Relidsunjoined_relids=joininfo->unjoined_relids;
112110

113111
if (unjoined_relids!=NIL)
@@ -117,20 +115,21 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
117115
/* geqo only wants certain relids to make new rels */
118116
intMember(lfirsti(unjoined_relids),only_relids)))
119117
{
120-
rel=make_join_rel(outer_rel,
121-
get_base_rel(root,lfirsti(unjoined_relids)),
118+
joined_rel=make_join_rel(old_rel,
119+
get_base_rel(root,
120+
lfirsti(unjoined_relids)),
122121
joininfo);
123-
join_list=lappend(join_list,rel);
122+
join_list=lappend(join_list,joined_rel);
124123

125124
/* Right-sided plan */
126125
if (_use_right_sided_plans_&&
127-
length(outer_rel->relids)>1)
126+
length(old_rel->relids)>1)
128127
{
129-
rel=make_join_rel(
128+
joined_rel=make_join_rel(
130129
get_base_rel(root,lfirsti(unjoined_relids)),
131-
outer_rel,
132-
joininfo);
133-
join_list=lappend(join_list,rel);
130+
old_rel,
131+
joininfo);
132+
join_list=lappend(join_list,joined_rel);
134133
}
135134
}
136135

@@ -144,22 +143,12 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
144143

145144
Assert(length(join_rel->relids)>1);
146145
if (is_subset(unjoined_relids,join_rel->relids)&&
147-
nonoverlap_sets(outer_rel->relids,join_rel->relids))
146+
nonoverlap_sets(old_rel->relids,join_rel->relids))
148147
{
149-
rel=make_join_rel(outer_rel,
150-
join_rel,
151-
joininfo);
152-
join_list=lappend(join_list,rel);
153-
154-
/* Right-sided plan */
155-
if (_use_right_sided_plans_&&
156-
length(outer_rel->relids)>1)
157-
{
158-
rel=make_join_rel(join_rel,
159-
outer_rel,
160-
joininfo);
161-
join_list=lappend(join_list,rel);
162-
}
148+
joined_rel=make_join_rel(old_rel,
149+
join_rel,
150+
joininfo);
151+
join_list=lappend(join_list,joined_rel);
163152
}
164153
}
165154
}
@@ -178,7 +167,7 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *outer_rel,
178167
* Returns a list of new join relations.
179168
*/
180169
List*
181-
make_rels_by_clauseless_joins(RelOptInfo*outer_rel,List*inner_rels)
170+
make_rels_by_clauseless_joins(RelOptInfo*old_rel,List*inner_rels)
182171
{
183172
RelOptInfo*inner_rel;
184173
List*t_list=NIL;
@@ -187,10 +176,10 @@ make_rels_by_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels)
187176
foreach(i,inner_rels)
188177
{
189178
inner_rel= (RelOptInfo*)lfirst(i);
190-
if (nonoverlap_sets(inner_rel->relids,outer_rel->relids))
179+
if (nonoverlap_sets(inner_rel->relids,old_rel->relids))
191180
{
192181
t_list=lappend(t_list,
193-
make_join_rel(outer_rel,
182+
make_join_rel(old_rel,
194183
inner_rel,
195184
(JoinInfo*)NULL));
196185
}
@@ -223,11 +212,9 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
223212
* of the outer and inner join relations and then merging the results
224213
* together.
225214
*/
226-
new_outer_tlist=new_join_tlist(outer_rel->targetlist,/* XXX 1-based attnos */
227-
inner_rel->relids,1);
228-
new_inner_tlist=new_join_tlist(inner_rel->targetlist,/* XXX 1-based attnos */
229-
outer_rel->relids,
230-
length(new_outer_tlist)+1);
215+
new_outer_tlist=new_join_tlist(outer_rel->targetlist,1);
216+
new_inner_tlist=new_join_tlist(inner_rel->targetlist,
217+
length(new_outer_tlist)+1);
231218

232219
joinrel->relids=NIL;
233220
joinrel->indexed= false;
@@ -286,7 +273,6 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo)
286273
*/
287274
List*
288275
new_join_tlist(List*tlist,
289-
Relidsother_relids,
290276
intfirst_resdomno)
291277
{
292278
intresdomno=first_resdomno-1;

‎src/include/optimizer/paths.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: paths.h,v 1.21 1999/02/1800:49:47 momjian Exp $
10+
* $Id: paths.h,v 1.22 1999/02/1804:45:36 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -77,13 +77,13 @@ extern MergeInfo *match_order_mergeinfo(PathOrder *ordering,
7777
* joinrels.h
7878
* routines to determine which relations to join
7979
*/
80-
externList*make_rels_by_joins(Query*root,List*outer_rels);
81-
externList*make_rels_by_clause_joins(Query*root,RelOptInfo*outer_rel,
80+
externList*make_rels_by_joins(Query*root,List*old_rels);
81+
externList*make_rels_by_clause_joins(Query*root,RelOptInfo*old_rel,
8282
List*joininfo_list,Relidsonly_relids);
83-
externList*make_rels_by_clauseless_joins(RelOptInfo*outer_rel,
83+
externList*make_rels_by_clauseless_joins(RelOptInfo*old_rel,
8484
List*inner_rels);
8585
externRelOptInfo*make_join_rel(RelOptInfo*outer_rel,RelOptInfo*inner_rel,JoinInfo*joininfo);
86-
externList*new_join_tlist(List*tlist,List*other_relids,intfirst_resdomno);
86+
externList*new_join_tlist(List*tlist,intfirst_resdomno);
8787
externRelOptInfo*get_cheapest_complete_rel(List*join_rel_list);
8888

8989
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp