diff --git a/Util/src/main/java/io/deephaven/util/codec/ObjectDecoder.java b/Util/src/main/java/io/deephaven/util/codec/ObjectDecoder.java
index 6e52078c0d4..82ffb379af2 100644
--- a/Util/src/main/java/io/deephaven/util/codec/ObjectDecoder.java
+++ b/Util/src/main/java/io/deephaven/util/codec/ObjectDecoder.java
@@ -7,6 +7,8 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.nio.ByteBuffer;
+
/**
*
* Codec superinterface for Object translation from byte arrays for serialization and deserialization.
@@ -30,12 +32,30 @@ public interface ObjectDecoder {
*
* @param input The input byte array containing bytes to decode
* @param offset The offset into the byte array to start decoding from
- * @param length The length of the byte array to decode from, starting at the offset
+ * @param length The number of bytes to decode, starting at the offset
* @return The output object, possibly null
*/
@Nullable
TYPE decode(@NotNull byte[] input, int offset, int length);
+ /**
+ * Decode an object from a ByteBuffer.
+ *
+ * @param buffer The input ByteBuffer containing bytes to decode
+ * @return The output object, possibly null
+ */
+ @Nullable
+ default TYPE decode(@NotNull final ByteBuffer buffer) {
+ if (buffer.hasArray()) {
+ return decode(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining());
+ } else {
+ // Make a copy of the buffer's contents
+ final byte[] bytes = new byte[buffer.remaining()];
+ buffer.get(bytes);
+ return decode(bytes, 0, bytes.length);
+ }
+ }
+
/**
* What width byte array does this ObjectCodec expect to encode and decode?
*
diff --git a/Util/src/main/java/io/deephaven/util/codec/SimpleByteArrayCodec.java b/Util/src/main/java/io/deephaven/util/codec/SimpleByteArrayCodec.java
index e315e851b37..8bf70622a03 100644
--- a/Util/src/main/java/io/deephaven/util/codec/SimpleByteArrayCodec.java
+++ b/Util/src/main/java/io/deephaven/util/codec/SimpleByteArrayCodec.java
@@ -49,7 +49,9 @@ public byte[] encode(@Nullable final byte[] input) {
if (input == null) {
throw new IllegalArgumentException(SimpleByteArrayCodec.class.getSimpleName() + " cannot encode nulls");
}
- return input;
+ final byte[] output = new byte[input.length];
+ System.arraycopy(input, 0, output, 0, input.length);
+ return output;
}
@Override
@@ -73,9 +75,6 @@ public byte[] decode(@NotNull final byte[] input, final int offset, final int le
if (input.length == 0) {
return CollectionUtil.ZERO_LENGTH_BYTE_ARRAY;
}
- if (offset == 0 && length == input.length) {
- return input;
- }
final byte[] output = new byte[length];
System.arraycopy(input, offset, output, 0, length);
return output;
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ColumnPageReaderImpl.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ColumnPageReaderImpl.java
index 14c60369f01..21ecc5cef7e 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ColumnPageReaderImpl.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/ColumnPageReaderImpl.java
@@ -345,7 +345,7 @@ private IntBuffer readKeysFromPageCommon(
final RunLengthBitPackingHybridBufferDecoder rlDecoder,
final RunLengthBitPackingHybridBufferDecoder dlDecoder,
final ValuesReader dataReader) throws IOException {
- final Object result = materialize(IntMaterializer.Factory, dlDecoder, rlDecoder, dataReader, nullPlaceholder);
+ final Object result = materialize(IntMaterializer.FACTORY, dlDecoder, rlDecoder, dataReader, nullPlaceholder);
if (result instanceof DataWithOffsets) {
keyDest.put((int[]) ((DataWithOffsets) result).materializeResult);
return ((DataWithOffsets) result).offsets;
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/PageMaterializerFactory.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/PageMaterializerFactory.java
index a276ca24ff0..1db402b14d4 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/PageMaterializerFactory.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/PageMaterializerFactory.java
@@ -9,4 +9,16 @@ public interface PageMaterializerFactory {
PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues);
PageMaterializer makeMaterializerNonNull(ValuesReader dataReader, int numValues);
+
+ PageMaterializerFactory NULL_FACTORY = new PageMaterializerFactory() {
+ @Override
+ public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
+ throw new UnsupportedOperationException("Does not support materializing pages");
+ }
+
+ @Override
+ public PageMaterializer makeMaterializerNonNull(ValuesReader dataReader, int numValues) {
+ throw new UnsupportedOperationException("Does not support materializing pages");
+ }
+ };
}
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigDecimalFromBytesMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigDecimalFromBytesMaterializer.java
index 5080ea35dd8..754e4b156f8 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigDecimalFromBytesMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigDecimalFromBytesMaterializer.java
@@ -49,8 +49,7 @@ private BigDecimalFromBytesMaterializer(ValuesReader dataReader, BigDecimal null
@Override
public void fillValues(int startIndex, int endIndex) {
for (int ii = startIndex; ii < endIndex; ii++) {
- final byte[] bytes = dataReader.readBytes().getBytes();
- data[ii] = codec.decode(bytes, 0, bytes.length);
+ data[ii] = codec.decode(dataReader.readBytes().toByteBuffer());
}
}
}
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigIntegerMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigIntegerMaterializer.java
index 36589a48a41..944b9a8f965 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigIntegerMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BigIntegerMaterializer.java
@@ -53,8 +53,7 @@ private BigIntegerMaterializer(ValuesReader dataReader, BigInteger nullValue, in
@Override
public void fillValues(int startIndex, int endIndex) {
for (int ii = startIndex; ii < endIndex; ii++) {
- final byte[] bytes = dataReader.readBytes().getBytes();
- data[ii] = codec.decode(bytes, 0, bytes.length);
+ data[ii] = codec.decode(dataReader.readBytes().toByteBuffer());
}
}
}
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BlobMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BlobMaterializer.java
index bfdaf180281..7e21a194398 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BlobMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BlobMaterializer.java
@@ -13,7 +13,7 @@
*/
public class BlobMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new BlobMaterializer(dataReader, (Binary) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BoolMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BoolMaterializer.java
index 89871fbf277..6e5b7f56994 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BoolMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/BoolMaterializer.java
@@ -11,7 +11,7 @@
public class BoolMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new BoolMaterializer(dataReader, (byte) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ByteMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ByteMaterializer.java
index 66477aed7c5..d110d91e564 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ByteMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ByteMaterializer.java
@@ -15,7 +15,7 @@
public class ByteMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new ByteMaterializer(dataReader, (byte) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/CharMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/CharMaterializer.java
index ee752bdecd8..ea3a28b4586 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/CharMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/CharMaterializer.java
@@ -11,7 +11,7 @@
public class CharMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new CharMaterializer(dataReader, (char) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/DoubleMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/DoubleMaterializer.java
index 2e373e20172..f5143679f1f 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/DoubleMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/DoubleMaterializer.java
@@ -15,7 +15,7 @@
public class DoubleMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new DoubleMaterializer(dataReader, (double) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/FloatMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/FloatMaterializer.java
index fff9142984a..4e802b0b73b 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/FloatMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/FloatMaterializer.java
@@ -11,7 +11,7 @@
public class FloatMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new FloatMaterializer(dataReader, (float) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantFromInt96Materializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromInt96Materializer.java
similarity index 85%
rename from extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantFromInt96Materializer.java
rename to extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromInt96Materializer.java
index 4782303467d..eb5f731cc6e 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantFromInt96Materializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromInt96Materializer.java
@@ -18,17 +18,17 @@
* {@link PageMaterializer} implementation for {@link Instant Instants} stored as Int96s representing an Impala format
* Timestamp (nanoseconds of day and Julian date encoded as 8 bytes and 4 bytes, respectively)
*/
-public class InstantFromInt96Materializer extends LongMaterializerBase implements PageMaterializer {
+public class InstantNanosFromInt96Materializer extends LongMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
- return new InstantFromInt96Materializer(dataReader, (long) nullValue, numValues);
+ return new InstantNanosFromInt96Materializer(dataReader, (long) nullValue, numValues);
}
@Override
public PageMaterializer makeMaterializerNonNull(ValuesReader dataReader, int numValues) {
- return new InstantFromInt96Materializer(dataReader, numValues);
+ return new InstantNanosFromInt96Materializer(dataReader, numValues);
}
};
@@ -48,11 +48,11 @@ public PageMaterializer makeMaterializerNonNull(ValuesReader dataReader, int num
private final ValuesReader dataReader;
- private InstantFromInt96Materializer(ValuesReader dataReader, int numValues) {
+ private InstantNanosFromInt96Materializer(ValuesReader dataReader, int numValues) {
this(dataReader, 0, numValues);
}
- private InstantFromInt96Materializer(ValuesReader dataReader, long nullValue, int numValues) {
+ private InstantNanosFromInt96Materializer(ValuesReader dataReader, long nullValue, int numValues) {
super(nullValue, numValues);
this.dataReader = dataReader;
}
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMicrosMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMicrosMaterializer.java
index 751bf7ab1b0..97a25b6d6e0 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMicrosMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMicrosMaterializer.java
@@ -10,7 +10,7 @@
public class InstantNanosFromMicrosMaterializer extends LongMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new InstantNanosFromMicrosMaterializer(dataReader, (long) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMillisMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMillisMaterializer.java
index 9e7907a0f82..ee08531571c 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMillisMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/InstantNanosFromMillisMaterializer.java
@@ -14,7 +14,7 @@
public class InstantNanosFromMillisMaterializer extends LongMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new InstantNanosFromMillisMaterializer(dataReader, (long) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/IntMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/IntMaterializer.java
index 847ea3a3e18..97f47e23ebe 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/IntMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/IntMaterializer.java
@@ -15,7 +15,7 @@
public class IntMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new IntMaterializer(dataReader, (int) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateMaterializer.java
index 202e54d83cb..5cd7a76c298 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateMaterializer.java
@@ -12,7 +12,7 @@
public class LocalDateMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalDateMaterializer(dataReader, (LocalDate) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMicrosMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMicrosMaterializer.java
index 022586e6a73..e8b37cc889b 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMicrosMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMicrosMaterializer.java
@@ -17,7 +17,7 @@
public class LocalDateTimeFromMicrosMaterializer extends ObjectMaterializerBase
implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalDateTimeFromMicrosMaterializer(dataReader, (LocalDateTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMillisMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMillisMaterializer.java
index 7f2f5ec1f92..023be3cdd97 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMillisMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromMillisMaterializer.java
@@ -13,7 +13,7 @@
public class LocalDateTimeFromMillisMaterializer extends ObjectMaterializerBase
implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalDateTimeFromMillisMaterializer(dataReader, (LocalDateTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromNanosMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromNanosMaterializer.java
index ae3f66bd813..9fd20c3b6ec 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromNanosMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalDateTimeFromNanosMaterializer.java
@@ -17,7 +17,7 @@
public class LocalDateTimeFromNanosMaterializer extends ObjectMaterializerBase
implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalDateTimeFromNanosMaterializer(dataReader, (LocalDateTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMicrosMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMicrosMaterializer.java
index b276c808e4c..9067936bf5b 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMicrosMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMicrosMaterializer.java
@@ -12,7 +12,7 @@
public class LocalTimeFromMicrosMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalTimeFromMicrosMaterializer(dataReader, (LocalTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMillisMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMillisMaterializer.java
index aed1d7e6308..aaf3aeaed4e 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMillisMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromMillisMaterializer.java
@@ -16,7 +16,7 @@
public class LocalTimeFromMillisMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalTimeFromMillisMaterializer(dataReader, (LocalTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromNanosMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromNanosMaterializer.java
index 75e707442c9..28f34528344 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromNanosMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LocalTimeFromNanosMaterializer.java
@@ -16,7 +16,7 @@
public class LocalTimeFromNanosMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LocalTimeFromNanosMaterializer(dataReader, (LocalTime) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongFromUnsignedIntMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongFromUnsignedIntMaterializer.java
index add4270f164..297d7ae6cbb 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongFromUnsignedIntMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongFromUnsignedIntMaterializer.java
@@ -9,7 +9,7 @@
public class LongFromUnsignedIntMaterializer extends LongMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LongFromUnsignedIntMaterializer(dataReader, (long) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongMaterializer.java
index 9f57f184ddb..f28bc8cdcc7 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/LongMaterializer.java
@@ -9,7 +9,7 @@
public class LongMaterializer extends LongMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new LongMaterializer(dataReader, (long) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ObjectMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ObjectMaterializer.java
index fa1ef5efdd1..fe542b83c1b 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ObjectMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ObjectMaterializer.java
@@ -53,8 +53,7 @@ private ObjectMaterializer(ValuesReader dataReader, TYPE nullValue, int numValue
@Override
public void fillValues(int startIndex, int endIndex) {
for (int ii = startIndex; ii < endIndex; ii++) {
- final byte[] bytes = dataReader.readBytes().getBytes();
- data[ii] = codec.decode(bytes, 0, bytes.length);
+ data[ii] = codec.decode(dataReader.readBytes().toByteBuffer());
}
}
}
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ShortMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ShortMaterializer.java
index cff03881692..b3c5eae6d9a 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ShortMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/ShortMaterializer.java
@@ -15,7 +15,7 @@
public class ShortMaterializer implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new ShortMaterializer(dataReader, (short) nullValue, numValues);
diff --git a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/StringMaterializer.java b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/StringMaterializer.java
index b594aeb351e..b179c5fb5e9 100644
--- a/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/StringMaterializer.java
+++ b/extensions/parquet/base/src/main/java/io/deephaven/parquet/base/materializers/StringMaterializer.java
@@ -9,7 +9,7 @@
public class StringMaterializer extends ObjectMaterializerBase implements PageMaterializer {
- public static final PageMaterializerFactory Factory = new PageMaterializerFactory() {
+ public static final PageMaterializerFactory FACTORY = new PageMaterializerFactory() {
@Override
public PageMaterializer makeMaterializerWithNulls(ValuesReader dataReader, Object nullValue, int numValues) {
return new StringMaterializer(dataReader, (String) nullValue, numValues);
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetSchemaReader.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetSchemaReader.java
index 30203881799..dc99271414b 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetSchemaReader.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetSchemaReader.java
@@ -35,6 +35,7 @@
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
+import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.Instant;
import java.time.LocalDate;
@@ -407,7 +408,7 @@ public Optional> visit(
if (decimalLogicalType.getPrecision() == 1 && decimalLogicalType.getScale() == 0) {
return Optional.of(BigInteger.class);
}
- return Optional.of(java.math.BigDecimal.class);
+ return Optional.of(BigDecimal.class);
}
@Override
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java
index a99b28b9a9f..4c6e53c4b7b 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetColumnLocation.java
@@ -379,7 +379,7 @@ private static ToPage makeToPage(
toPage = ToLongPage.create(pageType);
break;
case INT96:
- toPage = ToInstantPage.create(pageType);
+ toPage = ToInstantPage.createFromInt96(pageType);
break;
case DOUBLE:
toPage = ToDoublePage.create(pageType);
@@ -456,8 +456,7 @@ private static class LogicalTypeVisitor
@Override
public Optional> visit(
final LogicalTypeAnnotation.StringLogicalTypeAnnotation stringLogicalType) {
- return Optional
- .of(ToStringPage.create(pageType, columnChunkReader.getDictionarySupplier()));
+ return Optional.of(ToStringPage.create(pageType, columnChunkReader.getDictionarySupplier()));
}
@Override
@@ -465,11 +464,29 @@ private static class LogicalTypeVisitor
final LogicalTypeAnnotation.TimestampLogicalTypeAnnotation timestampLogicalType) {
if (timestampLogicalType.isAdjustedToUTC()) {
// The column will be stored as nanoseconds elapsed since epoch as long values
- return Optional.of(ToInstantPage.create(pageType, timestampLogicalType.getUnit()));
+ switch (timestampLogicalType.getUnit()) {
+ case MILLIS:
+ return Optional.of(ToInstantPage.createFromMillis(pageType));
+ case MICROS:
+ return Optional.of(ToInstantPage.createFromMicros(pageType));
+ case NANOS:
+ return Optional.of(ToInstantPage.createFromNanos(pageType));
+ default:
+ throw new IllegalArgumentException("Unsupported unit=" + timestampLogicalType.getUnit());
+ }
}
// The column will be stored as as LocalDateTime
// Ref:https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#local-semantics-timestamps-not-normalized-to-utc
- return Optional.of(ToLocalDateTimePage.create(pageType, timestampLogicalType.getUnit()));
+ switch (timestampLogicalType.getUnit()) {
+ case MILLIS:
+ return Optional.of(ToLocalDateTimePage.createFromMillis(pageType));
+ case MICROS:
+ return Optional.of(ToLocalDateTimePage.createFromMicros(pageType));
+ case NANOS:
+ return Optional.of(ToLocalDateTimePage.createFromNanos(pageType));
+ default:
+ throw new IllegalArgumentException("Unsupported unit=" + timestampLogicalType.getUnit());
+ }
}
@Override
@@ -505,7 +522,16 @@ private static class LogicalTypeVisitor
@Override
public Optional> visit(final LogicalTypeAnnotation.TimeLogicalTypeAnnotation timeLogicalType) {
// isAdjustedToUTC parameter is ignored while reading LocalTime from Parquet files
- return Optional.of(ToLocalTimePage.create(pageType, timeLogicalType.getUnit()));
+ switch (timeLogicalType.getUnit()) {
+ case MILLIS:
+ return Optional.of(ToLocalTimePage.createFromMillis(pageType));
+ case MICROS:
+ return Optional.of(ToLocalTimePage.createFromMicros(pageType));
+ case NANOS:
+ return Optional.of(ToLocalTimePage.createFromNanos(pageType));
+ default:
+ throw new IllegalArgumentException("Unsupported unit=" + timeLogicalType.getUnit());
+ }
}
@Override
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigDecimalPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigDecimalPage.java
index 6d32dde3d29..07d3f11e999 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigDecimalPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigDecimalPage.java
@@ -37,10 +37,7 @@ public static ToPage create(
return new ToPageWithDictionary<>(
BigDecimal.class,
new ChunkDictionary<>(
- (dictionary, key) -> {
- final byte[] bytes = dictionary.decodeToBinary(key).getBytes();
- return codec.decode(bytes, 0, bytes.length);
- },
+ (dictionary, key) -> codec.decode(dictionary.decodeToBinary(key).toByteBuffer()),
dictionarySupplier),
(final Object result) -> (BigDecimal[]) result,
new BigDecimalFromBytesMaterializer.Factory(codec));
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigIntegerPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigIntegerPage.java
index 28f59382283..9597eafb5c7 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigIntegerPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBigIntegerPage.java
@@ -33,10 +33,7 @@ public static ToPage create(
return new ToPageWithDictionary<>(
BigInteger.class,
new ChunkDictionary<>(
- (dictionary, key) -> {
- final byte[] bytes = dictionary.decodeToBinary(key).getBytes();
- return codec.decode(bytes, 0, bytes.length);
- },
+ (dictionary, key) -> codec.decode(dictionary.decodeToBinary(key).toByteBuffer()),
dictionarySupplier),
(final Object result) -> (BigInteger[]) result,
new BigIntegerMaterializer.Factory(codec));
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBooleanAsBytePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBooleanAsBytePage.java
index be8afd0f49a..8be732df7a2 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBooleanAsBytePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBooleanAsBytePage.java
@@ -56,7 +56,7 @@ public final Object nullValue() {
@Override
public final PageMaterializerFactory getPageMaterializerFactory() {
- return BoolMaterializer.Factory;
+ return BoolMaterializer.FACTORY;
}
@Override
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBytePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBytePage.java
index e6935c08563..f63d9f2ebcb 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBytePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToBytePage.java
@@ -52,6 +52,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return ByteMaterializer.Factory;
+ return ByteMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToCharPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToCharPage.java
index ebd8c7f4662..3fbccc9eb95 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToCharPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToCharPage.java
@@ -52,6 +52,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return CharMaterializer.Factory;
+ return CharMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToDoublePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToDoublePage.java
index 590d7d5604a..f5f450f4753 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToDoublePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToDoublePage.java
@@ -52,6 +52,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return DoubleMaterializer.Factory;
+ return DoubleMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToFloatPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToFloatPage.java
index 64476919b7c..64ef1bd83ed 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToFloatPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToFloatPage.java
@@ -52,6 +52,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return FloatMaterializer.Factory;
+ return FloatMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToInstantPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToInstantPage.java
index a26390c2c64..ed53a510dc7 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToInstantPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToInstantPage.java
@@ -6,14 +6,13 @@
import io.deephaven.chunk.ChunkType;
import io.deephaven.chunk.attributes.Any;
import io.deephaven.parquet.base.PageMaterializerFactory;
-import io.deephaven.parquet.base.materializers.InstantFromInt96Materializer;
+import io.deephaven.parquet.base.materializers.InstantNanosFromInt96Materializer;
import io.deephaven.parquet.base.materializers.InstantNanosFromMicrosMaterializer;
import io.deephaven.parquet.base.materializers.InstantNanosFromMillisMaterializer;
import io.deephaven.parquet.base.materializers.LongMaterializer;
import io.deephaven.time.DateTimeUtils;
import io.deephaven.vector.ObjectVector;
import io.deephaven.vector.ObjectVectorDirect;
-import org.apache.parquet.schema.LogicalTypeAnnotation;
import org.jetbrains.annotations.NotNull;
import java.time.Instant;
@@ -22,43 +21,45 @@
public class ToInstantPage implements ToPage {
- @SuppressWarnings("unchecked")
- public static ToPage create(
- final Class> nativeType,
- final LogicalTypeAnnotation.TimeUnit unit) {
- if (nativeType == null || Instant.class.equals(nativeType)) {
- switch (unit) {
- case MILLIS:
- return FROM_MILLIS;
- case MICROS:
- return FROM_MICROS;
- case NANOS:
- return FROM_NANOS;
- default:
- throw new IllegalArgumentException("Unsupported unit=" + unit);
- }
- }
- throw new IllegalArgumentException(
- "The native type for an Instant column is " + nativeType.getCanonicalName());
+ public static ToPage createFromMillis(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MILLIS;
}
- @SuppressWarnings("unchecked")
- public static ToPage create(final Class> nativeType) {
- if (nativeType == null || Instant.class.equals(nativeType)) {
- return FROM_INT96;
- }
- throw new IllegalArgumentException(
- "The native type for an Instant column is " + nativeType.getCanonicalName());
+ public static ToPage createFromMicros(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MICROS;
+ }
+
+ public static ToPage createFromNanos(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_NANOS;
+ }
+
+ public static ToPage createFromInt96(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_INT96;
}
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MILLIS = new ToInstantPage<>(InstantNanosFromMillisMaterializer.Factory);
+ private static final ToPage FROM_MILLIS = new ToInstantPage<>(InstantNanosFromMillisMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MICROS = new ToInstantPage<>(InstantNanosFromMicrosMaterializer.Factory);
+ private static final ToPage FROM_MICROS = new ToInstantPage<>(InstantNanosFromMicrosMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_NANOS = new ToInstantPage<>(LongMaterializer.Factory);
+ private static final ToPage FROM_NANOS = new ToInstantPage<>(LongMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_INT96 = new ToInstantPage<>(InstantFromInt96Materializer.Factory);
+ private static final ToPage FROM_INT96 = new ToInstantPage<>(InstantNanosFromInt96Materializer.FACTORY);
+
+ private static void verifyNativeType(final Class> nativeType) {
+ if (nativeType != null && !Instant.class.equals(nativeType)) {
+ throw new IllegalArgumentException(
+ "The native type for an Instant column is " + nativeType.getCanonicalName());
+ }
+ }
private final PageMaterializerFactory pageMaterializerFactory;
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToIntPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToIntPage.java
index 60a14f4a2bb..3217d95c0f5 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToIntPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToIntPage.java
@@ -48,6 +48,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return IntMaterializer.Factory;
+ return IntMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDatePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDatePage.java
index bac5507de54..96dce0d8bfd 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDatePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDatePage.java
@@ -42,6 +42,6 @@ public final ChunkType getChunkType() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return LocalDateMaterializer.Factory;
+ return LocalDateMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDateTimePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDateTimePage.java
index dadf20c5685..3e78bb797dd 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDateTimePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalDateTimePage.java
@@ -9,40 +9,43 @@
import io.deephaven.parquet.base.materializers.LocalDateTimeFromMillisMaterializer;
import io.deephaven.parquet.base.materializers.LocalDateTimeFromMicrosMaterializer;
import io.deephaven.parquet.base.materializers.LocalDateTimeFromNanosMaterializer;
-import org.apache.parquet.schema.LogicalTypeAnnotation;
import org.jetbrains.annotations.NotNull;
-import java.time.Instant;
import java.time.LocalDateTime;
public class ToLocalDateTimePage implements ToPage {
- @SuppressWarnings("unchecked")
- public static ToPage create(
- final Class> nativeType,
- final LogicalTypeAnnotation.TimeUnit unit) {
- if (nativeType == null || LocalDateTime.class.equals(nativeType)) {
- switch (unit) {
- case MILLIS:
- return FROM_MILLIS;
- case MICROS:
- return FROM_MICROS;
- case NANOS:
- return FROM_NANOS;
- default:
- throw new IllegalArgumentException("Unsupported unit=" + unit);
- }
- }
- throw new IllegalArgumentException(
- "The native type for a LocalDateTime column is " + nativeType.getCanonicalName());
+ public static ToPage createFromMillis(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MILLIS;
+ }
+
+ public static ToPage createFromMicros(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MICROS;
+ }
+
+ public static ToPage createFromNanos(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_NANOS;
}
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MILLIS = new ToLocalDateTimePage<>(LocalDateTimeFromMillisMaterializer.Factory);
+ private static final ToPage FROM_MILLIS = new ToLocalDateTimePage<>(LocalDateTimeFromMillisMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MICROS = new ToLocalDateTimePage<>(LocalDateTimeFromMicrosMaterializer.Factory);
+ private static final ToPage FROM_MICROS = new ToLocalDateTimePage<>(LocalDateTimeFromMicrosMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_NANOS = new ToLocalDateTimePage<>(LocalDateTimeFromNanosMaterializer.Factory);
+ private static final ToPage FROM_NANOS = new ToLocalDateTimePage<>(LocalDateTimeFromNanosMaterializer.FACTORY);
+
+ private static void verifyNativeType(final Class> nativeType) {
+ if (nativeType != null && !LocalDateTime.class.equals(nativeType)) {
+ throw new IllegalArgumentException(
+ "The native type for a LocalDateTime column is " + nativeType.getCanonicalName());
+ }
+ }
private final PageMaterializerFactory pageMaterializerFactory;
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalTimePage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalTimePage.java
index 17c191bd89a..265b277ff37 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalTimePage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLocalTimePage.java
@@ -13,40 +13,43 @@
import io.deephaven.parquet.base.materializers.LocalTimeFromMillisMaterializer;
import io.deephaven.parquet.base.materializers.LocalTimeFromMicrosMaterializer;
import io.deephaven.parquet.base.materializers.LocalTimeFromNanosMaterializer;
-import org.apache.parquet.schema.LogicalTypeAnnotation;
import org.jetbrains.annotations.NotNull;
-import java.time.Instant;
import java.time.LocalTime;
public class ToLocalTimePage implements ToPage {
- @SuppressWarnings("unchecked")
- public static ToPage create(
- final Class> nativeType,
- final LogicalTypeAnnotation.TimeUnit unit) {
- if (nativeType == null || LocalTime.class.equals(nativeType)) {
- switch (unit) {
- case MILLIS:
- return FROM_MILLIS;
- case MICROS:
- return FROM_MICROS;
- case NANOS:
- return FROM_NANOS;
- default:
- throw new IllegalArgumentException("Unsupported unit=" + unit);
- }
- }
- throw new IllegalArgumentException(
- "The native type for a LocalTime column is " + nativeType.getCanonicalName());
+ public static ToPage createFromMillis(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MILLIS;
+ }
+
+ public static ToPage createFromMicros(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_MICROS;
+ }
+
+ public static ToPage createFromNanos(final Class> nativeType) {
+ verifyNativeType(nativeType);
+ // noinspection unchecked
+ return FROM_NANOS;
}
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MILLIS = new ToLocalTimePage<>(LocalTimeFromMillisMaterializer.Factory);
+ private static final ToPage FROM_MILLIS = new ToLocalTimePage<>(LocalTimeFromMillisMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_MICROS = new ToLocalTimePage<>(LocalTimeFromMicrosMaterializer.Factory);
+ private static final ToPage FROM_MICROS = new ToLocalTimePage<>(LocalTimeFromMicrosMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToPage FROM_NANOS = new ToLocalTimePage<>(LocalTimeFromNanosMaterializer.Factory);
+ private static final ToPage FROM_NANOS = new ToLocalTimePage<>(LocalTimeFromNanosMaterializer.FACTORY);
+
+ private static void verifyNativeType(final Class> nativeType) {
+ if (nativeType != null && !LocalTime.class.equals(nativeType)) {
+ throw new IllegalArgumentException(
+ "The native type for a LocalTime column is " + nativeType.getCanonicalName());
+ }
+ }
private final PageMaterializerFactory pageMaterializerFactory;
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLongPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLongPage.java
index c8446d96c7a..ca86ced2540 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLongPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToLongPage.java
@@ -27,9 +27,9 @@ public static ToLongPage createFromUnsignedInt(final Cl
}
@SuppressWarnings("rawtypes")
- private static final ToLongPage FROM_LONG = new ToLongPage<>(LongMaterializer.Factory);
+ private static final ToLongPage FROM_LONG = new ToLongPage<>(LongMaterializer.FACTORY);
@SuppressWarnings("rawtypes")
- private static final ToLongPage FROM_UNSIGNED_INT = new ToLongPage<>(LongFromUnsignedIntMaterializer.Factory);
+ private static final ToLongPage FROM_UNSIGNED_INT = new ToLongPage<>(LongFromUnsignedIntMaterializer.FACTORY);
private static void verifyNativeType(final Class> nativeType) {
if (nativeType == null || long.class.equals(nativeType)) {
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToObjectPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToObjectPage.java
index d0afdbf1c50..d03bc420641 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToObjectPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToObjectPage.java
@@ -34,10 +34,7 @@ public static ToPage create(
return new ToPageWithDictionary<>(
nativeType,
new ChunkDictionary<>(
- (dictionary, key) -> {
- final byte[] bytes = dictionary.decodeToBinary(key).getBytes();
- return codec.decode(bytes, 0, bytes.length);
- },
+ (dictionary, key) -> codec.decode(dictionary.decodeToBinary(key).toByteBuffer()),
dictionarySupplier),
(final Object result) -> (T[]) result,
new ObjectMaterializer.Factory<>(codec, nativeType));
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToPageWithDictionary.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToPageWithDictionary.java
index e4fc69314ed..895644a7c04 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToPageWithDictionary.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToPageWithDictionary.java
@@ -129,8 +129,9 @@ public Object nullValue() {
@Override
@NotNull
public PageMaterializerFactory getPageMaterializerFactory() {
- // TODO Check if this is right
- return IntMaterializer.Factory;
+ // This factory should not be used for materializing any pages.
+ // The factory used for reading dictionary keys is provided inside ColumnPageReader#readKeyValues
+ return PageMaterializerFactory.NULL_FACTORY;
}
@Override
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToShortPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToShortPage.java
index 8bead54ee59..ce749f217a4 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToShortPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToShortPage.java
@@ -52,6 +52,6 @@ public final Object nullValue() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return ShortMaterializer.Factory;
+ return ShortMaterializer.FACTORY;
}
}
diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToStringPage.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToStringPage.java
index 39998ae8493..1884fc83832 100644
--- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToStringPage.java
+++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/pagestore/topage/ToStringPage.java
@@ -51,6 +51,6 @@ public final ChunkType getChunkType() {
@Override
@NotNull
public final PageMaterializerFactory getPageMaterializerFactory() {
- return StringMaterializer.Factory;
+ return StringMaterializer.FACTORY;
}
}