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

Function createEventIterators

tempodb/encoding/vparquet5/block_traceql_fetch.go:744–860  ·  view source on GitHub ↗
(
	makeIter, makeNilIter makeIterFn,
	conditions []traceql.Condition,
	allConditions bool,
	dedicatedColumns backend.DedicatedColumns,
	selectAll bool,
)

Source from the content-addressed store, hash-verified

742}
743
744func createEventIterators(
745 makeIter, makeNilIter makeIterFn,
746 conditions []traceql.Condition,
747 allConditions bool,
748 dedicatedColumns backend.DedicatedColumns,
749 selectAll bool,
750) (required, optional []parquetquery.Iterator, err error) {
751 // TODO - Preserving compatibility with original fetch.
752 // If there are no event-level conditions we do nothing.
753 // Which means we are ignoring event data during select all.
754 if len(conditions) == 0 {
755 return nil, nil, nil
756 }
757
758 var (
759 columnSelectAs = map[string]string{}
760 columnPredicates = map[string][]parquetquery.Predicate{}
761 genericConditions []traceql.Condition
762 columnMapping = dedicatedColumnsToColumnMapping(dedicatedColumns, backend.DedicatedColumnScopeEvent)
763 )
764
765 addPredicate := func(columnPath string, p parquetquery.Predicate) {
766 columnPredicates[columnPath] = append(columnPredicates[columnPath], p)
767 }
768
769 specialCase := func(cond traceql.Condition, columnPath string) (handled bool) {
770 // Operands that need special handling.
771 switch cond.Op {
772 case traceql.OpNone:
773 addPredicate(columnPath, nil) // No filtering
774 columnSelectAs[columnPath] = cond.Attribute.Name
775 return true
776 case traceql.OpExists:
777 addPredicate(columnPath, &parquetquery.SkipNilsPredicate{})
778 columnSelectAs[columnPath] = cond.Attribute.Name
779 return true
780 case traceql.OpNotExists:
781 optional = append(optional, makeIter(columnPath, parquetquery.NewNilValuePredicate(), cond.Attribute.Name))
782 return true
783 default:
784 return false
785 }
786 }
787
788 for _, cond := range conditions {
789 switch cond.Attribute.Intrinsic {
790 case traceql.IntrinsicEventName:
791 pred, err := createStringPredicate(cond.Op, cond.Operands)
792 if err != nil {
793 return nil, nil, err
794 }
795 optional = append(optional, makeIter(ColumnPathEventName, pred, ColumnPathEventName))
796 continue
797 case traceql.IntrinsicEventTimeSinceStart:
798 pred, err := createIntPredicate(cond.Op, cond.Operands)
799 if err != nil {
800 return nil, nil, err
801 }

Callers 1

createFunction · 0.85

Calls 11

NewNilValuePredicateFunction · 0.92
ToStaticTypeMethod · 0.80
createStringPredicateFunction · 0.70
createIntPredicateFunction · 0.70
isMatchingColumnTypeFunction · 0.70
operandTypeFunction · 0.70
createPredicateFunction · 0.70
getMethod · 0.45

Tested by

no test coverage detected