public static Collection<Quad> collectQuads(Op op, Collection<Quad> result) { if (op instanceof OpLeftJoin) { OpLeftJoin x = (OpLeftJoin) op; collectQuads(x.getLeft(), result); collectQuads(x.getRight(), result); } else if (op instanceof OpFilter) { OpFilter x = (OpFilter) op; collectQuads(x.getSubOp(), result); } else if (op instanceof OpJoin) { OpJoin x = (OpJoin) op; collectQuads(x.getLeft(), result); collectQuads(x.getRight(), result); } else if (op instanceof OpUnion) { System.out.println( "Warning: Collecting expressions from unions. Since the same vars may appear within different (parts of) unions, it may be ambiguous to which part the expression refers."); OpUnion x = (OpUnion) op; collectQuads(x.getLeft(), result); collectQuads(x.getRight(), result); } else if (op instanceof OpQuadPattern) { OpQuadPattern x = (OpQuadPattern) op; result.addAll(x.getPattern().getList()); } else if (op instanceof OpSequence) { OpSequence x = (OpSequence) op; for (Op element : x.getElements()) { collectQuads(element, result); } } else { throw new NotImplementedException("Encountered class: " + op); } return result; }
public static ExprList collectExprs(Op op, ExprList result) { if (op instanceof OpLeftJoin) { OpLeftJoin x = (OpLeftJoin) op; if (x.getExprs() != null) { result.addAll(x.getExprs()); } collectExprs(x.getLeft(), result); collectExprs(x.getRight(), result); } else if (op instanceof OpFilter) { OpFilter x = (OpFilter) op; result.addAll(x.getExprs()); collectExprs(x.getSubOp(), result); } else if (op instanceof OpJoin) { OpJoin x = (OpJoin) op; collectExprs(x.getLeft(), result); collectExprs(x.getRight(), result); } else if (op instanceof OpUnion) { System.out.println( "Warning: Collecting expressions from unions. Since the same vars may appear within different (parts of) unions, it may be ambiguous to which part the expression refers."); OpUnion x = (OpUnion) op; collectExprs(x.getLeft(), result); collectExprs(x.getRight(), result); } else if (op instanceof OpQuadPattern) { } else if (op instanceof OpSequence) { OpSequence x = (OpSequence) op; for (Op element : x.getElements()) { collectExprs(element, result); } } else { throw new RuntimeException("Not implemented. Type: " + op.getClass()); } return result; }
public void visit(OpJoin opJoin) { Table left = eval(opJoin.getLeft()); Table right = eval(opJoin.getRight()); Table table = evaluator.join(left, right); push(table); }