@Override
  public LogicalNode visitScan(
      CompilationContext context,
      LogicalPlan plan,
      LogicalPlan.QueryBlock block,
      ScanNode node,
      Stack<LogicalNode> stack)
      throws TajoException {

    compileProjectableNode(context, node.getInSchema(), node);
    compileSelectableNode(context, node.getInSchema(), node);

    return node;
  }
    public SystemPhysicalExec(TaskAttemptContext context, ScanNode scanNode) {
      super(context, scanNode.getInSchema(), scanNode.getOutSchema());
      this.scanNode = scanNode;

      if (this.scanNode.hasQual()) {
        this.qual = this.scanNode.getQual();
        this.qual.bind(null, inSchema);
      }

      cachedData = TUtil.newList();
      currentRow = 0;
      isClosed = false;

      projector = new Projector(context, inSchema, outSchema, scanNode.getTargets());
    }