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