(makeIter, makeNilIter makeIterFn, conditions []traceql.Condition, allConditions bool, dedicatedColumns backend.DedicatedColumns, selectAll bool)
| 1771 | } |
| 1772 | |
| 1773 | func 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 |
no test coverage detected