FieldType f1 = typeManager.createFieldType("STRING", new QName("ReturnFieldsScan", "f1"), Scope.NON_VERSIONED);
FieldType f2 = typeManager.createFieldType("STRING", new QName("ReturnFieldsScan", "f2"), Scope.NON_VERSIONED);
FieldType f3 = typeManager.createFieldType("STRING", new QName("ReturnFieldsScan", "f3"), Scope.NON_VERSIONED);
FieldType f4 = typeManager.createFieldType("STRING", new QName("ReturnFieldsScan", "f4"), Scope.NON_VERSIONED);
RecordType rt = typeManager.recordTypeBuilder().defaultNamespace("ReturnFieldsScan").name("rt")
.fieldEntry().use(f1).add()
.fieldEntry().use(f2).add()
.fieldEntry().use(f3).add()
.fieldEntry().use(f4).add()
.create();
repository.recordBuilder()
.recordType(rt.getName())
.field(f1.getName(), "A")
.field(f2.getName(), "B")
.field(f3.getName(), "C")
.create();
// Test ALL filter
RecordScan scan = new RecordScan();
scan.setRecordFilter(new RecordTypeFilter(rt.getName()));
scan.setReturnFields(new ReturnFields(ReturnFields.Type.ALL));
Record record = repository.getScanner(scan).next();
assertEquals(3, record.getFields().size());
// Test NONE filter
scan = new RecordScan();
scan.setRecordFilter(new RecordTypeFilter(rt.getName()));
scan.setReturnFields(new ReturnFields(ReturnFields.Type.NONE));
record = repository.getScanner(scan).next();
assertEquals(0, record.getFields().size());
// Test ENUM filter
scan = new RecordScan();
scan.setRecordFilter(new RecordTypeFilter(rt.getName()));
scan.setReturnFields(new ReturnFields(f1.getName(), f2.getName()));
record = repository.getScanner(scan).next();
assertEquals(2, record.getFields().size());
assertTrue(record.hasField(f1.getName()));
assertTrue(record.hasField(f2.getName()));
assertFalse(record.hasField(f3.getName()));
// Test scanning on filtered field, should not work
scan = new RecordScan();
RecordFilterList filterList = new RecordFilterList();
filterList.addFilter(new RecordTypeFilter(rt.getName()));
filterList.addFilter(new FieldValueFilter(f1.getName(), "A"));
scan.setRecordFilter(filterList);
// without ReturnFields, we get a result
assertNotNull(repository.getScanner(scan).next());
// with ReturnFields that doesn't include f1, we don't get a result