private Evaluator evaluator() { if (lazyEvaluator == null) { this.lazyEvaluator = new Evaluator(reader.spec().partitionType(), partFilter); } return lazyEvaluator; }
@Override public boolean hasNext() { while (true) { if (currentIterator.hasNext()) { return true; } else if (tasks.hasNext()) { if (currentCloseable != null) { try { currentCloseable.close(); } catch (IOException e) { throw new RuntimeIOException(e, "Failed to close task"); } } FileScanTask task = tasks.next(); CloseableIterable<Record> reader = open(task); this.currentCloseable = reader; if (task.residual() != null && task.residual() != Expressions.alwaysTrue()) { Evaluator filter = new Evaluator(projection.asStruct(), task.residual()); this.currentIterator = filter(reader, filter::eval).iterator(); } else { this.currentIterator = reader.iterator(); } } else { return false; } } }
Evaluator evaluator = new Evaluator(DataFile.getType(EMPTY_STRUCT), fileFilter); List<Closeable> toClose = Lists.newArrayList();
@Test public void testAlwaysTrue() { Evaluator evaluator = new Evaluator(STRUCT, alwaysTrue()); Assert.assertTrue("always true", evaluator.eval(TestHelpers.Row.of())); }
@Test public void testAlwaysFalse() { Evaluator evaluator = new Evaluator(STRUCT, alwaysFalse()); Assert.assertFalse("always false", evaluator.eval(TestHelpers.Row.of())); }
@Override public List<ManifestFile> apply(TableMetadata base) { if (validateAddedFiles) { PartitionSpec spec = writeSpec(); Expression rowFilter = rowFilter(); Expression inclusiveExpr = Projections.inclusive(spec).project(rowFilter); Evaluator inclusive = new Evaluator(spec.partitionType(), inclusiveExpr); Expression strictExpr = Projections.strict(spec).project(rowFilter); Evaluator strict = new Evaluator(spec.partitionType(), strictExpr); StrictMetricsEvaluator metrics = new StrictMetricsEvaluator( base.schema(), rowFilter); for (DataFile file : addedFiles()) { // the real test is that the strict or metrics test matches the file, indicating that all // records in the file match the filter. inclusive is used to avoid testing the metrics, // which is more complicated ValidationException.check( inclusive.eval(file.partition()) && (strict.eval(file.partition()) || metrics.eval(file)), "Cannot append file with rows that do not match filter: %s: %s", rowFilter, file.path()); } } return super.apply(base); } }
@Test public void testLessThan() { Evaluator evaluator = new Evaluator(STRUCT, lessThan("x", 7)); Assert.assertFalse("7 < 7 => false", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertTrue("6 < 7 => true", evaluator.eval(TestHelpers.Row.of(6, 8, null))); }
@Test public void testNotEqual() { Evaluator evaluator = new Evaluator(STRUCT, notEqual("x", 7)); Assert.assertFalse("7 != 7 => false", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertTrue("6 != 7 => true", evaluator.eval(TestHelpers.Row.of(6, 8, null))); }
@Test public void testNotNull() { Evaluator evaluator = new Evaluator(STRUCT, notNull("z")); Assert.assertFalse("null is null", evaluator.eval(TestHelpers.Row.of(1, 2, null))); Assert.assertTrue("3 is not null", evaluator.eval(TestHelpers.Row.of(1, 2, 3))); }
@Test public void testEqual() { Evaluator evaluator = new Evaluator(STRUCT, equal("x", 7)); Assert.assertTrue("7 == 7 => true", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertFalse("6 == 7 => false", evaluator.eval(TestHelpers.Row.of(6, 8, null))); }
@Test public void testIsNull() { Evaluator evaluator = new Evaluator(STRUCT, isNull("z")); Assert.assertTrue("null is null", evaluator.eval(TestHelpers.Row.of(1, 2, null))); Assert.assertFalse("3 is not null", evaluator.eval(TestHelpers.Row.of(1, 2, 3))); }
@Test public void testNot() { Evaluator evaluator = new Evaluator(STRUCT, not(equal("x", 7))); Assert.assertFalse("not(7 == 7) => false", evaluator.eval(TestHelpers.Row.of(7))); Assert.assertTrue("not(8 == 7) => false", evaluator.eval(TestHelpers.Row.of(8))); }
@Test public void testLessThanOrEqual() { Evaluator evaluator = new Evaluator(STRUCT, lessThanOrEqual("x", 7)); Assert.assertTrue("7 <= 7 => true", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertTrue("6 <= 7 => true", evaluator.eval(TestHelpers.Row.of(6, 8, null))); Assert.assertFalse("8 <= 7 => false", evaluator.eval(TestHelpers.Row.of(8, 8, null))); }
@Test public void testGreaterThan() { Evaluator evaluator = new Evaluator(STRUCT, greaterThan("x", 7)); Assert.assertFalse("7 > 7 => false", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertFalse("6 > 7 => false", evaluator.eval(TestHelpers.Row.of(6, 8, null))); Assert.assertTrue("8 > 7 => true", evaluator.eval(TestHelpers.Row.of(8, 8, null))); }
@Test public void testGreaterThanOrEqual() { Evaluator evaluator = new Evaluator(STRUCT, greaterThanOrEqual("x", 7)); Assert.assertTrue("7 >= 7 => true", evaluator.eval(TestHelpers.Row.of(7, 8, null))); Assert.assertFalse("6 >= 7 => false", evaluator.eval(TestHelpers.Row.of(6, 8, null))); Assert.assertTrue("8 >= 7 => true", evaluator.eval(TestHelpers.Row.of(8, 8, null))); }
@Test public void testCharSeqValue() { StructType struct = StructType.of(required(34, "s", Types.StringType.get())); Evaluator evaluator = new Evaluator(struct, equal("s", "abc")); Assert.assertTrue("string(abc) == utf8(abc) => true", evaluator.eval(TestHelpers.Row.of(new Utf8("abc")))); Assert.assertFalse("string(abc) == utf8(abcd) => false", evaluator.eval(TestHelpers.Row.of(new Utf8("abcd")))); } }
@Test public void testAnd() { Evaluator evaluator = new Evaluator(STRUCT, and(equal("x", 7), notNull("z"))); Assert.assertTrue("7, 3 => true", evaluator.eval(TestHelpers.Row.of(7, 0, 3))); Assert.assertFalse("8, 3 => false", evaluator.eval(TestHelpers.Row.of(8, 0, 3))); Assert.assertFalse("7, null => false", evaluator.eval(TestHelpers.Row.of(7, 0, null))); Assert.assertFalse("8, null => false", evaluator.eval(TestHelpers.Row.of(8, 0, null))); }
@Test public void testOr() { Evaluator evaluator = new Evaluator(STRUCT, or(equal("x", 7), notNull("z"))); Assert.assertTrue("7, 3 => true", evaluator.eval(TestHelpers.Row.of(7, 0, 3))); Assert.assertTrue("8, 3 => true", evaluator.eval(TestHelpers.Row.of(8, 0, 3))); Assert.assertTrue("7, null => true", evaluator.eval(TestHelpers.Row.of(7, 0, null))); Assert.assertFalse("8, null => false", evaluator.eval(TestHelpers.Row.of(8, 0, null))); }