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();

Reply via email to