ORC-578: Addendum fixing up the stripe statistics
Signed-off-by: Owen O'Malley <omalley@apache.org>
diff --git a/java/core/src/java/org/apache/orc/Reader.java b/java/core/src/java/org/apache/orc/Reader.java
index 9be6f90..9838d89 100644
--- a/java/core/src/java/org/apache/orc/Reader.java
+++ b/java/core/src/java/org/apache/orc/Reader.java
@@ -500,4 +500,9 @@
* Was the file written using the proleptic Gregorian calendar.
*/
boolean writerUsedProlepticGregorian();
+
+ /**
+ * Should the returned values use the proleptic Gregorian calendar?
+ */
+ boolean getConvertToProlepticGregorian();
}
diff --git a/java/core/src/java/org/apache/orc/StripeStatistics.java b/java/core/src/java/org/apache/orc/StripeStatistics.java
index d02bc33..142b8cb 100644
--- a/java/core/src/java/org/apache/orc/StripeStatistics.java
+++ b/java/core/src/java/org/apache/orc/StripeStatistics.java
@@ -19,7 +19,6 @@
package org.apache.orc;
import org.apache.orc.impl.ColumnStatisticsImpl;
-import org.apache.orc.impl.ReaderImpl;
import java.util.List;
@@ -29,19 +28,21 @@
public class StripeStatistics {
protected final List<OrcProto.ColumnStatistics> cs;
protected final TypeDescription schema;
- private final ReaderImpl reader;
+ private final boolean writerUsedProlepticGregorian;
+ private final boolean convertToProlepticGregorian;
- public StripeStatistics(List<OrcProto.ColumnStatistics> list,
- ReaderImpl reader) {
- this(null, list, reader);
+ public StripeStatistics(List<OrcProto.ColumnStatistics> list) {
+ this(null, list, false, false);
}
public StripeStatistics(TypeDescription schema,
List<OrcProto.ColumnStatistics> list,
- ReaderImpl reader) {
+ boolean writerUsedProlepticGregorian,
+ boolean convertToProlepticGregorian) {
this.schema = schema;
this.cs = list;
- this.reader = reader;
+ this.writerUsedProlepticGregorian = writerUsedProlepticGregorian;
+ this.convertToProlepticGregorian = convertToProlepticGregorian;
}
private int getBase() {
@@ -58,9 +59,8 @@
int base = getBase();
for (int c = 0; c < result.length; ++c) {
TypeDescription column = schema == null ? null : schema.findSubtype(base + c);
- result[c] = reader == null
- ? ColumnStatisticsImpl.deserialize(column, cs.get(c))
- : ColumnStatisticsImpl.deserialize(column, cs.get(c), reader);
+ result[c] = ColumnStatisticsImpl.deserialize(column, cs.get(c),
+ writerUsedProlepticGregorian, convertToProlepticGregorian);
}
return result;
}
diff --git a/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java b/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
index f671b5f..263c3bb 100644
--- a/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
@@ -2027,13 +2027,6 @@
public static ColumnStatisticsImpl deserialize(TypeDescription schema,
OrcProto.ColumnStatistics stats,
- ReaderImpl reader) {
- return deserialize(schema, stats, reader.writerUsedProlepticGregorian(),
- reader.options.getConvertToProlepticGregorian());
- }
-
- public static ColumnStatisticsImpl deserialize(TypeDescription schema,
- OrcProto.ColumnStatistics stats,
boolean writerUsedProlepticGregorian,
boolean convertToProlepticGregorian) {
if (stats.hasBucketStatistics()) {
diff --git a/java/core/src/java/org/apache/orc/impl/ReaderImpl.java b/java/core/src/java/org/apache/orc/impl/ReaderImpl.java
index 3017a33..fff09db 100644
--- a/java/core/src/java/org/apache/orc/impl/ReaderImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/ReaderImpl.java
@@ -375,7 +375,8 @@
TypeDescription root = encryption.getRoot();
for(int i= 0; i < result.length; ++i){
result[i] = ColumnStatisticsImpl.deserialize(root.findSubtype(root.getId() + i),
- decrypted.getColumn(i), this);
+ decrypted.getColumn(i), writerUsedProlepticGregorian(),
+ getConvertToProlepticGregorian());
}
return result;
}
@@ -388,7 +389,8 @@
for(int i=0; i < result.length; ++i) {
TypeDescription subschema = schema == null ? null : schema.findSubtype(i);
result[i] = ColumnStatisticsImpl.deserialize(subschema, fileStats.get(i),
- this);
+ writerUsedProlepticGregorian(),
+ getConvertToProlepticGregorian());
}
return result;
}
@@ -558,14 +560,6 @@
return OrcFile.WriterVersion.FUTURE;
}
- private static OrcProto.Footer extractFooter(ByteBuffer bb, int footerAbsPos,
- int footerSize, InStream.StreamOptions options) throws IOException {
- bb.position(footerAbsPos);
- bb.limit(footerAbsPos + footerSize);
- return OrcProto.Footer.parseFrom(InStream.createCodedInputStream(
- InStream.create("footer", new BufferChunk(bb, 0), 0, footerSize, options)));
- }
-
public static OrcProto.Metadata extractMetadata(ByteBuffer bb, int metadataAbsPos,
int metadataSize, InStream.StreamOptions options) throws IOException {
bb.position(metadataAbsPos);
@@ -724,8 +718,8 @@
} catch (Throwable thr) {
try {
close();
- } catch (IOException ignore) {
- LOG.info("Ignoring secondary exception in close of " + path, ignore);
+ } catch (IOException except) {
+ LOG.info("Ignoring secondary exception in close of " + path, except);
}
throw thr instanceof IOException ? (IOException) thr :
new IOException("Problem reading file footer " + path, thr);
@@ -748,6 +742,11 @@
}
@Override
+ public boolean getConvertToProlepticGregorian() {
+ return options.getConvertToProlepticGregorian();
+ }
+
+ @Override
public Options options() {
return new Options(conf);
}
@@ -905,7 +904,8 @@
List<StripeStatistics> result = new ArrayList<>(list.size());
for (OrcProto.StripeStatistics ss : stripeStatistics) {
result.add(new StripeStatisticsImpl(schema,
- new ArrayList<>(ss.getColStatsList()), this));
+ new ArrayList<>(ss.getColStatsList()), writerUsedProlepticGregorian(),
+ getConvertToProlepticGregorian()));
}
return result;
}
diff --git a/java/core/src/java/org/apache/orc/impl/StripeStatisticsImpl.java b/java/core/src/java/org/apache/orc/impl/StripeStatisticsImpl.java
index 50557fb..c9f6ee4 100644
--- a/java/core/src/java/org/apache/orc/impl/StripeStatisticsImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/StripeStatisticsImpl.java
@@ -28,12 +28,16 @@
public class StripeStatisticsImpl extends StripeStatistics {
public StripeStatisticsImpl(TypeDescription schema,
List<OrcProto.ColumnStatistics> list,
- ReaderImpl reader) {
- super(schema, list, reader);
+ boolean writerUsedProlepticGregorian,
+ boolean convertToProlepticGregorian) {
+ super(schema, list, writerUsedProlepticGregorian, convertToProlepticGregorian);
}
- public StripeStatisticsImpl(TypeDescription schema, ReaderImpl reader) {
- super(schema, createList(schema), reader);
+ public StripeStatisticsImpl(TypeDescription schema,
+ boolean writerUsedProlepticGregorian,
+ boolean convertToProlepticGregorian) {
+ super(schema, createList(schema), writerUsedProlepticGregorian,
+ convertToProlepticGregorian);
}
/**
diff --git a/java/core/src/java/org/apache/orc/impl/WriterImpl.java b/java/core/src/java/org/apache/orc/impl/WriterImpl.java
index c03e1b4..819e43b 100644
--- a/java/core/src/java/org/apache/orc/impl/WriterImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/WriterImpl.java
@@ -777,7 +777,7 @@
appendStripe(stripe, offset, length, stripeInfo,
new StripeStatistics[]{
new StripeStatisticsImpl(schema, stripeStatistics.getColStatsList(),
- null)});
+ false, false)});
}
@Override
diff --git a/java/core/src/java/org/apache/orc/impl/reader/ReaderEncryptionVariant.java b/java/core/src/java/org/apache/orc/impl/reader/ReaderEncryptionVariant.java
index 97fbd04..c9a687f 100644
--- a/java/core/src/java/org/apache/orc/impl/reader/ReaderEncryptionVariant.java
+++ b/java/core/src/java/org/apache/orc/impl/reader/ReaderEncryptionVariant.java
@@ -236,7 +236,8 @@
) throws IOException {
StripeStatisticsImpl[] result = new StripeStatisticsImpl[stripeCount];
for(int s=0; s < result.length; ++s) {
- result[s] = new StripeStatisticsImpl(column, reader);
+ result[s] = new StripeStatisticsImpl(column, reader.writerUsedProlepticGregorian(),
+ reader.getConvertToProlepticGregorian());
}
// create the objects
long offset = stripeStatsOffset;
diff --git a/java/tools/src/java/org/apache/orc/tools/FileDump.java b/java/tools/src/java/org/apache/orc/tools/FileDump.java
index 92711eb..3a06e5b 100644
--- a/java/tools/src/java/org/apache/orc/tools/FileDump.java
+++ b/java/tools/src/java/org/apache/orc/tools/FileDump.java
@@ -724,7 +724,9 @@
buf.append("no stats at ");
} else {
ColumnStatistics cs =
- ColumnStatisticsImpl.deserialize(colSchema, colStats, reader);
+ ColumnStatisticsImpl.deserialize(colSchema, colStats,
+ reader.writerUsedProlepticGregorian(),
+ reader.getConvertToProlepticGregorian());
buf.append(cs.toString());
}
buf.append(" positions: ");
diff --git a/java/tools/src/java/org/apache/orc/tools/JsonFileDump.java b/java/tools/src/java/org/apache/orc/tools/JsonFileDump.java
index 61849f9..a2664f8 100644
--- a/java/tools/src/java/org/apache/orc/tools/JsonFileDump.java
+++ b/java/tools/src/java/org/apache/orc/tools/JsonFileDump.java
@@ -460,7 +460,8 @@
}
OrcProto.ColumnStatistics colStats = entry.getStatistics();
writeColumnStatistics(writer, ColumnStatisticsImpl.deserialize(
- schema.findSubtype(col), colStats, reader));
+ schema.findSubtype(col), colStats, reader.writerUsedProlepticGregorian(),
+ reader.getConvertToProlepticGregorian()));
writer.key("positions").array();
for (int posIx = 0; posIx < entry.getPositionsCount(); ++posIx) {
writer.value(entry.getPositions(posIx));