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 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> getAssuredBindingNames() { Set<String> bindingNames = new LinkedHashSet<String>(16); bindingNames.addAll(getLeftArg().getAssuredBindingNames()); bindingNames.addAll(getRightArg().getAssuredBindingNames()); return bindingNames; }
public static TupleExpr rewriteGraph(final TupleExpr expr, final Var graphVar) { if (expr == null) { return null; } final TupleExpr result = expr.clone(); result.setParentNode(null); result.visit(new QueryModelVisitorBase<RuntimeException>() { @Override public void meet(final StatementPattern pattern) throws RuntimeException { pattern.setContextVar(graphVar); } }); return result; }
@Override public <X extends Exception> void visitChildren(QueryModelVisitor<X> visitor) throws X { arg.visit(visitor); }
public TupleExpr getTupleExpr() { return _tupleExpr.clone(); }
@Override protected void meetNode(QueryModelNode node) { if (node instanceof TupleExpr && node != nodeToIgnore) { TupleExpr tupleExpr = (TupleExpr)node; bindingNames.addAll(tupleExpr.getBindingNames()); } } }
private void meetNodeLocalParentNotOwned(StringBuilder builder, boolean mapping, Map<String, String> bindings, ProjectionElemList list) throws RepositoryException, MalformedQueryException { OwnedTupleExpr owned = new OwnedTupleExpr(owner.getOwner(), patternNode.clone()); owned.prepare(QueryLanguage.SPARQL, builder.toString(), bindings); if (mapping) { Projection proj = new Projection(owned, list); patternNode.replaceWith(proj); } else { patternNode.replaceWith(owned); } }
public void visitDeleteWhere(Resource query) throws OpenRDFException { SingletonSet stub = new SingletonSet(); tupleRoot = new QueryRoot(stub); tupleNode = stub; visitWhere(query); tupleNode.setParentNode(null); updateRoot = new Modify(tupleNode, null, tupleNode.clone()); }
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)); }
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 meetNodeLocal(StringBuilder builder, boolean mapping, Map<String, String> bindings, ProjectionElemList list) throws RepositoryException, AssertionError { try { QueryModelNode parent = patternNode.getParentNode(); if (parent instanceof OwnedTupleExpr) { OwnedTupleExpr owned = (OwnedTupleExpr)parent; meetNodeLocalParentOwned(builder, mapping, bindings, list, owned); } else { meetNodeLocalParentNotOwned(builder, mapping, bindings, list); } } catch (MalformedQueryException e) { throw new AssertionError(e); } }
@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); }
public HashJoinIteration(EvaluationStrategy strategy, TupleExpr left, TupleExpr right, BindingSet bindings, boolean leftJoin) throws QueryEvaluationException { leftIter = strategy.evaluate(left, bindings); rightIter = strategy.evaluate(right, bindings); Set<String> joinAttributeNames = left.getBindingNames(); joinAttributeNames.retainAll(right.getBindingNames()); joinAttributes = joinAttributeNames.toArray(new String[joinAttributeNames.size()]); this.leftJoin = leftJoin; }
private void addDistinctOwnersNonLocal(LeftJoin node, RepositoryConnection leftOwner, RepositoryConnection rightOwner) { if (leftOwner != null) { node.getLeftArg().replaceWith(new OwnedTupleExpr(leftOwner, node.getLeftArg().clone())); } if (rightOwner != null) { node.getRightArg().replaceWith(new OwnedTupleExpr(rightOwner, node.getRightArg().clone())); } }
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); } } }
@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 void optimize(TupleExpr query, Dataset dataset, BindingSet bindings) { try { query.visit(this); } catch (RepositoryException e) { throw new UndeclaredThrowableException(e); } }