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

Function createEventIterator

tempodb/encoding/vparquet5/block_traceql.go:1773–1903  ·  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

1771}
1772
1773func createEventIterator(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions bool, dedicatedColumns backend.DedicatedColumns, selectAll bool) (parquetquery.Iterator, error) {
1774 if len(conditions) == 0 {
1775 return nil, nil
1776 }
1777
1778 var (
1779 columnSelectAs = map[string]string{}
1780 columnPredicates = map[string][]parquetquery.Predicate{}
1781 iters []parquetquery.Iterator
1782 genericConditions []traceql.Condition
1783 columnMapping = dedicatedColumnsToColumnMapping(dedicatedColumns, backend.DedicatedColumnScopeEvent)
1784 )
1785
1786 addPredicate := func(columnPath string, p parquetquery.Predicate) {
1787 columnPredicates[columnPath] = append(columnPredicates[columnPath], p)
1788 }
1789
1790 specialCase := func(cond traceql.Condition, columnPath string) (handled bool) {
1791 // Operands that need special handling.
1792 switch cond.Op {
1793 case traceql.OpNone:
1794 addPredicate(columnPath, nil) // No filtering
1795 columnSelectAs[columnPath] = cond.Attribute.Name
1796 return true
1797 case traceql.OpExists:
1798 addPredicate(columnPath, &parquetquery.SkipNilsPredicate{})
1799 columnSelectAs[columnPath] = cond.Attribute.Name
1800 return true
1801 case traceql.OpNotExists:
1802 iters = append(iters, makeIter(columnPath, parquetquery.NewNilValuePredicate(), cond.Attribute.Name))
1803 return true
1804 default:
1805 return false
1806 }
1807 }
1808
1809 for _, cond := range conditions {
1810 switch cond.Attribute.Intrinsic {
1811 case traceql.IntrinsicEventName:
1812 pred, err := createStringPredicate(cond.Op, cond.Operands)
1813 if err != nil {
1814 return nil, err
1815 }
1816 iters = append(iters, makeIter(ColumnPathEventName, pred, ColumnPathEventName))
1817 continue
1818 case traceql.IntrinsicEventTimeSinceStart:
1819 pred, err := createIntPredicate(cond.Op, cond.Operands)
1820 if err != nil {
1821 return nil, err
1822 }
1823 iters = append(iters, makeIter(columnPathEventTimeSinceStart, pred, columnPathEventTimeSinceStart))
1824 continue
1825 }
1826
1827 // Attributes stored in dedicated columns
1828 if c, ok := columnMapping.get(cond.Attribute.Name); ok {
1829 if specialCase(cond, c.ColumnPath) {
1830 continue

Callers 1

createAllIteratorFunction · 0.70

Calls 14

NewNilValuePredicateFunction · 0.92
NewLeftJoinIteratorFunction · 0.92
WithPoolFunction · 0.92
ToStaticTypeMethod · 0.80
createStringPredicateFunction · 0.70
createIntPredicateFunction · 0.70
isMatchingColumnTypeFunction · 0.70
operandTypeFunction · 0.70
createPredicateFunction · 0.70
orIfNeededFunction · 0.70

Tested by

no test coverage detected