public InFilter withValues(List<String> values) { return new InFilter(getDimension(), values); } //CHECKSTYLE:ON
@Override public String toString() { return "Filter{ type=" + getType() + ", dimension=" + getDimension() + ", value=" + getValues() + "}"; } }
@Override public Set<Dimension> gatherFilterDimensions(Filter filter, Set<Dimension> dimensions) { if (filter instanceof SelectorFilter) { dimensions.add(((SelectorFilter) filter).getDimension()); } else if (filter instanceof InFilter) { dimensions.add(((InFilter) filter).getDimension()); } else if (filter instanceof MultiClauseFilter) { for (Filter multiclauseFilter : ((MultiClauseFilter) filter).getFields()) { gatherFilterDimensions(multiclauseFilter, dimensions); } } else if (filter instanceof NotFilter) { gatherFilterDimensions(((NotFilter) filter).getField(), dimensions); } return dimensions; } }
/** * Evaluates an Infilter filter. * * @param inFilter An inFilter to be evaluated. * @param builder The RelBuilder used to build queries with Calcite. * @param apiToFieldMapper A function to get the aliased aggregation's name from the metric name. * * @return a RexNode containing an equivalent filter to the one given. */ public RexNode evaluate(InFilter inFilter, RelBuilder builder, ApiToFieldMapper apiToFieldMapper) { Dimension dimension = inFilter.getDimension(); OrFilter orFilterOfSelectors = new OrFilter( inFilter.getValues() .stream() .map(value -> new SelectorFilter(dimension, value)) .collect(Collectors.toList()) ); return dispatcher.invoke(orFilterOfSelectors); }