class ResultFilter extends Constraint {

  @Override
  public SeekingCurrentIterator getResultIterator() {
    SeekingCurrentIterator results;
    // if there is no subconstraint, just do the get on the table
    if (this.subConstraint == null) {
      Get get = new Get(this.range);
      for (CColumn column : this.columns)
        get.addColumn(column.getColumnFamily(), column.getColumnQualifier());
      results = table.get(get);
    } else
      results = this.subConstraint.getResultIterator();

    // check to see if we need to filter the columns
    if (this.columns == null || this.columns.length == 0)
      return results;

    // if we do, return a filtered version
    return new FilteringIterator(this.columns, results);
  }

  public  ResultFilter();
  public  ResultFilter(Constraint subConstraint, CRange range,
      CColumn... columns);
  public  ResultFilter(TableAdapter primaryTable, CRange range,
      CColumn... columns);
  public  ResultFilter(CRange range, Constraint subConstraint);
  public  ResultFilter(TableAdapter primaryTable, CRange range);
  public  ResultFilter(Constraint subConstraint, CColumn... columns);
  public  ResultFilter(TableAdapter primaryTable, CColumn... columns);
  public  ResultFilter(TableAdapter primaryTable);

}