7
7
*
8
8
*
9
9
* IDENTIFICATION
10
- * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.36 1999/02/15 03:59:27 momjian Exp $
10
+ * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.37 1999/02/15 05:21:03 momjian Exp $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
@@ -43,8 +43,9 @@ bool _use_geqo_ = false;
43
43
int32 _use_geqo_rels_ = GEQO_RELS ;
44
44
45
45
46
- static void find_base_rel_paths (Query * root , List * rels );
47
- static RelOptInfo * make_one_rel_by_joins (Query * root , List * outer_rels , int levels_needed );
46
+ static void set_base_rel_pathlist (Query * root , List * rels );
47
+ static RelOptInfo * make_one_rel_by_joins (Query * root , List * rels ,
48
+ int levels_needed );
48
49
49
50
#ifdef OPTIMIZER_DEBUG
50
51
static void debug_print_rel (Query * root , RelOptInfo * rel );
@@ -71,7 +72,7 @@ make_one_rel(Query *root, List *rels)
71
72
if (levels_needed <= 0 )
72
73
return NULL ;
73
74
74
- find_base_rel_paths (root , rels );
75
+ set_base_rel_pathlist (root , rels );
75
76
76
77
if (levels_needed <= 1 )
77
78
{
@@ -83,7 +84,7 @@ make_one_rel(Query *root, List *rels)
83
84
else
84
85
{
85
86
/*
86
- * this means that joins or sorts are required. set selectivities
87
+ * This means that joins or sorts are required. set selectivities
87
88
* of clauses that have not been set by an index.
88
89
*/
89
90
set_rest_relselec (root , rels );
@@ -93,7 +94,7 @@ make_one_rel(Query *root, List *rels)
93
94
}
94
95
95
96
/*
96
- * find_base_rel_paths
97
+ * set_base_rel_pathlist
97
98
* Finds all paths available for scanning each relation entry in
98
99
* 'rels'. Sequential scan and any available indices are considered
99
100
* if possible(indices are not considered for lower nesting levels).
@@ -102,7 +103,7 @@ make_one_rel(Query *root, List *rels)
102
103
* MODIFIES: rels
103
104
*/
104
105
static void
105
- find_base_rel_paths (Query * root , List * rels )
106
+ set_base_rel_pathlist (Query * root , List * rels )
106
107
{
107
108
List * temp ;
108
109
@@ -150,7 +151,7 @@ find_base_rel_paths(Query *root, List *rels)
150
151
* Find all possible joinpaths(bushy trees) for a query by systematically
151
152
* finding ways to join relations(both original and derived) together.
152
153
*
153
- * 'outer_rels ' is the current list of relations for which join paths
154
+ * 'rels ' is the current list of relations for which join paths
154
155
* are to be found, i.e., the current list of relations that
155
156
* have already been derived.
156
157
* 'levels_needed' is the number of iterations needed
@@ -159,7 +160,7 @@ find_base_rel_paths(Query *root, List *rels)
159
160
* the result of joining all the original relations together.
160
161
*/
161
162
static RelOptInfo *
162
- make_one_rel_by_joins (Query * root , List * outer_rels , int levels_needed )
163
+ make_one_rel_by_joins (Query * root , List * rels , int levels_needed )
163
164
{
164
165
List * x ;
165
166
List * joined_rels = NIL ;
@@ -180,11 +181,11 @@ make_one_rel_by_joins(Query *root, List *outer_rels, int levels_needed)
180
181
{
181
182
/*
182
183
* Determine all possible pairs of relations to be joined at this
183
- * level. Determine paths for joining these relation pairs and
184
+ * level. Determine paths for joining these relation pairs and
184
185
* modify 'joined_rels' accordingly, then eliminate redundant join
185
186
* relations.
186
187
*/
187
- joined_rels = make_rels_by_joins (root , outer_rels );
188
+ joined_rels = make_rels_by_joins (root , rels );
188
189
189
190
update_rels_pathlist_for_joins (root , joined_rels );
190
191
@@ -211,7 +212,7 @@ make_one_rel_by_joins(Query *root, List *outer_rels, int levels_needed)
211
212
* involves the join relation to the joininfo list of the
212
213
* other relation
213
214
*/
214
- add_rel_to_rel_joininfos (root , joined_rels , outer_rels );
215
+ add_rel_to_rel_joininfos (root , joined_rels , rels );
215
216
}
216
217
#endif
217
218
@@ -236,33 +237,25 @@ make_one_rel_by_joins(Query *root, List *outer_rels, int levels_needed)
236
237
* prune rels that have been completely incorporated into new
237
238
* join rels
238
239
*/
239
- outer_rels = del_rels_all_bushy_inactive (outer_rels );
240
+ rels = del_rels_all_bushy_inactive (rels );
240
241
241
242
/*
242
243
* merge join rels if then contain the same list of base rels
243
244
*/
244
- outer_rels = merge_rels_with_same_relids (joined_rels , outer_rels );
245
- root -> join_rel_list = outer_rels ;
245
+ joined_rels = merge_rels_with_same_relids (joined_rels , rels );
246
246
}
247
- else
248
247
#endif
249
- root -> join_rel_list = joined_rels ;
250
-
251
- #ifdef NOT_USED
252
- if (!BushyPlanFlag )
253
- #endif
254
- outer_rels = joined_rels ;
255
-
248
+ root -> join_rel_list = rels = joined_rels ;
256
249
}
257
250
258
- Assert (length (joined_rels ) == 1 );
251
+ Assert (BushyPlanFlag || length (rels ) == 1 );
259
252
260
253
#ifdef NOT_USED
261
254
if (BushyPlanFlag )
262
- return final_join_rels ( outer_rels );
255
+ return get_cheapest_complete_rel ( rels );
263
256
else
264
257
#endif
265
- return lfirst (joined_rels );
258
+ return lfirst (rels );
266
259
}
267
260
268
261
/*****************************************************************************
0 commit comments