return sarg.evaluate(truthValues).isNeeded();
public SearchArgument.TruthValue evaluate(SearchArgument.TruthValue[] leaves ) { SearchArgument.TruthValue result = null; switch (operator) { case OR: for(ExpressionTree child: children) { result = child.evaluate(leaves).or(result); } return result; case AND: for(ExpressionTree child: children) { result = child.evaluate(leaves).and(result); } return result; case NOT: return children.get(0).evaluate(leaves).not(); case LEAF: return leaves[leaf]; case CONSTANT: return constant; default: throw new IllegalStateException("Unknown operator: " + operator); } }
result[rowGroup] = sarg.evaluate(leafValues).isNeeded(); hasSelected = hasSelected || result[rowGroup]; hasSkipped = hasSkipped || (!result[rowGroup]);
result[rowGroup] = sarg.evaluate(leafValues).isNeeded(); hasSelected = hasSelected || result[rowGroup]; hasSkipped = hasSkipped || (!result[rowGroup]);
result[rowGroup] = sarg.evaluate(leafValues).isNeeded(); if (LOG.isDebugEnabled()) { LOG.debug("Row group " + (rowIndexStride * rowGroup) + " to " +
LOG.debug("Bloom filter evaluation: " + result.toString());
return pushDownNot(child.getChildren().get(0)); case CONSTANT: return new ExpressionTree(child.getConstant().not()); case AND: root = new ExpressionTree(ExpressionTree.Operator.OR);
LOG.debug("Bloom filter evaluation: " + result.toString());
LOG.debug("Bloom filter evaluation: " + result.toString());
return pushDownNot(child.children.get(0)); case CONSTANT: return new ExpressionTree(child.constant.not()); case AND: root = new ExpressionTree(ExpressionTree.Operator.OR);
public SearchArgument.TruthValue evaluate(SearchArgument.TruthValue[] leaves ) { SearchArgument.TruthValue result = null; switch (operator) { case OR: for(ExpressionTree child: children) { result = child.evaluate(leaves).or(result); } return result; case AND: for(ExpressionTree child: children) { result = child.evaluate(leaves).and(result); } return result; case NOT: return children.get(0).evaluate(leaves).not(); case LEAF: return leaves[leaf]; case CONSTANT: return constant; default: throw new IllegalStateException("Unknown operator: " + operator); } }
private boolean isStripeSatisfyPredicate(StripeStatistics stripeStatistics, SearchArgument sarg, int[] filterColumns) { List<PredicateLeaf> predLeaves = sarg.getLeaves(); TruthValue[] truthValues = new TruthValue[predLeaves.size()]; for (int pred = 0; pred < truthValues.length; pred++) { if (filterColumns[pred] != -1) { // column statistics at index 0 contains only the number of rows ColumnStatistics stats = stripeStatistics.getColumnStatistics()[filterColumns[pred]]; truthValues[pred] = RecordReaderImpl.evaluatePredicate(stats, predLeaves.get(pred), null); } else { // parition column case. // partition filter will be evaluated by partition pruner so // we will not evaluate partition filter here. truthValues[pred] = TruthValue.YES_NO_NULL; } } return sarg.evaluate(truthValues).isNeeded(); } }
TruthValue evaluate(TruthValue[] leaves) { TruthValue result = null; switch (operator) { case OR: for(ExpressionTree child: children) { result = child.evaluate(leaves).or(result); } return result; case AND: for(ExpressionTree child: children) { result = child.evaluate(leaves).and(result); } return result; case NOT: return children.get(0).evaluate(leaves).not(); case LEAF: return leaves[leaf]; case CONSTANT: return constant; default: throw new IllegalStateException("Unknown operator: " + operator); } }
return pushDownNot(child.getChildren().get(0)); case CONSTANT: return new ExpressionTree(child.getConstant().not()); case AND: root = new ExpressionTree(ExpressionTree.Operator.OR);
private static boolean isStripeSatisfyPredicate( StripeStatistics stripeStatistics, SearchArgument sarg, int[] filterColumns, final SchemaEvolution evolution) { List<PredicateLeaf> predLeaves = sarg.getLeaves(); TruthValue[] truthValues = new TruthValue[predLeaves.size()]; for (int pred = 0; pred < truthValues.length; pred++) { if (filterColumns[pred] != -1) { if (evolution != null && !evolution.isPPDSafeConversion(filterColumns[pred])) { truthValues[pred] = TruthValue.YES_NO_NULL; } else { // column statistics at index 0 contains only the number of rows ColumnStatistics stats = stripeStatistics.getColumnStatistics()[filterColumns[pred]]; truthValues[pred] = RecordReaderImpl.evaluatePredicate(stats, predLeaves.get(pred), null); } } else { // parition column case. // partition filter will be evaluated by partition pruner so // we will not evaluate partition filter here. truthValues[pred] = TruthValue.YES_NO_NULL; } } return sarg.evaluate(truthValues).isNeeded(); }