mayursrivastava commented on a change in pull request #3024:
URL: https://github.com/apache/iceberg/pull/3024#discussion_r707372779



##########
File path: 
arrow/src/main/java/org/apache/iceberg/arrow/DictEncodedArrowConverter.java
##########
@@ -36,29 +46,195 @@
   private DictEncodedArrowConverter() {
   }
 
+  @SuppressWarnings("checkstyle:CyclomaticComplexity")
   public static FieldVector toArrowVector(VectorHolder vectorHolder, 
ArrowVectorAccessor<?, String, ?, ?> accessor) {
     Preconditions.checkArgument(null != vectorHolder, "VectorHolder cannot be 
null");
     Preconditions.checkArgument(null != accessor, "ArrowVectorAccessor cannot 
be null");
-    // TODO: add conversions for other types 
(https://github.com/apache/iceberg/issues/2484)
     if (vectorHolder.isDictionaryEncoded()) {
       if (Type.TypeID.DECIMAL.equals(vectorHolder.icebergType().typeId())) {
-        int precision = ((Types.DecimalType) 
vectorHolder.icebergType()).precision();
-        int scale = ((Types.DecimalType) vectorHolder.icebergType()).scale();
-
-        DecimalVector decimalVector = new DecimalVector(
-            vectorHolder.vector().getName(),
-            
ArrowSchemaUtil.convert(vectorHolder.icebergField()).getFieldType(),
-            vectorHolder.vector().getAllocator());
-
-        for (int i = 0; i < vectorHolder.vector().getValueCount(); i++) {
-          BigDecimal decimal = (BigDecimal) accessor.getDecimal(i, precision, 
scale);
-          decimalVector.setSafe(i, decimal);
-        }
-        decimalVector.setValueCount(vectorHolder.vector().getValueCount());
-        return decimalVector;
+        return toDecimalVector(vectorHolder, accessor);
+      } else if 
(Type.TypeID.TIMESTAMP.equals(vectorHolder.icebergType().typeId())) {
+        return toTimestampVector(vectorHolder, accessor);
+      } else if (Type.TypeID.LONG.equals(vectorHolder.icebergType().typeId())) 
{
+        return toBigIntVector(vectorHolder, accessor);
+      } else if 
(Type.TypeID.FLOAT.equals(vectorHolder.icebergType().typeId())) {
+        return toFloat4Vector(vectorHolder, accessor);
+      } else if 
(Type.TypeID.DOUBLE.equals(vectorHolder.icebergType().typeId())) {
+        return toFloat8Vector(vectorHolder, accessor);
+      } else if 
(Type.TypeID.STRING.equals(vectorHolder.icebergType().typeId())) {
+        return toVarCharVector(vectorHolder, accessor);
+      } else if 
(Type.TypeID.BINARY.equals(vectorHolder.icebergType().typeId())) {
+        return toVarBinaryVector(vectorHolder, accessor);
+      } else if (Type.TypeID.TIME.equals(vectorHolder.icebergType().typeId())) 
{
+        return toTimeMicroVector(vectorHolder, accessor);
       }
+
+      throw new IllegalArgumentException(String.format("Cannot convert dict 
encoded field '%s' of type '%s' to Arrow " +
+              "vector as it is currently not supported",
+          vectorHolder.icebergField().name(), 
vectorHolder.icebergType().typeId()));
     }
 
     return vectorHolder.vector();
   }
+
+  private static DecimalVector toDecimalVector(
+      VectorHolder vectorHolder, ArrowVectorAccessor<?, String, ?, ?> 
accessor) {
+    int precision = ((Types.DecimalType) 
vectorHolder.icebergType()).precision();
+    int scale = ((Types.DecimalType) vectorHolder.icebergType()).scale();
+
+    DecimalVector vector = new DecimalVector(
+        vectorHolder.vector().getName(),
+        ArrowSchemaUtil.convert(vectorHolder.icebergField()).getFieldType(),
+        vectorHolder.vector().getAllocator());
+    vector.allocateNew(vectorHolder.vector().getValueCount());
+    vector.setValueCount(vectorHolder.vector().getValueCount());

Review comment:
       As per the convention 
(http://arrow.apache.org/docs/java/vector.html#building-valuevector), the 
setValueCount() should be called after the values are set.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to