/** * Get a new instance of this filter with the given field. * * @param field Field of the new filter. * * @return a new instance of this filter with the given field */ public Filter withField(Filter field) { return new NotFilter(field); }
@Override @JsonIgnore public List<Filter> getFields() { return Collections.singletonList(getField()); } }
@Override protected Filter buildDimensionFilter(Dimension dimension, Set<ApiFilter> filters) throws DimensionRowNotFoundException { LOG.trace("Building dimension filter using dimension: {} \n\n and set of filter: {}", dimension, filters); List<Filter> orFilters = new ArrayList<>(); for (ApiFilter filter : filters) { ApiFilter normalizedFilter = filter; if (normalizedFilter.getOperation().equals(DefaultFilterOperation.notin)) { normalizedFilter = filter.withOperation(DefaultFilterOperation.in); } Filter disjunction = new OrFilter(buildSelectorFilters( dimension, getFilteredDimensionRows(dimension, Collections.singleton(normalizedFilter)) )); orFilters.add(normalizedFilter == filter ? disjunction : new NotFilter(disjunction)); } Filter newFilter = orFilters.size() == 1 ? orFilters.get(0) : new AndFilter(orFilters); LOG.trace("Filter: {}", newFilter); return newFilter; } }
@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; } }
inFilters.add(new NotFilter(new InFilter(dimension, notInValues)));
getFilteredDimensionRows(dimension, Collections.singleton(negatedFilter)) ); druidFilters.add(new NotFilter( selectorFilters.size() == 1 ? selectorFilters.get(0) :