protected IColumn computeNext() {
    if (reader == null) return endOfData();

    while (true) {
      IColumn column = reader.pollColumn();
      if (column == null) return endOfData();
      if (isColumnNeeded(column)) return column;
    }
  }