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

Function createLinkIterator

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

Source from the content-addressed store, hash-verified

1903}
1904
1905func createLinkIterator(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions, selectAll bool) (parquetquery.Iterator, error) {
1906 if len(conditions) == 0 {
1907 return nil, nil
1908 }
1909
1910 linkIters := make([]parquetquery.Iterator, 0, len(conditions))
1911 var genericConditions []traceql.Condition
1912
1913 for _, cond := range conditions {
1914 switch cond.Attribute.Intrinsic {
1915 case traceql.IntrinsicLinkTraceID:
1916 pred, err := createBytesPredicate(cond.Op, cond.Operands, false)
1917 if err != nil {
1918 return nil, err
1919 }
1920 linkIters = append(linkIters, makeIter(columnPathLinkTraceID, pred, columnPathLinkTraceID))
1921 continue
1922
1923 case traceql.IntrinsicLinkSpanID:
1924 pred, err := createBytesPredicate(cond.Op, cond.Operands, true)
1925 if err != nil {
1926 return nil, err
1927 }
1928 linkIters = append(linkIters, makeIter(columnPathLinkSpanID, pred, columnPathLinkSpanID))
1929 continue
1930 }
1931
1932 if cond.Op == traceql.OpNotExists {
1933 // Generic attr doesn't exist
1934 pred := parquetquery.NewIncludeNilStringEqualPredicate([]byte(cond.Attribute.Name))
1935 linkIters = append(linkIters, makeNilIter(columnPathLinkAttrKey, pred, cond.Attribute.Name))
1936 continue
1937 }
1938
1939 genericConditions = append(genericConditions, cond)
1940 }
1941
1942 attrIter, err := createAttributeIterator(makeIter, genericConditions, DefinitionLevelResourceSpansILSSpanLinkAttrs,
1943 columnPathLinkAttrKey, columnPathLinkAttrString, columnPathLinkAttrInt, columnPathLinkAttrDouble, columnPathLinkAttrBool, allConditions, selectAll)
1944 if err != nil {
1945 return nil, fmt.Errorf("creating link attribute iterator: %w", err)
1946 }
1947
1948 if attrIter != nil {
1949 linkIters = append(linkIters, attrIter)
1950 }
1951
1952 var required []parquetquery.Iterator
1953 minCount := 0
1954
1955 if allConditions {
1956 // The final number of expected attributes.
1957 distinct := map[string]struct{}{}
1958 for _, cond := range conditions {
1959 distinct[cond.Attribute.Name] = struct{}{}
1960 }
1961 minCount = len(distinct)
1962 }

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