@Override public void meet(ArbitraryLengthPath node) { // actual cardinality = count(union(subjs, objs)) // but might require getting all statements // so due to the lower actual cardinality we value it in preference to a fully unbound statement pattern. cardinality = getSubjectCardinality(node.getSubjectVar()) * getObjectCardinality(node.getObjectVar()) * getContextCardinality(node.getContextVar()); }
@Override public boolean equals(Object other) { if (other instanceof ArbitraryLengthPath) { ArbitraryLengthPath o = (ArbitraryLengthPath)other; return subjectVar.equals(o.getSubjectVar()) && pathExpression.equals(o.getPathExpression()) && objectVar.equals(o.getObjectVar()) && nullEquals(contextVar, o.getContextVar()) && scope.equals(o.getScope()); } return false; }
@Override public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(ArbitraryLengthPath alp, final BindingSet bindings) throws QueryEvaluationException { final Scope scope = alp.getScope(); final Var subjectVar = alp.getSubjectVar(); final TupleExpr pathExpression = alp.getPathExpression(); final Var objVar = alp.getObjectVar(); final Var contextVar = alp.getContextVar(); final long minLength = alp.getMinLength(); return new LimitedSizePathIterator(this, scope, subjectVar, pathExpression, objVar, contextVar, minLength, bindings, used, maxSize); } @Override
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(ArbitraryLengthPath alp, final BindingSet bindings) throws QueryEvaluationException { final Scope scope = alp.getScope(); final Var subjectVar = alp.getSubjectVar(); final TupleExpr pathExpression = alp.getPathExpression(); final Var objVar = alp.getObjectVar(); final Var contextVar = alp.getContextVar(); final long minLength = alp.getMinLength(); return new PathIteration(this, scope, subjectVar, pathExpression, objVar, contextVar, minLength, bindings); }
@Override public void meet(final ArbitraryLengthPath n) { final Var s = n.getSubjectVar(); final Var o = n.getObjectVar(); final Var c = n.getContextVar(); if (c != null) { emit("GRAPH ").emit(c).openBrace(); } emit(s).emit(" ").emitPropertyPath(n, s, o).emit(" ").emit(o).emit(" ."); if (c != null) { closeBrace(); } }
@Override public void meet(final ArbitraryLengthPath n) { final Var s = n.getSubjectVar(); final Var o = n.getObjectVar(); final Var c = n.getContextVar(); if (c != null) { emit("GRAPH ").emit(c).openBrace(); } emit(s).emit(" ").emitPropertyPath(n, s, o).emit(" ").emit(o).emit(" ."); if (c != null) { closeBrace(); } }
@Override public ArbitraryLengthPath clone() { ArbitraryLengthPath clone = (ArbitraryLengthPath)super.clone(); clone.setSubjectVar(getSubjectVar().clone()); clone.setPathExpression(getPathExpression().clone()); clone.setObjectVar(getObjectVar().clone()); if (getContextVar() != null) { clone.setContextVar(getContextVar().clone()); } return clone; } }
final List<Var> sameTermArgs = Arrays.asList((Var)leftArg, (Var)rightArg); if (sameTermArgs.contains(alp.getSubjectVar()) && sameTermArgs.contains(alp.getObjectVar())) {