private boolean addLiteral(List<Object> literals, PredicateLeaf leaf) { switch (leaf.getOperator()) { case EQUALS: return literals.add(leaf.getLiteral()); case IN: return literals.addAll(leaf.getLiteralList()); default: return false; } } }
@Test public void testTimestampSerialization() throws Exception { // There is a kryo which after serialize/deserialize, // Timestamp becomes Date. We get around this issue in // SearchArgumentImpl.getLiteral. Once kryo fixed the issue // We can simplify SearchArgumentImpl.getLiteral Timestamp now = new Timestamp(new java.util.Date().getTime()); SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() .lessThan("x", PredicateLeaf.Type.TIMESTAMP, now) .end() .build(); String serializedSarg = TestInputOutputFormat.toKryo(sarg); SearchArgument sarg2 = ConvertAstToSearchArg.create(serializedSarg); Field literalField = PredicateLeafImpl.class.getDeclaredField("literal"); literalField.setAccessible(true); assertTrue(literalField.get(sarg2.getLeaves().get(0)) instanceof java.util.Date); Timestamp ts = (Timestamp)sarg2.getLeaves().get(0).getLiteral(); assertEquals(ts, now); }
private boolean addLiteral(List<Object> literals, PredicateLeaf leaf) { switch (leaf.getOperator()) { case EQUALS: return literals.add( convertLiteral(leaf.getLiteral())); case IN: return literals.addAll( leaf.getLiteralList().stream().map(l -> convertLiteral(l)).collect(Collectors.toList())); default: return false; } }
assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("john", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("greg", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("alan", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(13L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(15L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(16L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.NULL_SAFE_EQUALS, leaf.getOperator());
private static FilterPredicate buildFilterPredicateFromPredicateLeaf (PredicateLeaf leaf, Type parquetType) throws Exception { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory .getLeafFilterBuilderByType(leaf.getType(), parquetType); if (isMultiLiteralsOperator(leaf.getOperator())) { return builder.buildPredicate(leaf.getOperator(), leaf.getLiteralList(), leaf.getColumnName()); } else { return builder .buildPredict(leaf.getOperator(), leaf.getLiteral(), leaf.getColumnName()); } } catch (Exception e) { LOG.error("fail to build predicate filter leaf with errors" + e, e); throw e; } }
assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(18L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(10L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(13L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(16L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(11L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(14L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator());
private static FilterPredicate buildFilterPredicateFromPredicateLeaf (PredicateLeaf leaf, Type parquetType) throws Exception { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory .getLeafFilterBuilderByType(leaf.getType(), parquetType); if (isMultiLiteralsOperator(leaf.getOperator())) { return builder.buildPredicate(leaf.getOperator(), leaf.getLiteralList(), leaf.getColumnName()); } else { return builder .buildPredict(leaf.getOperator(), leaf.getLiteral(), leaf.getColumnName()); } } catch (Exception e) { LOG.error("fail to build predicate filter leaf with errors" + e, e); throw e; } }
leaves.get(0).getOperator()); assertEquals("id", leaves.get(0).getColumnName()); assertEquals(10L, leaves.get(0).getLiteral());
assertEquals(PredicateLeaf.Operator.BETWEEN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(null, leaf.getLiteral()); assertEquals(23L, leaf.getLiteralList().get(0)); assertEquals(45L, leaf.getLiteralList().get(1)); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("alan", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("last_name", leaf.getColumnName()); assertEquals("smith", leaf.getLiteral());
@SuppressWarnings({ "rawtypes", "unchecked" }) private Evaluator<?> equalsEvaluator(PredicateLeaf predicateLeaf, PrimitiveCategory category) { Comparable<?> literal = toComparable(category, predicateLeaf.getLiteral()); return new EqualsEvaluator(predicateLeaf.getColumnName(), literal); }
assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral());
@SuppressWarnings({ "rawtypes", "unchecked" }) private Evaluator<?> lessThanEvaluator(PredicateLeaf predicateLeaf, PrimitiveCategory category) { Comparable<?> literal = toComparable(category, predicateLeaf.getLiteral()); return new LessThanEvaluator(predicateLeaf.getColumnName(), literal, predicateLeaf.getOperator()); }
assertEquals(PredicateLeaf.Operator.IS_NULL, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals(null, leaf.getLiteral()); assertEquals(null, leaf.getLiteralList()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("first_name", leaf.getColumnName()); assertEquals("sue", leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(12L, leaf.getLiteral()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(4L, leaf.getLiteral());
Object baseObj = predicate.getLiteral(); try {
private FilterPredicate buildFilterPredicateFromPredicateLeaf(PredicateLeaf leaf) { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory .getLeafFilterBuilderByType(leaf.getType()); if (builder == null) { return null; } if (isMultiLiteralsOperator(leaf.getOperator())) { return builder.buildPredicate(leaf.getOperator(), leaf.getLiteralList(), leaf.getColumnName()); } else { return builder .buildPredict(leaf.getOperator(), leaf.getLiteral(), leaf.getColumnName()); } } catch (Exception e) { LOG.error("fail to build predicate filter leaf with errors" + e, e); return null; } }
static TruthValue evaluatePredicateRange(PredicateLeaf predicate, Object min, Object max, boolean hasNull, BloomFilter bloomFilter, boolean useUTCTimestamp) { // if we didn't have any values, everything must have been null if (min == null) { if (predicate.getOperator() == PredicateLeaf.Operator.IS_NULL) { return TruthValue.YES; } else { return TruthValue.NULL; } } else if (min == UNKNOWN_VALUE) { return TruthValue.YES_NO_NULL; } TruthValue result; Object baseObj = predicate.getLiteral(); // Predicate object and stats objects are converted to the type of the predicate object. Object minValue = getBaseObjectForComparison(predicate.getType(), min); Object maxValue = getBaseObjectForComparison(predicate.getType(), max); Object predObj = getBaseObjectForComparison(predicate.getType(), baseObj); result = evaluatePredicateMinMax(predicate, predObj, minValue, maxValue, hasNull); if (shouldEvaluateBloomFilter(predicate, result, bloomFilter)) { return evaluatePredicateBloomFilter(predicate, predObj, bloomFilter, hasNull, useUTCTimestamp); } else { return result; } }
try { Object baseObj = predicate.getLiteral(); Object minValue = getBaseObjectForComparison(predicate.getType(), min); Object maxValue = getBaseObjectForComparison(predicate.getType(), max);