(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions, selectAll bool)
| 1903 | } |
| 1904 | |
| 1905 | func 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 | } |
no test coverage detected