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

Function createLinkIterator

tempodb/encoding/vparquet4/block_traceql.go:1826–1903  ·  view source on GitHub ↗
(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions, selectAll bool)

Source from the content-addressed store, hash-verified

1824}
1825
1826func createLinkIterator(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions, selectAll bool) (parquetquery.Iterator, error) {
1827 if len(conditions) == 0 {
1828 return nil, nil
1829 }
1830
1831 linkIters := make([]parquetquery.Iterator, 0, len(conditions))
1832 var genericConditions []traceql.Condition
1833
1834 for _, cond := range conditions {
1835 switch cond.Attribute.Intrinsic {
1836 case traceql.IntrinsicLinkTraceID:
1837 pred, err := createBytesPredicate(cond.Op, cond.Operands, false)
1838 if err != nil {
1839 return nil, err
1840 }
1841 linkIters = append(linkIters, makeIter(columnPathLinkTraceID, pred, columnPathLinkTraceID))
1842 continue
1843
1844 case traceql.IntrinsicLinkSpanID:
1845 pred, err := createBytesPredicate(cond.Op, cond.Operands, true)
1846 if err != nil {
1847 return nil, err
1848 }
1849 linkIters = append(linkIters, makeIter(columnPathLinkSpanID, pred, columnPathLinkSpanID))
1850 continue
1851 }
1852
1853 if cond.Op == traceql.OpNotExists {
1854 // Generic attr doesn't exist
1855 pred := parquetquery.NewIncludeNilStringEqualPredicate([]byte(cond.Attribute.Name))
1856 linkIters = append(linkIters, makeNilIter(columnPathLinkAttrKey, pred, cond.Attribute.Name))
1857 continue
1858 }
1859
1860 genericConditions = append(genericConditions, cond)
1861 }
1862
1863 attrIter, err := createAttributeIterator(makeIter, genericConditions, DefinitionLevelResourceSpansILSSpanLinkAttrs,
1864 columnPathLinkAttrKey, columnPathLinkAttrString, columnPathLinkAttrInt, columnPathLinkAttrDouble, columnPathLinkAttrBool, allConditions, selectAll)
1865 if err != nil {
1866 return nil, fmt.Errorf("creating link attribute iterator: %w", err)
1867 }
1868
1869 if attrIter != nil {
1870 linkIters = append(linkIters, attrIter)
1871 }
1872
1873 var required []parquetquery.Iterator
1874 minCount := 0
1875
1876 if allConditions {
1877 // The final number of expected attributes.
1878 distinct := map[string]struct{}{}
1879 for _, cond := range conditions {
1880 distinct[cond.Attribute.Name] = struct{}{}
1881 }
1882 minCount = len(distinct)
1883 }

Callers 1

createAllIteratorFunction · 0.70

Calls 5

NewLeftJoinIteratorFunction · 0.92
WithPoolFunction · 0.92
createBytesPredicateFunction · 0.70
createAttributeIteratorFunction · 0.70

Tested by

no test coverage detected