@Override public <X extends Exception> void visitChildren(QueryModelVisitor<X> visitor) throws X { arg.visit(visitor); }
@Override public void meet(LeftJoin leftJoin) { leftJoin.getLeftArg().visit(this); Set<String> origBoundVars = boundVars; try { boundVars = new HashSet<String>(boundVars); boundVars.addAll(leftJoin.getLeftArg().getBindingNames()); leftJoin.getRightArg().visit(this); } finally { boundVars = origBoundVars; } }
private static List<TupleExpr> getPlans(List<Map<Join, List<TupleExpr>>> reOrderings, TupleExpr te) { List<TupleExpr> queryPlans = Lists.newArrayList(); PermInserter pm = new PermInserter(); for (Map<Join, List<TupleExpr>> order : reOrderings) { TupleExpr clone = te.clone(); pm.setReOrderMap(order); clone.visit(pm); queryPlans.add(clone); } return queryPlans; }
@Override protected void meetNode(QueryModelNode node) { if (node instanceof TupleExpr && node != nodeToIgnore) { TupleExpr tupleExpr = (TupleExpr)node; bindingNames.addAll(tupleExpr.getBindingNames()); } } }
public ServiceRoot(TupleExpr serviceArgs) { super(serviceArgs.clone()); this.originalServiceArgs = serviceArgs; } }
public FlattenedOptional(LeftJoin node) { rightArgs = getJoinArgs(node.getRightArg(), new HashSet<TupleExpr>()); boundVars = setWithOutConstants( Sets.intersection(node.getLeftArg().getAssuredBindingNames(), node.getRightArg().getBindingNames())); unboundVars = setWithOutConstants(Sets.difference(node.getRightArg().getBindingNames(), boundVars)); condition = node.getCondition(); rightArg = node.getRightArg(); getVarCounts(node); assuredBindingNames = new HashSet<>(leftArgVarCounts.keySet()); bindingNames = new HashSet<>(Sets.union(assuredBindingNames, unboundVars)); }
public Set<String> getAssuredBindingNames() { Set<String> bindingNames = new LinkedHashSet<String>(16); bindingNames.addAll(getLeftArg().getAssuredBindingNames()); bindingNames.retainAll(getRightArg().getAssuredBindingNames()); return bindingNames; }
private TupleExpr join(TupleExpr node, TupleExpr toMove) { toMove.replaceWith(new SingletonSet()); if (node != null) { node = new Join(node, toMove); } else { node = toMove; } return node; }
@Override protected void meetNode(QueryModelNode node) { if (node instanceof TupleExpr && node != nodeToIgnore) { TupleExpr tupleExpr = (TupleExpr)node; bindingNames.addAll(tupleExpr.getBindingNames()); } } }
@Override public Modify clone() { TupleExpr deleteClone = deleteExpr != null ? deleteExpr.clone() : null; TupleExpr insertClone = insertExpr != null ? insertExpr.clone() : null; TupleExpr whereClone = whereExpr != null ? whereExpr.clone() : null; return new Modify(deleteClone, insertClone, whereClone); }
@Override public Set<String> getAssuredBindingNames() { Set<String> bindingNames = new LinkedHashSet<>(16); bindingNames.addAll(getLeftArg().getAssuredBindingNames()); bindingNames.retainAll(getRightArg().getAssuredBindingNames()); return bindingNames; }
private TupleExpr join(TupleExpr node, TupleExpr toMove) { toMove.replaceWith(new SingletonSet()); if (node != null) { node = new Join(node, toMove); } else { node = toMove; } return node; }
private void binaryOpMeet(TupleExpr theCurrentExpr, TupleExpr theLeftExpr, TupleExpr theRightExpr) throws Exception { theLeftExpr.visit(this); Var aLeftCtx = mContexts.get(theLeftExpr); theRightExpr.visit(this); Var aRightCtx = mContexts.get(theRightExpr); sameCtxCheck(theCurrentExpr, theLeftExpr, aLeftCtx, theRightExpr, aRightCtx); }
@Override public void meet(LeftJoin leftJoin) { leftJoin.getLeftArg().visit(this); Set<String> origBoundVars = boundVars; try { boundVars = new HashSet<String>(boundVars); boundVars.addAll(leftJoin.getLeftArg().getBindingNames()); leftJoin.getRightArg().visit(this); } finally { boundVars = origBoundVars; } }
public Set<String> getBindingNames() { Set<String> bindingNames = new LinkedHashSet<String>(16); bindingNames.addAll(getLeftArg().getBindingNames()); bindingNames.addAll(getRightArg().getBindingNames()); return bindingNames; }
@Override public Modify clone() { TupleExpr deleteClone = deleteExpr != null ? deleteExpr.clone() : null; TupleExpr insertClone = insertExpr != null ? insertExpr.clone() : null; TupleExpr whereClone = whereExpr != null ? whereExpr.clone() : null; return new Modify(deleteClone, insertClone, whereClone); }
@Override public Set<String> getAssuredBindingNames() { Set<String> bindingNames = new LinkedHashSet<>(16); bindingNames.addAll(getLeftArg().getAssuredBindingNames()); bindingNames.retainAll(getRightArg().getAssuredBindingNames()); return bindingNames; }
protected void relocate(final Filter filter, final TupleExpr newFilterArg) { if (!filter.getArg().equals(newFilterArg)) { if (filter.getParentNode() != null) { // Remove filter from its original location filter.replaceWith(filter.getArg()); } // Insert filter at the new location newFilterArg.replaceWith(filter); filter.setArg(newFilterArg); } } }
/** * Applies generally applicable optimizations to the supplied query: variable assignments are inlined. */ public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) { tupleExpr.visit(new CompareVisitor()); }
@Override public void meet(final Join join) { if (join.getRightArg().getBindingNames().containsAll(filterVars)) { // All required vars are bound by the left expr join.getRightArg().visit(this); } else if (join.getLeftArg().getBindingNames() .containsAll(filterVars)) { // All required vars are bound by the right expr join.getLeftArg().visit(this); } else { relocate(filter, join); } }