use of org.apache.parquet.filter2.recordlevel.IncrementallyUpdatedFilterPredicate in project parquet-mr by apache.
the class TestIncrementallyUpdatedFilterPredicateEvaluator method testShortCircuit.
@Test
public void testShortCircuit() {
ValueInspector neverCalled = new ValueInspector() {
@Override
public boolean accept(Visitor visitor) {
throw new ShortCircuitException();
}
};
try {
evaluate(neverCalled);
fail("this should throw");
} catch (ShortCircuitException e) {
//
}
// T || X should evaluate to true without inspecting X
ValueInspector v = intIsEven();
v.update(10);
IncrementallyUpdatedFilterPredicate or = new Or(v, neverCalled);
assertTrue(evaluate(or));
v.reset();
// F && X should evaluate to false without inspecting X
v.update(11);
IncrementallyUpdatedFilterPredicate and = new And(v, neverCalled);
assertFalse(evaluate(and));
v.reset();
}
use of org.apache.parquet.filter2.recordlevel.IncrementallyUpdatedFilterPredicate in project parquet-mr by apache.
the class TestIncrementallyUpdatedFilterPredicateResetter method testReset.
@Test
public void testReset() {
ValueInspector intIsNull = intIsNull();
ValueInspector intIsEven = intIsEven();
ValueInspector doubleMoreThan10 = doubleMoreThan10();
IncrementallyUpdatedFilterPredicate pred = new Or(intIsNull, new And(intIsEven, doubleMoreThan10));
intIsNull.updateNull();
intIsEven.update(11);
doubleMoreThan10.update(20.0D);
assertTrue(intIsNull.isKnown());
assertTrue(intIsEven.isKnown());
assertTrue(doubleMoreThan10.isKnown());
IncrementallyUpdatedFilterPredicateResetter.reset(pred);
assertFalse(intIsNull.isKnown());
assertFalse(intIsEven.isKnown());
assertFalse(doubleMoreThan10.isKnown());
intIsNull.updateNull();
assertTrue(intIsNull.isKnown());
assertFalse(intIsEven.isKnown());
assertFalse(doubleMoreThan10.isKnown());
IncrementallyUpdatedFilterPredicateResetter.reset(pred);
assertFalse(intIsNull.isKnown());
assertFalse(intIsEven.isKnown());
assertFalse(doubleMoreThan10.isKnown());
}
use of org.apache.parquet.filter2.recordlevel.IncrementallyUpdatedFilterPredicate in project parquet-mr by apache.
the class MessageColumnIO method getRecordReader.
public <T> RecordReader<T> getRecordReader(final PageReadStore columns, final RecordMaterializer<T> recordMaterializer, final Filter filter) {
checkNotNull(columns, "columns");
checkNotNull(recordMaterializer, "recordMaterializer");
checkNotNull(filter, "filter");
if (leaves.isEmpty()) {
return new EmptyRecordReader<T>(recordMaterializer);
}
return filter.accept(new Visitor<RecordReader<T>>() {
@Override
public RecordReader<T> visit(FilterPredicateCompat filterPredicateCompat) {
FilterPredicate predicate = filterPredicateCompat.getFilterPredicate();
IncrementallyUpdatedFilterPredicateBuilder builder = new IncrementallyUpdatedFilterPredicateBuilder(leaves);
IncrementallyUpdatedFilterPredicate streamingPredicate = builder.build(predicate);
RecordMaterializer<T> filteringRecordMaterializer = new FilteringRecordMaterializer<T>(recordMaterializer, leaves, builder.getValueInspectorsByColumn(), streamingPredicate);
return new RecordReaderImplementation<T>(MessageColumnIO.this, filteringRecordMaterializer, validating, new ColumnReadStoreImpl(columns, filteringRecordMaterializer.getRootConverter(), getType(), createdBy));
}
@Override
public RecordReader<T> visit(UnboundRecordFilterCompat unboundRecordFilterCompat) {
return new FilteredRecordReader<T>(MessageColumnIO.this, recordMaterializer, validating, new ColumnReadStoreImpl(columns, recordMaterializer.getRootConverter(), getType(), createdBy), unboundRecordFilterCompat.getUnboundRecordFilter(), columns.getRowCount());
}
@Override
public RecordReader<T> visit(NoOpFilter noOpFilter) {
return new RecordReaderImplementation<T>(MessageColumnIO.this, recordMaterializer, validating, new ColumnReadStoreImpl(columns, recordMaterializer.getRootConverter(), getType(), createdBy));
}
});
}
Aggregations