diff --git ql/src/java/org/apache/hadoop/hive/ql/io/orc/ColumnStatisticsImpl.java ql/src/java/org/apache/hadoop/hive/ql/io/orc/ColumnStatisticsImpl.java index 409de7c..ab5cf1e 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/orc/ColumnStatisticsImpl.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/orc/ColumnStatisticsImpl.java @@ -617,8 +617,8 @@ public String toString() { private static final class DateStatisticsImpl extends ColumnStatisticsImpl implements DateColumnStatistics { - private DateWritable minimum = null; - private DateWritable maximum = null; + private Integer minimum = null; + private Integer maximum = null; DateStatisticsImpl() { } @@ -628,10 +628,10 @@ public String toString() { OrcProto.DateStatistics dateStats = stats.getDateStatistics(); // min,max values serialized/deserialized as int (days since epoch) if (dateStats.hasMaximum()) { - maximum = new DateWritable(dateStats.getMaximum()); + maximum = dateStats.getMaximum(); } if (dateStats.hasMinimum()) { - minimum = new DateWritable(dateStats.getMinimum()); + minimum = dateStats.getMinimum(); } } @@ -645,12 +645,12 @@ void reset() { @Override void updateDate(DateWritable value) { if (minimum == null) { - minimum = value; - maximum = value; - } else if (minimum.compareTo(value) > 0) { - minimum = value; - } else if (maximum.compareTo(value) < 0) { - maximum = value; + minimum = value.getDays(); + maximum = value.getDays(); + } else if (minimum > value.getDays()) { + minimum = value.getDays(); + } else if (maximum < value.getDays()) { + maximum = value.getDays(); } } @@ -662,9 +662,9 @@ void merge(ColumnStatisticsImpl other) { minimum = dateStats.minimum; maximum = dateStats.maximum; } else if (dateStats.minimum != null) { - if (minimum.compareTo(dateStats.minimum) > 0) { + if (minimum > dateStats.minimum) { minimum = dateStats.minimum; - } else if (maximum.compareTo(dateStats.maximum) < 0) { + } else if (maximum < dateStats.maximum) { maximum = dateStats.maximum; } } @@ -676,21 +676,26 @@ void merge(ColumnStatisticsImpl other) { OrcProto.DateStatistics.Builder dateStats = OrcProto.DateStatistics.newBuilder(); if (getNumberOfValues() != 0) { - dateStats.setMinimum(minimum.getDays()); - dateStats.setMaximum(maximum.getDays()); + dateStats.setMinimum(minimum); + dateStats.setMaximum(maximum); } result.setDateStatistics(dateStats); return result; } + private transient final DateWritable minDate = new DateWritable(); + private transient final DateWritable maxDate = new DateWritable(); + @Override public DateWritable getMinimum() { - return minimum; + minDate.set(minimum); + return minDate; } @Override public DateWritable getMaximum() { - return maximum; + maxDate.set(maximum); + return maxDate; } @Override