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]];
          // if row count is 0 and where there are no nulls it means index is disabled and we don't have stats
          if (stats.getNumberOfValues() == 0 && !stats.hasNull()) {
            truthValues[pred] = TruthValue.YES_NO_NULL;
            continue;
          }
          PredicateLeaf leaf = predLeaves.get(pred);
          try {
            truthValues[pred] = RecordReaderImpl.evaluatePredicate(stats, leaf, null, true);
          } catch (NoDynamicValuesException dve) {
            LOG.debug("Dynamic values are not available here {}", dve.getMessage());
            boolean hasNulls = stats.hasNull() || leaf.getOperator() != Operator.NULL_SAFE_EQUALS;
            truthValues[pred] = hasNulls ? TruthValue.YES_NO_NULL : TruthValue.YES_NO;
          }
        }
      } 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();
  }
Do we have schema on read in the configuration variables?
ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcInputFormat.java