/** * Make a {@link FilterEvaluator} that processes the logic of a {@link Filter}. * * @param filter - Defines the Filter that will be processed. (not null) * @return The {@link FilterEvaluator} for the provided {@link Filter}. */ public static FilterEvaluator make(final Filter filter) { requireNonNull(filter); final ValueExpr condition = filter.getCondition(); return new FilterEvaluator(condition); }
@Override public void meet(Filter node) { filterList.add(node.getCondition()); super.meet(node); }
@Override public boolean equals(Object other) { if (other instanceof Filter && super.equals(other)) { Filter o = (Filter)other; return condition.equals(o.getCondition()); } return false; }
@Override public void meet(Filter node) { spFilterSet.add(node.getCondition()); node.getArg().visit(this); }
@Override public void meet(Filter node) { filterCond.add(node.getCondition()); node.replaceWith(node.getArg()); }
@Override public void meet(final Filter node) { filterSet.add(node.getCondition()); node.getArg().visit(this); }
@Override public void meet(Filter node) throws RuntimeException { parts.getLast().getFilters().add(node.getCondition()); if(node.getArg() instanceof Group) { parts.getLast().setConditionPosition(SQLFragment.ConditionPosition.HAVING); } super.meet(node); }
@Override public void meet(Filter node) throws RuntimeException { super.meet(node); if (node.getCondition() instanceof Exists) { Exists exists = (Exists) node.getCondition(); if (!readOnly) { node.replaceWith(new Join(node.getArg(), exists.getSubQuery())); } present = true; } }
@Override public void meet(final Filter filter) { //First visit children, then condition (reverse of default): filter.getArg().visit(this); filter.getCondition().visit(this); } }
@Override public Filter clone() { Filter clone = (Filter)super.clone(); clone.setCondition(getCondition().clone()); return clone; } }
@Override public void meet(Filter node) { handleType(SeRQO.FILTER); handleChild(SeRQO.CONDITION, node.getCondition()); super.meet(node); }
@Override public void meet(Filter node) { FilterVarReNamer fvr = new FilterVarReNamer(varChanges, valMap); node.getCondition().visit(fvr); node.getArg().visit(this); }
@Override public void meet(Filter filterNode) throws Exception { filterNode.visitChildren(this); if (filterNode.getArg() instanceof AggregationPipelineQueryNode && filterNode.getParentNode() != null) { AggregationPipelineQueryNode pipelineNode = (AggregationPipelineQueryNode) filterNode.getArg(); if (pipelineNode.filter(filterNode.getCondition())) { filterNode.replaceWith(pipelineNode); } } } }
@Override public void meet(final Difference node) { if (Sets.intersection(node.getRightArg().getBindingNames(), filterVars).size() > 0) { relocate(filter, node.getRightArg()); } else if (Sets.intersection(node.getLeftArg().getBindingNames(), filterVars).size() > 0) { final Filter clone = new Filter(filter.getArg(), filter .getCondition().clone()); relocate(clone, node.getLeftArg()); } }
@Override public void meet(final Filter n) { final ValueExpr cond = n.getCondition(); final boolean nopar = cond instanceof Exists || cond instanceof Not && ((Not) cond).getArg() instanceof Exists; emit(n.getArg()); if (!(n.getArg() instanceof SingletonSet)) { newline(); } emit("FILTER ").emit(cond, !nopar); }
@Override public void meet(final Intersection node) { if (Sets.intersection(node.getRightArg().getBindingNames(), filterVars).size() > 0) { relocate(filter, node.getRightArg()); } else if (Sets.intersection(node.getLeftArg().getBindingNames(), filterVars).size() > 0) { final Filter clone = new Filter(filter.getArg(), filter .getCondition().clone()); relocate(clone, node.getLeftArg()); } }
@Override public void meet(final Filter n) { final ValueExpr cond = n.getCondition(); final boolean nopar = cond instanceof Exists || cond instanceof Not && ((Not) cond).getArg() instanceof Exists; emit(n.getArg()); if (!(n.getArg() instanceof SingletonSet)) { newline(); } emit("FILTER ").emit(cond, !nopar); }
@Override public void meet(Intersection node) { Filter clone = new Filter(); clone.setCondition(filter.getCondition().clone()); relocate(filter, node.getLeftArg()); relocate(clone, node.getRightArg()); FilterRelocator.relocate(filter); FilterRelocator.relocate(clone); }
@Override public void meet(Union union) { Filter clone = new Filter(); clone.setCondition(filter.getCondition().clone()); relocate(filter, union.getLeftArg()); relocate(clone, union.getRightArg()); FilterRelocator.relocate(filter); FilterRelocator.relocate(clone); }
@Override public void meet(Difference node) { Filter clone = new Filter(); clone.setCondition(filter.getCondition().clone()); relocate(filter, node.getLeftArg()); relocate(clone, node.getRightArg()); FilterRelocator.relocate(filter); FilterRelocator.relocate(clone); }