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

Method Next

pkg/parquetquery/iters.go:1018–1074  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1016}
1017
1018func (j *JoinIterator) Next() (*IteratorResult, error) {
1019outer:
1020 for {
1021 // This loop is doing two things:
1022 // On first-pass peek each iter and ensure it has at least one
1023 // result. If any iter has no results we can exit early
1024 // without processing the remaining data in the others.
1025 // On subsequent passes the first iter is never nil except
1026 // when everything is fully exhausted. We check once more
1027 // and then exit.
1028 if j.peeks[0] == nil {
1029 for i := range j.iters {
1030 res, err := j.peek(i)
1031 if err != nil {
1032 return nil, err
1033 }
1034 if res == nil {
1035 return nil, nil
1036 }
1037 }
1038 }
1039
1040 // The first iter is pointing at the next candidate row. Proceed through iters 2 to N looking
1041 // for matches.
1042 for iterNum := 1; iterNum < len(j.iters); iterNum++ {
1043 err := j.seek(iterNum, j.peeks[0].RowNumber, j.definitionLevel)
1044 if err != nil {
1045 return nil, err
1046 }
1047
1048 if j.peeks[iterNum] == nil {
1049 return nil, nil
1050 }
1051
1052 if CompareRowNumbers(j.definitionLevel, j.peeks[iterNum].RowNumber, j.peeks[0].RowNumber) == 1 {
1053 // This iterator has a higher row number than all previous iterators. That means it might have
1054 // a higher filtering power, swap it to the top and restart the loop.
1055 j.iters[0], j.iters[iterNum] = j.iters[iterNum], j.iters[0]
1056 j.peeks[0], j.peeks[iterNum] = j.peeks[iterNum], j.peeks[0]
1057 continue outer
1058 }
1059 }
1060
1061 // All iterators pointing at same row
1062 // Get the data
1063 result, err := j.collect(j.peeks[0].RowNumber)
1064 if err != nil {
1065 return nil, fmt.Errorf("join iterator collect failed: %w", err)
1066 }
1067
1068 // Keep group?
1069 if j.pred == nil || j.pred.KeepGroup(result) {
1070 // Yes
1071 return result, nil
1072 }
1073 }
1074}
1075

Callers 4

rawToResultsFunction · 0.95
rawToResultsFunction · 0.95
rawToResultsFunction · 0.95
SeekToMethod · 0.95

Calls 5

peekMethod · 0.95
seekMethod · 0.95
collectMethod · 0.95
CompareRowNumbersFunction · 0.85
KeepGroupMethod · 0.65

Tested by

no test coverage detected