Skip to content

Commit aa12bb0

Browse files
committed
better iterator
1 parent 12c2025 commit aa12bb0

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

sql/rowexec/rel_iters.go

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,7 @@ type ProjectIter struct {
135135
}
136136

137137
type nestedIterState struct {
138-
normalFields []sql.Expression
139-
nestedIters []sql.RowIter
140-
nestedIterIdxes []int
138+
projections []sql.Expression
141139
sourceRow sql.Row
142140
iterEvaluators []*RowIterEvaluator
143141
}
@@ -182,7 +180,18 @@ func (i *ProjectIter) ProjectRowWithNestedIters(
182180
// Other iterator values will be NULL after they are depleted. All non-iterator fields for the row are returned
183181
// identically for each row in the result set.
184182
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+
}
186195
}
187196

188197
nestedState := &nestedIterState{
@@ -208,29 +217,19 @@ func (i *ProjectIter) ProjectRowWithNestedIters(
208217
rowIterEvaluators = append(rowIterEvaluators, evaluator)
209218
return evaluator, transform.NewTree, nil
210219
}
220+
221+
return e, transform.SameTree, nil
211222
})
223+
212224
if err != nil {
213225
return nil, err
214226
}
215227

216228
newProjs[i] = p
217229
}
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
234233
i.nestedState = nestedState
235234
return i.ProjectRowWithNestedIters(ctx, projections, row)
236235
}

0 commit comments

Comments
 (0)