@Override public void meet(StatementPattern sp) { sp.replaceWith(new AggregationPipelineQueryNode(inputCollection, sp)); }
private void removeMatchedPattern(final TupleExpr tupleExpr, final StatementPattern pattern, final TupleExprReplacer replacer) { final List<TupleExpr> indexTuples = replacer.createReplacement(pattern); if (indexTuples.size() > 1) { final VarExchangeVisitor vev = new VarExchangeVisitor(pattern); tupleExpr.visit(vev); Join join = new Join(indexTuples.remove(0), indexTuples.remove(0)); for (final TupleExpr geo : indexTuples) { join = new Join(join, geo); } pattern.replaceWith(join); } else if (indexTuples.size() == 1) { pattern.replaceWith(indexTuples.get(0)); pattern.setParentNode(null); } else { throw new IllegalStateException("Must have at least one replacement for matched StatementPattern."); } }
@Override public void meet(final Join node) { final QueryModelNode lNode = node.getLeftArg(); if (lNode instanceof StatementPattern) { exchangeVar.replaceWith(lNode); node.setLeftArg(exchangeVar); } else { super.meet(node); } } }
node.replaceWith(union); log.trace("Replacing node with inferred intersection union: " + union);
@Override public void updateQueryModelNodes(boolean hasResult) { QueryModelNode replacementNode = hasResult ? new SingletonSet() : new EmptySet(); geoStatement.replaceWith(replacementNode); if (hasResult) { filter.replaceWith(filter.getArg()); } else { filter.replaceWith(new EmptySet()); } if (functionParent instanceof ExtensionElem) { Extension extension = (Extension)functionParent.getParentNode(); List<ExtensionElem> elements = extension.getElements(); if (elements.size() > 1) { elements.remove(functionParent); } else { extension.replaceWith(extension.getArg()); } } } }
@Override protected void meetSP(final StatementPattern node) throws Exception { final StatementPattern sp = node.clone(); final Var predVar = sp.getPredicateVar(); final IRI pred = (IRI) predVar.getValue(); final String predNamespace = pred.getNamespace(); final Var objVar = sp.getObjectVar(); final Var cntxtVar = sp.getContextVar(); if (objVar != null && !RDF.NAMESPACE.equals(predNamespace) && !SESAME.NAMESPACE.equals(predNamespace) && !RDFS.NAMESPACE.equals(predNamespace) && !EXPANDED.equals(cntxtVar)) { final IRI transPropIri = (IRI) predVar.getValue(); if (inferenceEngine.isTransitiveProperty(transPropIri)) { node.replaceWith(new TransitivePropertySP(sp.getSubjectVar(), sp.getPredicateVar(), sp.getObjectVar(), sp.getContextVar())); } } } }
@Override public void updateQueryModelNodes(boolean hasResult) { QueryModelNode replacementNode = hasResult ? new SingletonSet() : new EmptySet(); geoStatement.replaceWith(replacementNode); if (hasResult) { filter.replaceWith(filter.getArg()); } else { filter.replaceWith(new EmptySet()); } QueryModelNode functionParent = distanceFunction.getParentNode(); if (functionParent instanceof ExtensionElem) { Extension extension = (Extension)functionParent.getParentNode(); List<ExtensionElem> elements = extension.getElements(); if (elements.size() > 1) { elements.remove(functionParent); } else { extension.replaceWith(extension.getArg()); } } }
final InferJoin join = new InferJoin(fsp, rdfType); join.getProperties().put(InferConstants.INFERRED, InferConstants.TRUE); node.replaceWith(join);
@Override protected void meetSP(final StatementPattern node) throws Exception { final Var subVar = node.getSubjectVar(); final Var predVar = node.getPredicateVar(); final Var objVar = node.getObjectVar(); final Var conVar = node.getContextVar(); if (predVar != null && objVar != null && objVar.getValue() != null && objVar.getValue() instanceof Resource && RDF.TYPE.equals(predVar.getValue()) && !EXPANDED.equals(conVar)) { final Resource object = (Resource) objVar.getValue(); if (inferenceEngine.isEnumeratedType(object)) { final Set<BindingSet> solutions = new LinkedHashSet<>(); final Set<Resource> enumeration = inferenceEngine.getEnumeration(object); for (final Resource enumType : enumeration) { final QueryBindingSet qbs = new QueryBindingSet(); qbs.addBinding(subVar.getName(), enumType); solutions.add(qbs); } if (!solutions.isEmpty()) { final BindingSetAssignment enumNode = new BindingSetAssignment(); enumNode.setBindingSets(solutions); node.replaceWith(enumNode); log.trace("Replacing node with inferred one of enumeration: " + enumNode); } } } } }
node.replaceWith(lastRight);
union.setLeftArg(sp); union.setRightArg(new StatementPattern(objVar, predVar, subjVar, cntxtVar)); node.replaceWith(union);
node.replaceWith(currentNode); node.replaceWith(new InferUnion(new InferJoin(typeToValue, typeSP), directValueSP));
union.setLeftArg(sp); union.setRightArg(new StatementPattern(objVar, new Var(predVar.getName(), invPropIri), subjVar, cntxtVar)); node.replaceWith(union);
final InferJoin join = new InferJoin(fsp, rdfType); join.getProperties().put(InferConstants.INFERRED, InferConstants.TRUE); node.replaceWith(join);
node.replaceWith(new InferUnion(node.clone(), avfInferenceQuery));
node.replaceWith(new InferUnion(node.clone(), svfInferenceQuery));
/** * Check whether any solution for the {@link StatementPattern} could be derived from * reflexive property inference, and if so, replace the pattern with a union of itself and the * reflexive solution. */ @Override protected void meetSP(StatementPattern node) throws Exception { // Only applies when the predicate is defined and reflexive final Var predVar = node.getPredicateVar(); if (predVar.getValue() != null && inferenceEngine.isReflexiveProperty((IRI) predVar.getValue())) { final StatementPattern originalSP = node.clone(); // The reflexive solution is a ZeroLengthPath between subject and // object: they can be matched to one another, whether constants or // variables. final Var subjVar = node.getSubjectVar(); final Var objVar = node.getObjectVar(); final ZeroLengthPath reflexiveSolution = new ZeroLengthPath(subjVar, objVar); node.replaceWith(new InferUnion(originalSP, reflexiveSolution)); } } }
node.replaceWith(currentNode);
sp.replaceWith(join); join.setLeftArg(sp); join.setRightArg(funcCall);
clone.getSubjectVar())); node.replaceWith(union); node.replaceWith(union);