This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/master by this push:
new fd45ec7 Avro: Extract ValueReaders.decimalBytesReader (#1233)
fd45ec7 is described below
commit fd45ec7b6a3c3ed5be26cdaed75dbf7ab9a29c4b
Author: Jingsong Lee <[email protected]>
AuthorDate: Mon Jul 27 03:43:05 2020 +0800
Avro: Extract ValueReaders.decimalBytesReader (#1233)
---
.../org/apache/iceberg/avro/GenericAvroReader.java | 18 +++---------------
.../java/org/apache/iceberg/avro/ValueReaders.java | 12 ++++++++++++
.../java/org/apache/iceberg/data/avro/DataReader.java | 18 +++---------------
.../org/apache/iceberg/spark/data/SparkAvroReader.java | 18 +++---------------
4 files changed, 21 insertions(+), 45 deletions(-)
diff --git a/core/src/main/java/org/apache/iceberg/avro/GenericAvroReader.java
b/core/src/main/java/org/apache/iceberg/avro/GenericAvroReader.java
index be85497..05e0508 100644
--- a/core/src/main/java/org/apache/iceberg/avro/GenericAvroReader.java
+++ b/core/src/main/java/org/apache/iceberg/avro/GenericAvroReader.java
@@ -171,21 +171,9 @@ class GenericAvroReader<T> implements DatumReader<T> {
return ValueReaders.longs();
case "decimal":
- ValueReader<byte[]> inner;
- switch (primitive.getType()) {
- case FIXED:
- inner = ValueReaders.fixed(primitive.getFixedSize());
- break;
- case BYTES:
- inner = ValueReaders.bytes();
- break;
- default:
- throw new IllegalArgumentException(
- "Invalid primitive type for decimal: " +
primitive.getType());
- }
-
- LogicalTypes.Decimal decimal = (LogicalTypes.Decimal) logicalType;
- return ValueReaders.decimal(inner, decimal.getScale());
+ return ValueReaders.decimal(
+ ValueReaders.decimalBytesReader(primitive),
+ ((LogicalTypes.Decimal) logicalType).getScale());
case "uuid":
return ValueReaders.uuids();
diff --git a/core/src/main/java/org/apache/iceberg/avro/ValueReaders.java
b/core/src/main/java/org/apache/iceberg/avro/ValueReaders.java
index a51580f..0eb3fe2 100644
--- a/core/src/main/java/org/apache/iceberg/avro/ValueReaders.java
+++ b/core/src/main/java/org/apache/iceberg/avro/ValueReaders.java
@@ -110,6 +110,18 @@ public class ValueReaders {
return new DecimalReader(unscaledReader, scale);
}
+ public static ValueReader<byte[]> decimalBytesReader(Schema schema) {
+ switch (schema.getType()) {
+ case FIXED:
+ return ValueReaders.fixed(schema.getFixedSize());
+ case BYTES:
+ return ValueReaders.bytes();
+ default:
+ throw new IllegalArgumentException(
+ "Invalid primitive type for decimal: " + schema.getType());
+ }
+ }
+
public static ValueReader<Object> union(List<ValueReader<?>> readers) {
return new UnionReader(readers);
}
diff --git a/core/src/main/java/org/apache/iceberg/data/avro/DataReader.java
b/core/src/main/java/org/apache/iceberg/data/avro/DataReader.java
index 613b4b8..d75acf9 100644
--- a/core/src/main/java/org/apache/iceberg/data/avro/DataReader.java
+++ b/core/src/main/java/org/apache/iceberg/data/avro/DataReader.java
@@ -167,21 +167,9 @@ public class DataReader<T> implements DatumReader<T>,
SupportsRowPosition {
return GenericReaders.timestamps();
case "decimal":
- ValueReader<byte[]> inner;
- switch (primitive.getType()) {
- case FIXED:
- inner = ValueReaders.fixed(primitive.getFixedSize());
- break;
- case BYTES:
- inner = ValueReaders.bytes();
- break;
- default:
- throw new IllegalArgumentException(
- "Invalid primitive type for decimal: " +
primitive.getType());
- }
-
- LogicalTypes.Decimal decimal = (LogicalTypes.Decimal) logicalType;
- return ValueReaders.decimal(inner, decimal.getScale());
+ return ValueReaders.decimal(
+ ValueReaders.decimalBytesReader(primitive),
+ ((LogicalTypes.Decimal) logicalType).getScale());
case "uuid":
return ValueReaders.uuids();
diff --git
a/spark/src/main/java/org/apache/iceberg/spark/data/SparkAvroReader.java
b/spark/src/main/java/org/apache/iceberg/spark/data/SparkAvroReader.java
index b112f68..baecc25 100644
--- a/spark/src/main/java/org/apache/iceberg/spark/data/SparkAvroReader.java
+++ b/spark/src/main/java/org/apache/iceberg/spark/data/SparkAvroReader.java
@@ -151,21 +151,9 @@ public class SparkAvroReader implements
DatumReader<InternalRow> {
return ValueReaders.longs();
case "decimal":
- ValueReader<byte[]> inner;
- switch (primitive.getType()) {
- case FIXED:
- inner = ValueReaders.fixed(primitive.getFixedSize());
- break;
- case BYTES:
- inner = ValueReaders.bytes();
- break;
- default:
- throw new IllegalArgumentException(
- "Invalid primitive type for decimal: " +
primitive.getType());
- }
-
- LogicalTypes.Decimal decimal = (LogicalTypes.Decimal) logicalType;
- return SparkValueReaders.decimal(inner, decimal.getScale());
+ return SparkValueReaders.decimal(
+ ValueReaders.decimalBytesReader(primitive),
+ ((LogicalTypes.Decimal) logicalType).getScale());
case "uuid":
return SparkValueReaders.uuids();