@Override public ZeroLengthPath clone() { ZeroLengthPath clone = (ZeroLengthPath)super.clone(); clone.setSubjectVar(getSubjectVar().clone()); clone.setObjectVar(getObjectVar().clone()); if (getContextVar() != null) { clone.setContextVar(getContextVar().clone()); } return clone; } }
@Override public ZeroLengthPath clone() { ZeroLengthPath clone = (ZeroLengthPath)super.clone(); clone.setSubjectVar(getSubjectVar().clone()); clone.setObjectVar(getObjectVar().clone()); if (getContextVar() != null) { clone.setContextVar(getContextVar().clone()); } return clone; } }
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(ZeroLengthPath zlp, final BindingSet bindings) throws QueryEvaluationException { final Var subjectVar = zlp.getSubjectVar(); final Var objVar = zlp.getObjectVar(); final Var contextVar = zlp.getContextVar(); Value subj = null; try { subj = evaluate(subjectVar, bindings); } catch (QueryEvaluationException e) { } Value obj = null; try { obj = evaluate(objVar, bindings); } catch (QueryEvaluationException e) { } if (subj != null && obj != null) { if (!subj.equals(obj)) { return new EmptyIteration<BindingSet, QueryEvaluationException>(); } } return getZeroLengthPathIterator(bindings, subjectVar, objVar, contextVar, subj, obj); }
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(ZeroLengthPath zlp, final BindingSet bindings) throws QueryEvaluationException { final Var subjectVar = zlp.getSubjectVar(); final Var objVar = zlp.getObjectVar(); final Var contextVar = zlp.getContextVar(); Value subj = null; try { subj = evaluate(subjectVar, bindings); } catch (QueryEvaluationException e) { } Value obj = null; try { obj = evaluate(objVar, bindings); } catch (QueryEvaluationException e) { } if (subj != null && obj != null) { if (!subj.equals(obj)) { return new EmptyIteration<BindingSet, QueryEvaluationException>(); } } return getZeroLengthPathIterator(bindings, subjectVar, objVar, contextVar, subj, obj); }
@Override public boolean equals(Object other) { if (other instanceof ZeroLengthPath) { ZeroLengthPath o = (ZeroLengthPath)other; return subjectVar.equals(o.getSubjectVar()) && objectVar.equals(o.getObjectVar()) && nullEquals(contextVar, o.getContextVar()) && scope.equals(o.getScope()); } return false; }
@Override public boolean equals(Object other) { if (other instanceof ZeroLengthPath) { ZeroLengthPath o = (ZeroLengthPath)other; return subjectVar.equals(o.getSubjectVar()) && objectVar.equals(o.getObjectVar()) && nullEquals(contextVar, o.getContextVar()) && scope.equals(o.getScope()); } return false; }
@Override public void meet(ZeroLengthPath node) { Var subjVar = node.getSubjectVar(); Var objVar = node.getObjectVar(); if ((subjVar != null && subjVar.hasValue()) || (objVar != null && objVar.hasValue())) { // subj = obj cardinality = 1.0; } else { // actual cardinality = count(union(subjs, objs)) // but cost is equivalent to ?s ?p ?o ?c (impl scans all statements) // so due to the lower actual cardinality we value it in preference to a fully unbound statement pattern. cardinality = getSubjectCardinality(subjVar) * getObjectCardinality(objVar) * getContextCardinality(node.getContextVar()); } }
@Override public void meet(ZeroLengthPath node) { Var subjVar = node.getSubjectVar(); Var objVar = node.getObjectVar(); if ((subjVar != null && subjVar.hasValue()) || (objVar != null && objVar.hasValue())) { // subj = obj cardinality = 1.0; } else { // actual cardinality = count(union(subjs, objs)) // but cost is equivalent to ?s ?p ?o ?c (impl scans all statements) // so due to the lower actual cardinality we value it in preference to a fully unbound statement pattern. cardinality = getSubjectCardinality(subjVar) * getObjectCardinality(objVar) * getContextCardinality(node.getContextVar()); } }
/** * Evaluate {@link ZeroLengthPath} query model nodes * @param parent * @param zlp * @param bindings */ private void evaluateZeroLengthPath(BindingSetPipe parent, ZeroLengthPath zlp, BindingSet bindings) { final Var subjectVar = zlp.getSubjectVar(); final Var objVar = zlp.getObjectVar(); final Var contextVar = zlp.getContextVar(); Value subj = subjectVar.getValue() == null ? bindings.getValue(subjectVar.getName()) : subjectVar.getValue(); Value obj = objVar.getValue() == null ? bindings.getValue(objVar.getName()) : objVar.getValue(); if (subj != null && obj != null) { if (!subj.equals(obj)) { try { parent.push(null); } catch (InterruptedException e) { parent.handleException(e); } return; } } //temporary solution using copy of the original iterator //re-writing this to push model is a bit more complex task HalyardStatementPatternEvaluation.enqueue(parent, new ZeroLengthPathIteration(parentStrategy, subjectVar, objVar, subj, obj, contextVar, bindings), zlp); }