@Override protected Query applyArrayLiteral(Reference reference, Literal arrayLiteral, Context context) throws IOException { // col != ANY ([1,2,3]) --> not(col=1 and col=2 and col=3) String columnName = reference.info().ident().columnIdent().fqn(); QueryBuilderHelper builder = QueryBuilderHelper.forType(reference.valueType()); BooleanFilter filter = new BooleanFilter(); BooleanFilter notFilter = new BooleanFilter(); for (Object value : toIterable(arrayLiteral.value())) { notFilter.add(builder.eqFilter(columnName, value), BooleanClause.Occur.MUST); } filter.add(notFilter, BooleanClause.Occur.MUST_NOT); return new FilteredQuery(Queries.newMatchAllQuery(), filter); }
private void buildTermsQuery( BooleanFilter booleanFilter, Object value, String columnName, QueryBuilderHelper builder) { if (value == null) { return; } if (value.getClass().isArray()) { Object[] array = (Object[]) value; for (Object o : array) { buildTermsQuery(booleanFilter, o, columnName, builder); } } else { booleanFilter.add(builder.eqFilter(columnName, value), BooleanClause.Occur.MUST); } }