MCPcopy
hub / github.com/grafana/tempo / collectRequired

Method collectRequired

pkg/parquetquery/iters.go:1504–1571  ·  view source on GitHub ↗
(rowNumber RowNumber)

Source from the content-addressed store, hash-verified

1502}
1503
1504func (j *LeftJoinIterator) collectRequired(rowNumber RowNumber) (err error) {
1505 // First iterator is broken out because it is treated a little differently,
1506 // and being on the hot path this is requiredfor best performance.
1507iter0:
1508 for j.peeksRequired[0] != nil {
1509 j.collector.Collect(j.peeksRequired[0], j.paramsRequired[0])
1510
1511 j.peeksRequired[0], err = j.required[0].Next()
1512 if err != nil {
1513 return
1514 }
1515 if j.peeksRequired[0] == nil {
1516 break iter0
1517 }
1518
1519 // For the driver we check after because we already know
1520 // entering this loop that it was pointed at the row.
1521 for k := j.defLevelsRequired[0]; k >= 0; k-- {
1522 if j.peeksRequired[0].RowNumber[k] != rowNumber[k] {
1523 break iter0
1524 }
1525 }
1526 }
1527
1528iters:
1529 for i := 1; i < len(j.required); i++ {
1530 if i > 0 {
1531 if EqualRowNumber(j.defLevelsRequired[i], j.collectedThroughRequired[i], rowNumber) {
1532 // Already collected
1533 continue
1534 }
1535 }
1536
1537 // First iterator (driver) is pointing at the next row to collect.
1538 // Collect from it while at the same level as the desired definition level
1539 // or until exhausted.
1540 for j.peeksRequired[i] != nil {
1541
1542 // Before collecting ensure we are at the same row.
1543 // For the driver we already know entering this loop that it s pointed at the row.
1544 // So this early check is only for later iterators.
1545 if i > 0 {
1546 // Interned version of EqualRowNumber
1547 // Compare in reverse order because most row number activity
1548 // occurs at the deeper definition levels.
1549 for k := j.defLevelsRequired[i]; k >= 0; k-- {
1550 if j.peeksRequired[i].RowNumber[k] != rowNumber[k] {
1551 continue iters
1552 }
1553 }
1554 }
1555
1556 j.collector.Collect(j.peeksRequired[i], j.paramsRequired[i])
1557
1558 // Optimization: we don't need to save the row number
1559 // for the primary iterator (driver).
1560 if i > 0 {
1561 j.collectedThroughRequired[i] = j.peeksRequired[i].RowNumber

Callers 1

collectMethod · 0.95

Calls 3

EqualRowNumberFunction · 0.85
CollectMethod · 0.65
NextMethod · 0.65

Tested by

no test coverage detected