(t RowNumber, d int)
| 1443 | } |
| 1444 | |
| 1445 | func (j *LeftJoinIterator) seekAllOptional(t RowNumber, d int) (err error) { |
| 1446 | for iterNum := 0; iterNum < len(j.optional); iterNum++ { |
| 1447 | d2 := min(d, j.defLevelsOptional[iterNum]) |
| 1448 | |
| 1449 | if j.peeksOptional[iterNum] == nil || CompareRowNumbers(d2, j.peeksOptional[iterNum].RowNumber, t) == -1 { |
| 1450 | j.peeksOptional[iterNum], err = j.optional[iterNum].SeekTo(t, d2) |
| 1451 | if err != nil { |
| 1452 | return |
| 1453 | } |
| 1454 | if j.peeksOptional[iterNum] == nil { |
| 1455 | // Iterator is exhausted. |
| 1456 | // Remove it from the list, so it is skipped for all remaining operations. |
| 1457 | // This might seem overly complex, it is significantly faster in cases where optional |
| 1458 | // iterators are expected to exit early via callbacks. |
| 1459 | j.optional = slices.Delete(j.optional, iterNum, iterNum+1) |
| 1460 | j.peeksOptional = slices.Delete(j.peeksOptional, iterNum, iterNum+1) |
| 1461 | j.defLevelsOptional = slices.Delete(j.defLevelsOptional, iterNum, iterNum+1) |
| 1462 | j.paramsOptional = slices.Delete(j.paramsOptional, iterNum, iterNum+1) |
| 1463 | j.collectedThroughOptional = slices.Delete(j.collectedThroughOptional, iterNum, iterNum+1) |
| 1464 | iterNum-- |
| 1465 | continue |
| 1466 | } |
| 1467 | } |
| 1468 | } |
| 1469 | return nil |
| 1470 | } |
| 1471 | |
| 1472 | func (j *LeftJoinIterator) collectOptional(rowNumber RowNumber) (err error) { |
| 1473 | iters: |
no test coverage detected