@Override public Union visit(UnionBlock expr, QueryMetadata md) { List<TupleExpr> tuples = new ArrayList<TupleExpr>(expr.getBlocks().size()); for (Block block : expr.getBlocks()) { tuples.add(toTuple(block, md)); } Union rv = new Union(tuples.get(0), tuples.get(1)); for (int i = 2; i < tuples.size(); i++) { rv = new Union(rv, tuples.get(i)); } return rv; }
@Override public Union visit(UnionBlock expr, QueryMetadata md) { List<TupleExpr> tuples = new ArrayList<TupleExpr>(expr.getBlocks().size()); for (Block block : expr.getBlocks()) { tuples.add(toTuple(block, md)); } return new Union(tuples); }
@Override public Union visit(UnionBlock expr, QueryMetadata md) { List<TupleExpr> tuples = new ArrayList<TupleExpr>(expr.getBlocks().size()); for (Block block : expr.getBlocks()){ tuples.add(toTuple(block, md)); } return new Union(tuples); }
private void addUnionOfMembers(NaryJoin replacement, NaryJoin join) { TupleExpr union = null; for (RepositoryConnection member : members) { OwnedTupleExpr arg = new OwnedTupleExpr(member, join.clone()); // NOPMD union = union == null ? arg : new Union(union, arg); // NOPMD } if (union != null) { replacement.addArg(union); } }
@Override public Object visit(ASTPathExprUnion node, Object data) throws VisitorException { Iterator<ASTPathExpr> args = node.getPathExprList().iterator(); // Create new sub-graph pattern for optional path expressions TupleExpr unionExpr = parseGraphPattern(args.next()).buildTupleExpr(); while (args.hasNext()) { TupleExpr argExpr = parseGraphPattern(args.next()).buildTupleExpr(); unionExpr = new Union(unionExpr, argExpr); } graphPattern.addRequiredTE(unionExpr); return null; }
@Override public void meet(Union node) throws RepositoryException { super.meet(node); List<Owned<TupleExpr>> ows = new ArrayList<Owned<TupleExpr>>(); for (TupleExpr arg : new TupleExpr[] { node.getLeftArg(), // NOPMD node.getRightArg() }) { RepositoryConnection member = getSingleOwner(arg); int idx = ows.size() - 1; if ((!ows.isEmpty()) && ows.get(idx).getOwner() == member) { TupleExpr union = ows.get(idx).getOperation(); union = new Union(union, arg.clone()); // NOPMD ows.get(idx).setOperation(union); } else { ows.add(new Owned<TupleExpr>(member, arg.clone())); // NOPMD } } addOwners(node, ows); }
/** * Transform a statement pattern to infer triples for a predicate variable. * * @param node the node to transform * @return list of nodes to visit next */ @Override public List<QueryModelNode> apply(StatementPattern node) { List<QueryModelNode> next = newNextList(); StatementPattern left = node.clone(); next.add(left); TupleExpr right = assignPredicates(predicates, node.clone(), next); node.replaceWith(new Union(left, right)); return next; }
@Override public void meet(Union node) throws RepositoryException { super.meet(node); List<Owned<TupleExpr>> ows = new ArrayList<Owned<TupleExpr>>(); for (TupleExpr arg : new TupleExpr[] { node.getLeftArg(), node.getRightArg() }) { RepositoryConnection member = getSingleOwner(arg); int idx = ows.size() - 1; if (ows.size() > 0 && ows.get(idx).getOwner() == member) { TupleExpr union = ows.get(idx).getOperation(); union = new Union(union, arg.clone()); ows.get(idx).setOperation(union); } else { ows.add(new Owned<TupleExpr>(member, arg.clone())); } } addOwners(node, ows); }
/** * @inheritDoc */ public TupleExpr expr() { if (mLeft != null && mRight != null) { return new Union(mLeft.expr(), mRight.expr()); } else if (mLeft != null && mRight == null) { return mLeft.expr(); } else if (mRight != null && mLeft == null) { return mRight.expr(); } else { return null; } }
/** * Transform a statement pattern according to OWL-2 property chain * axiom. * * @param node the node to transform * @return list of nodes to visit next */ @Override public List<QueryModelNode> apply(StatementPattern node) { List<QueryModelNode> next = newNextList(); Var s = node.getSubjectVar(); Var o = node.getObjectVar(); Var c = node.getContextVar(); TupleExpr left = node.clone(); TupleExpr right = getChain(s, o, c); node.replaceWith(new Union(left, right)); next.add(left); next.add(right); return next; }
@Override public TupleExpr visit(ASTGraphUnion node, Object data) throws VisitorException { TupleExpr leftArg = (TupleExpr)node.getLeftArg().jjtAccept(this, null); TupleExpr rightArg = (TupleExpr)node.getRightArg().jjtAccept(this, null); TupleExpr result = new Union(leftArg, rightArg); if (node.isDistinct()) { result = new Distinct(result); } return result; }
@Override public TupleExpr visit(ASTTupleUnion node, Object data) throws VisitorException { TupleExpr leftArg = (TupleExpr)node.getLeftArg().jjtAccept(this, null); TupleExpr rightArg = (TupleExpr)node.getRightArg().jjtAccept(this, null); TupleExpr result = new Union(leftArg, rightArg); if (node.isDistinct()) { result = new Distinct(result); } return result; }
/** * Transform a statement pattern according to OWL-2 subclass axiom. * * @param node the node to transform * @return list of nodes to visit next */ @Override public List<QueryModelNode> apply(StatementPattern node) { List<QueryModelNode> next = newNextList(); StatementPattern left = node.clone(); // replace the object with the subclass StatementPattern right = new StatementPattern( node.getSubjectVar(), node.getPredicateVar(), new ConstVar(vf.createURI(ce1)), node.getContextVar()); node.replaceWith( new Union(left, right)); next.add(left); next.add(right); return next; }
/** * Transform a statement pattern according to OWL-2 subproperty axiom. * * @param node the node to transform * @return list of nodes to visit next */ @Override public List<QueryModelNode> apply(StatementPattern node) { List<QueryModelNode> next = newNextList(); StatementPattern left = node.clone(); // replace the predicate with the subproperty StatementPattern right = new StatementPattern( node.getSubjectVar(), new ConstVar(vf.createURI(op1)), node.getObjectVar(), node.getContextVar()); node.replaceWith( new Union(left, right)); next.add(left); next.add(right); return next; }
@Override public Object visit(ASTUnionGraphPattern node, Object data) throws VisitorException { GraphPattern parentGP = graphPattern; graphPattern = new GraphPattern(parentGP); node.jjtGetChild(0).jjtAccept(this, null); TupleExpr leftArg = graphPattern.buildTupleExpr(); graphPattern = new GraphPattern(parentGP); node.jjtGetChild(1).jjtAccept(this, null); TupleExpr rightArg = graphPattern.buildTupleExpr(); parentGP.addRequiredTE(new Union(leftArg, rightArg)); graphPattern = parentGP; return null; }
/** locked by this */ private void read(Resource subj, URI pred, Value obj, boolean inf, Resource... contexts) { contexts = notNull(contexts); Var subjVar = new Var("subj", subj); Var predVar = new Var("pred", pred); Var objVar = new Var("obj", obj); TupleExpr union = null; if (contexts.length == 0) { union = new StatementPattern(subjVar, predVar, objVar); } for (Resource ctx : contexts) { Var ctxVar = new Var("graph", ctx); Scope scope = ctx == null ? DEFAULT_CONTEXTS : NAMED_CONTEXTS; TupleExpr sp = new StatementPattern(scope, subjVar, predVar, objVar, ctxVar); union = union == null ? sp : new Union(union, sp); } addRead(new EvaluateOperation(union, inf)); }
private void performReplacementsInNode(NaryJoin node, List<LocalJoin> vars) { NaryJoin replacement = new NaryJoin(); for (LocalJoin e : vars) { if (distinct || e.getVar() != null) { TupleExpr union = null; for (RepositoryConnection member : members) { TupleExpr arg = new OwnedTupleExpr(member, e.getJoin() // NOPMD .clone()); union = union == null ? arg : new Union(union, arg); // NOPMD } if (union != null) { replacement.addArg(union); } } else { for (TupleExpr expr : e.getJoin().getArgs()) { replacement.addArg(expr); } } } node.replaceWith(replacement); }
@Override public TupleExpr visit(PatternBlock expr, QueryMetadata md) { Var subject = toVar(expr.getSubject(), md); Var predicate = toVar(expr.getPredicate(), md); Var object = toVar(expr.getObject(), md); StatementPattern pattern; if (expr.getContext() != null){ pattern = new StatementPattern(subject, predicate, object, toVar(expr.getContext(), md)); }else if (!graphs.isEmpty()){ pattern = new StatementPattern(subject, predicate, object, graphs.peek()); }else{ pattern = new StatementPattern(subject, predicate, object); } // datatype inference (string typed literal can be replaced with untyped) via union if (object.getValue() != null && object.getValue() instanceof Literal && XMLSchema.STRING.equals(((Literal)object.getValue()).getDatatype())){ Var object2 = new Var(object.getName(), dialect.getLiteral(new LIT(object.getValue().stringValue(), RDF.text))); return new Union(pattern, new StatementPattern(subject, predicate, object2, pattern.getContextVar())); }else{ return pattern; } }
@Override public TupleExpr visit(PatternBlock expr, QueryMetadata md) { Var subject = toVar(expr.getSubject(), md); Var predicate = toVar(expr.getPredicate(), md); Var object = toVar(expr.getObject(), md); StatementPattern pattern; if (expr.getContext() != null) { pattern = new StatementPattern(subject, predicate, object, toVar(expr.getContext(), md)); } else if (!graphs.isEmpty()) { pattern = new StatementPattern(subject, predicate, object, graphs.peek()); } else { pattern = new StatementPattern(subject, predicate, object); } // datatype inference (string typed literal can be replaced with // untyped) via union if (object.getValue() != null && object.getValue() instanceof Literal && XMLSchema.STRING.equals(((Literal) object.getValue()).getDatatype())) { Var object2 = new Var(object.getName(), dialect.getLiteral(new LIT(object.getValue().stringValue(), RDF.text))); return new Union(pattern, new StatementPattern(subject, predicate, object2, pattern.getContextVar())); } else { return pattern; } }
@Override public void meet(Filter filter) { if (filter.getCondition() instanceof Or && containsSameTerm(filter.getCondition())) { Or orNode = (Or)filter.getCondition(); TupleExpr filterArg = filter.getArg(); ValueExpr leftConstraint = orNode.getLeftArg(); ValueExpr rightConstraint = orNode.getRightArg(); // remove filter filter.replaceWith(filterArg); // Push UNION down below other filters to avoid cloning them TupleExpr node = findNotFilter(filterArg); Filter leftFilter = new Filter(node.clone(), leftConstraint); Filter rightFilter = new Filter(node.clone(), rightConstraint); Union union = new Union(leftFilter, rightFilter); node.replaceWith(union); filter.getParentNode().visit(this); } else { super.meet(filter); } }