This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-java.git


The following commit(s) were added to refs/heads/main by this push:
     new ec3a4247 GH-858: Fix error handling in CompositeJdbcConsumer (#857)
ec3a4247 is described below

commit ec3a424736ce00e7469cb6d983061c335bf4853a
Author: Diego Fernández Giraldo <[email protected]>
AuthorDate: Thu Sep 25 01:09:42 2025 -0600

    GH-858: Fix error handling in CompositeJdbcConsumer (#857)
    
    ## What's Changed
    
    Turns out not all MinorTypes have a corresponding ArrowType, which can
    cause the following exception while handling the original exception:
    
    ```
    Caused by: java.lang.UnsupportedOperationException: Cannot get simple type 
for type DECIMAL
            at 
org.apache.arrow.vector.types.Types$MinorType.getType(Types.java:815)
            at 
org.apache.arrow.adapter.jdbc.consumer.CompositeJdbcConsumer.consume(CompositeJdbcConsumer.java:49)
    ```
    
    This PR changes the value we store in the exception to be the
    `MinorType` instead so we can still get useful info about the type but
    avoiding this possible exception.
    
    Closes #858.
---
 .../arrow/adapter/jdbc/consumer/CompositeJdbcConsumer.java |  5 ++---
 .../jdbc/consumer/exceptions/JdbcConsumerException.java    | 14 +++++++-------
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git 
a/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/CompositeJdbcConsumer.java
 
b/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/CompositeJdbcConsumer.java
index 2366116f..b8389ee2 100644
--- 
a/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/CompositeJdbcConsumer.java
+++ 
b/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/CompositeJdbcConsumer.java
@@ -24,7 +24,6 @@ import 
org.apache.arrow.adapter.jdbc.consumer.exceptions.JdbcConsumerException;
 import org.apache.arrow.util.AutoCloseables;
 import org.apache.arrow.vector.ValueVector;
 import org.apache.arrow.vector.VectorSchemaRoot;
-import org.apache.arrow.vector.types.pojo.ArrowType;
 
 /** Composite consumer which hold all consumers. It manages the consume and 
cleanup process. */
 public class CompositeJdbcConsumer implements JdbcConsumer {
@@ -46,9 +45,9 @@ public class CompositeJdbcConsumer implements JdbcConsumer {
           BaseConsumer consumer = (BaseConsumer) consumers[i];
           JdbcFieldInfo fieldInfo =
               new JdbcFieldInfo(rs.getMetaData(), 
consumer.columnIndexInResultSet);
-          ArrowType arrowType = consumer.vector.getMinorType().getType();
+
           throw new JdbcConsumerException(
-              "Exception while consuming JDBC value", e, fieldInfo, arrowType);
+              "Exception while consuming JDBC value", e, fieldInfo, 
consumer.vector.getField());
         } else {
           throw e;
         }
diff --git 
a/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/exceptions/JdbcConsumerException.java
 
b/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/exceptions/JdbcConsumerException.java
index 04e26d64..98927f41 100644
--- 
a/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/exceptions/JdbcConsumerException.java
+++ 
b/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/consumer/exceptions/JdbcConsumerException.java
@@ -17,7 +17,7 @@
 package org.apache.arrow.adapter.jdbc.consumer.exceptions;
 
 import org.apache.arrow.adapter.jdbc.JdbcFieldInfo;
-import org.apache.arrow.vector.types.pojo.ArrowType;
+import org.apache.arrow.vector.types.pojo.Field;
 
 /**
  * Exception while consuming JDBC data. This exception stores the 
JdbcFieldInfo for the column and
@@ -25,7 +25,7 @@ import org.apache.arrow.vector.types.pojo.ArrowType;
  */
 public class JdbcConsumerException extends RuntimeException {
   final JdbcFieldInfo fieldInfo;
-  final ArrowType arrowType;
+  final Field field;
 
   /**
    * Construct JdbcConsumerException with all fields.
@@ -33,17 +33,17 @@ public class JdbcConsumerException extends RuntimeException 
{
    * @param message error message
    * @param cause original exception
    * @param fieldInfo JdbcFieldInfo for the column
-   * @param arrowType ArrowType for the corresponding vector
+   * @param field ArrowType for the corresponding vector
    */
   public JdbcConsumerException(
-      String message, Throwable cause, JdbcFieldInfo fieldInfo, ArrowType 
arrowType) {
+      String message, Throwable cause, JdbcFieldInfo fieldInfo, Field field) {
     super(message, cause);
     this.fieldInfo = fieldInfo;
-    this.arrowType = arrowType;
+    this.field = field;
   }
 
-  public ArrowType getArrowType() {
-    return this.arrowType;
+  public Field getField() {
+    return this.field;
   }
 
   public JdbcFieldInfo getFieldInfo() {

Reply via email to