@Override public Void visit(UnionBlock expr, Void context) { handle(expr.getBlocks()); return null; }
public static UnionBlock union(Block... blocks) { return new UnionBlock(Arrays.asList(blocks)); }
@Override @SuppressWarnings("unchecked") public <R, C> R accept(Visitor<R, C> v, C context) { if (v instanceof RDFVisitor) { return (R) ((RDFVisitor) v).visit(this, context); } else if (v instanceof ToStringVisitor) { return (R) toString(); } else if (v.getClass().getName().equals("com.mysema.query.types.ExtractorVisitor")) { return (R) this; } else { throw new IllegalArgumentException(v.toString()); } }
@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; }
@SuppressWarnings("unchecked") @Override public Pair<? extends Iterable<Bindings>, Bindings> visit(UnionBlock expr, Bindings bindings) { // TODO : make sure this works List<Iterable<Bindings>> iterables = new ArrayList<Iterable<Bindings>>(); for (Block block : expr.getBlocks()) { Pair<Iterable<Bindings>, Bindings> iterableAndBindings = (Pair) block.accept(this, bindings); iterables.add(iterableAndBindings.getFirst()); } return Pair.<Iterable<Bindings>, Bindings> of(Iterables.<Bindings> concat(iterables.toArray(new Iterable[iterables.size()])), bindings); }
@Nullable public Void visit(UnionBlock expr, @Nullable Void context) { lastPattern = null; boolean first = true; for (Block block : expr.getBlocks()) { if (!first) { append("UNION "); } if (block instanceof PatternBlock) { append("{ ").handle(block).append("} "); } else { handle(block); } lastPattern = null; first = false; } return null; }