7
7
*
8
8
*
9
9
* 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 $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
@@ -82,10 +82,10 @@ set_tlist_references(Plan *plan)
82
82
83
83
if (IsA_Join (plan ))
84
84
set_join_tlist_references ((Join * ) plan );
85
- else if (IsA (plan , SeqScan ) && plan -> lefttree &&
85
+ else if (IsA (plan , SeqScan ) && plan -> lefttree &&
86
86
IsA_Noname (plan -> lefttree ))
87
87
set_nonamescan_tlist_references ((SeqScan * ) plan );
88
- else if (IsA (plan , Sort ))
88
+ else if (IsA_Noname (plan ))
89
89
set_noname_tlist_references ((Noname * ) plan );
90
90
else if (IsA (plan , Result ))
91
91
set_result_tlist_references ((Result * ) plan );
@@ -112,12 +112,12 @@ set_tlist_references(Plan *plan)
112
112
static void
113
113
set_join_tlist_references (Join * join )
114
114
{
115
- Plan * outer = (( Plan * ) join ) -> lefttree ;
116
- Plan * inner = (( Plan * ) join ) -> righttree ;
115
+ Plan * outer = join -> lefttree ;
116
+ Plan * inner = join -> righttree ;
117
117
List * outer_tlist = ((outer == NULL ) ? NIL : outer -> targetlist );
118
118
List * inner_tlist = ((inner == NULL ) ? NIL : inner -> targetlist );
119
119
List * new_join_targetlist = NIL ;
120
- List * qptlist = (( Plan * ) join ) -> targetlist ;
120
+ List * qptlist = join -> targetlist ;
121
121
List * entry ;
122
122
123
123
foreach (entry , qptlist )
@@ -130,18 +130,16 @@ set_join_tlist_references(Join *join)
130
130
new_join_targetlist = lappend (new_join_targetlist ,
131
131
makeTargetEntry (xtl -> resdom , joinexpr ));
132
132
}
133
+ join -> targetlist = new_join_targetlist ;
133
134
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 );
139
137
}
140
138
141
139
/*
142
140
* set_nonamescan_tlist_references
143
141
* Modifies the target list of a node that scans a noname relation (i.e., a
144
- * sort or hash node) so that the varnos refer to the child noname.
142
+ * sort or materialize node) so that the varnos refer to the child noname.
145
143
*
146
144
* 'nonamescan' is a seqscan node
147
145
*
@@ -151,10 +149,13 @@ set_join_tlist_references(Join *join)
151
149
static void
152
150
set_nonamescan_tlist_references (SeqScan * nonamescan )
153
151
{
154
- Noname * noname = (Noname * ) (( Plan * ) nonamescan ) -> lefttree ;
152
+ Noname * noname = (Noname * ) nonamescan -> plan . lefttree ;
155
153
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
+ */
158
159
set_noname_tlist_references (noname );
159
160
}
160
161
@@ -164,21 +165,21 @@ set_nonamescan_tlist_references(SeqScan *nonamescan)
164
165
* modified version of the target list of the node from which noname node
165
166
* receives its tuples.
166
167
*
167
- * 'noname' is a noname (e.g., sort, hash ) plan node
168
+ * 'noname' is a noname (e.g., sort, materialize ) plan node
168
169
*
169
170
* Returns nothing of interest, but modifies internal fields of nodes.
170
171
*
171
172
*/
172
173
static void
173
174
set_noname_tlist_references (Noname * noname )
174
175
{
175
- Plan * source = (( Plan * ) noname ) -> lefttree ;
176
+ Plan * source = noname -> plan . lefttree ;
176
177
177
178
if (source != NULL )
178
179
{
179
180
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 );
182
183
}
183
184
else
184
185
elog (ERROR , "calling set_noname_tlist_references with empty lefttree" );
0 commit comments