I ran into some problems with FilterList and SingleColumnValueFilter.

I created a FilterList with MUST_PASS_ONE and two SingleColumnValueFilters
(each testing equality on a different columns) and query some trivial data:

http://pastie.org/744890

The problem that I encountered were two-fold:

SingleColumnValueFilter.filterKeyValues() returns ReturnCode.INCLUDE
if the column names do not match. If FilterList is employed, then when the
first Filter returns INCLUDE (because the column names do not match), no 
more filters for that KeyValue are evaluated.  That is problematic because
when filterRow() is finally called for those filters, matchedColumn is never
found to be true because they were not invoked (due to FilterList exiting from 
the filterList iteration when the name mismatched INCLUDE was returned).  
The fix (at least for this scenario) is for 
SingleColumnValueFilter.filterKeyValues() to 
return ReturnCode.NEXT_ROW (rather than INCLUDE).

The second problem is at the bottom of FilterList.filterKeyValue()
where ReturnCode.SKIP is returned if MUST_PASS_ONE is the operator,
rather than always returning ReturnCode.INCLUDE and then leaving the
final filter decision to be made by the call to filterRow().   I am sure there 
is a good 
reason for returning SKIP in other scenarios, but it is problematic in mine.

Feedback would be much appreciated.

Paul







Reply via email to