@@ -135,9 +135,7 @@ type ProjectIter struct {
135
135
}
136
136
137
137
type nestedIterState struct {
138
- normalFields []sql.Expression
139
- nestedIters []sql.RowIter
140
- nestedIterIdxes []int
138
+ projections []sql.Expression
141
139
sourceRow sql.Row
142
140
iterEvaluators []* RowIterEvaluator
143
141
}
@@ -182,7 +180,18 @@ func (i *ProjectIter) ProjectRowWithNestedIters(
182
180
// Other iterator values will be NULL after they are depleted. All non-iterator fields for the row are returned
183
181
// identically for each row in the result set.
184
182
if i .nestedState != nil {
185
-
183
+ var stillIterating
184
+ for _ , evaluator := range i.nestedState .iterEvaluators {
185
+ if ! evaluator .finished {
186
+ stillIterating = true
187
+ break
188
+ }
189
+ }
190
+
191
+ if ! stillIterating {
192
+ i .nestedState = nil
193
+ return i .ProjectRowWithNestedIters (ctx , i .nestedState .projections , i .nestedState .sourceRow )
194
+ }
186
195
}
187
196
188
197
nestedState := & nestedIterState {
@@ -208,29 +217,19 @@ func (i *ProjectIter) ProjectRowWithNestedIters(
208
217
rowIterEvaluators = append (rowIterEvaluators , evaluator )
209
218
return evaluator , transform .NewTree , nil
210
219
}
220
+
221
+ return e , transform .SameTree , nil
211
222
})
223
+
212
224
if err != nil {
213
225
return nil , err
214
226
}
215
227
216
228
newProjs [i ] = p
217
229
}
218
-
219
- vals , err := ProjectRow (ctx , projections , row )
220
- if err != nil {
221
- return nil , err
222
- }
223
-
224
- nestedState .normalFields = make ([]sql.Expression , len (vals ))
225
- for i , val := range vals {
226
- if iter , ok := val .(sql.RowIter ); ok {
227
- nestedState .nestedIters = append (nestedState .nestedIters , iter )
228
- nestedState .nestedIterIdxes = append (nestedState .nestedIterIdxes , i )
229
- } else {
230
- nestedState .normalFields [i ] = projections [i ]
231
- }
232
- }
233
-
230
+
231
+ nestedState .projections = newProjs
232
+ nestedState .iterEvaluators = rowIterEvaluators
234
233
i .nestedState = nestedState
235
234
return i .ProjectRowWithNestedIters (ctx , projections , row )
236
235
}
0 commit comments