@Override
 public void visit(SubJoin subJoin) {
   FromItem left = subJoin.getLeft();
   FromItem right = subJoin.getJoin().getRightItem();
   FromItemVisitorImpl leftVisitor = new FromItemVisitorImpl(where);
   FromItemVisitorImpl rightVisitor = new FromItemVisitorImpl(where);
   left.accept(leftVisitor);
   right.accept(rightVisitor);
   relationProvider = PlanFactory.getInstance().newJoin();
   ((Join) relationProvider)
       .setInput(leftVisitor.getRelationProvider(), rightVisitor.getRelationProvider());
 }
 @Override
 public void visit(Table table) {
   TableScan tableScan = PlanFactory.getInstance().newTableScan(table.getName());
   relationProvider = PlanFactory.getInstance().newSelection();
   ((Selection) relationProvider).setInput(tableScan, getWhere(tableScan));
 }