Collect data from the given iterators until they point at the next row (according to the configured definition level) or are exhausted.
(rowNumber RowNumber)
| 1141 | // the next row (according to the configured definition level) |
| 1142 | // or are exhausted. |
| 1143 | func (j *JoinIterator) collect(rowNumber RowNumber) (*IteratorResult, error) { |
| 1144 | var err error |
| 1145 | |
| 1146 | result := j.at |
| 1147 | result.Reset() |
| 1148 | result.RowNumber = rowNumber |
| 1149 | |
| 1150 | iters: |
| 1151 | for i := range j.iters { |
| 1152 | for j.peeks[i] != nil { |
| 1153 | |
| 1154 | // Interned version of EqualRowNumber |
| 1155 | // Compare in reverse order because most row number activity |
| 1156 | // occurs at the deeper definition levels. |
| 1157 | for k := j.definitionLevel; k >= 0; k-- { |
| 1158 | if j.peeks[i].RowNumber[k] != rowNumber[k] { |
| 1159 | continue iters |
| 1160 | } |
| 1161 | } |
| 1162 | |
| 1163 | result.Append(j.peeks[i]) |
| 1164 | j.peeks[i], err = j.iters[i].Next() |
| 1165 | if err != nil { |
| 1166 | return nil, err |
| 1167 | } |
| 1168 | } |
| 1169 | } |
| 1170 | return result, nil |
| 1171 | } |
| 1172 | |
| 1173 | func (j *JoinIterator) Close() { |
| 1174 | for _, i := range j.iters { |