.field(f1.getName(), "F")
.create();
// Test f1=A and f2=B
RecordScan scan = new RecordScan();
RecordFilterList filterList = new RecordFilterList();
filterList.addFilter(new FieldValueFilter(f1.getName(), "A"));
filterList.addFilter(new FieldValueFilter(f2.getName(), "B"));
scan.setRecordFilter(filterList);
assertEquals(1, countResults(repository.getScanner(scan)));
// Test f1=A or f2=B
scan = new RecordScan();
filterList = new RecordFilterList(RecordFilterList.Operator.MUST_PASS_ONE);
filterList.addFilter(new FieldValueFilter(f1.getName(), "A"));
filterList.addFilter(new FieldValueFilter(f2.getName(), "B"));
scan.setRecordFilter(filterList);
assertEquals(3, countResults(repository.getScanner(scan)));
// Test f1=A and (f2=B or f2=C)
scan = new RecordScan();
RecordFilterList filterList2 = new RecordFilterList(RecordFilterList.Operator.MUST_PASS_ONE);
filterList2.addFilter(new FieldValueFilter(f2.getName(), "B"));
filterList2.addFilter(new FieldValueFilter(f2.getName(), "C"));
filterList = new RecordFilterList();
filterList.addFilter(new FieldValueFilter(f1.getName(), "A"));
filterList.addFilter(filterList2);
scan.setRecordFilter(filterList);
assertEquals(2, countResults(repository.getScanner(scan)));
// Test f1=F and f2=Z
scan = new RecordScan();
filterList = new RecordFilterList();
filterList.addFilter(new FieldValueFilter(f1.getName(), "F"));
filterList.addFilter(new FieldValueFilter(f2.getName(), "Z"));
scan.setRecordFilter(filterList);
assertEquals(0, countResults(repository.getScanner(scan)));
// Test f1=F and (f2=Z with filterIfMissing=false)
scan = new RecordScan();
filterList = new RecordFilterList();
filterList.addFilter(new FieldValueFilter(f1.getName(), "F"));
FieldValueFilter fvf = new FieldValueFilter(f2.getName(), "Z");
fvf.setFilterIfMissing(false);
filterList.addFilter(fvf);
scan.setRecordFilter(filterList);