From a160dd18d04998b57e61ab5d111bd9e21269a91b Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Tue, 8 Aug 2023 23:18:13 -0700 Subject: [PATCH 1/8] Make getConsumer function pluggable through JdbcToArrowConfig --- .../adapter/jdbc/ArrowVectorIterator.java | 4 +-- .../arrow/adapter/jdbc/JdbcToArrowConfig.java | 36 +++++++++++++++++-- .../jdbc/JdbcToArrowConfigBuilder.java | 17 +++++++++ .../adapter/jdbc/JdbcToArrowConfigTest.java | 4 +-- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java index 6c3e9cf43e7..add5d4f45e3 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java @@ -139,8 +139,8 @@ private void initialize(VectorSchemaRoot root) throws SQLException { for (int i = 1; i <= consumers.length; i++) { final JdbcFieldInfo columnFieldInfo = JdbcToArrowUtils.getJdbcFieldInfoForColumn(rsmd, i, config); ArrowType arrowType = config.getJdbcToArrowTypeConverter().apply(columnFieldInfo); - consumers[i - 1] = JdbcToArrowUtils.getConsumer( - arrowType, i, isColumnNullable(resultSet.getMetaData(), i, columnFieldInfo), root.getVector(i - 1), config); + consumers[i - 1] = config.getJdbcConsumerGetter().apply( + arrowType, i, isColumnNullable(resultSet.getMetaData(), i, columnFieldInfo), root.getVector(i - 1)); } } diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java index 012cd95c0b2..a1c879bd2b0 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java @@ -22,8 +22,10 @@ import java.util.Map; import java.util.function.Function; +import org.apache.arrow.adapter.jdbc.consumer.JdbcConsumer; import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.util.Preconditions; +import org.apache.arrow.vector.FieldVector; import org.apache.arrow.vector.types.pojo.ArrowType; /** @@ -76,6 +78,7 @@ public final class JdbcToArrowConfig { private final int targetBatchSize; private final Function jdbcToArrowTypeConverter; + private final Function4Arity jdbcConsumerGetter; /** * Constructs a new configuration from the provided allocator and calendar. The allocator @@ -102,9 +105,10 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnIndex, Map arraySubTypesByColumnName, int targetBatchSize, - Function jdbcToArrowTypeConverter) { + Function jdbcToArrowTypeConverter, + Function4Arity jdbcConsumerGetter) { this(allocator, calendar, includeMetadata, reuseVectorSchemaRoot, arraySubTypesByColumnIndex, - arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, null); + arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, jdbcConsumerGetter, null); } /** @@ -163,6 +167,7 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnName, int targetBatchSize, Function jdbcToArrowTypeConverter, + Function4Arity jdbcConsumerGetter, RoundingMode bigDecimalRoundingMode) { this( @@ -174,6 +179,7 @@ public final class JdbcToArrowConfig { arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, + jdbcConsumerGetter, null, null, null, @@ -190,6 +196,7 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnName, int targetBatchSize, Function jdbcToArrowTypeConverter, + Function4Arity jdbcConsumerGetter, Map explicitTypesByColumnIndex, Map explicitTypesByColumnName, Map schemaMetadata, @@ -212,6 +219,10 @@ public final class JdbcToArrowConfig { // set up type converter this.jdbcToArrowTypeConverter = jdbcToArrowTypeConverter != null ? jdbcToArrowTypeConverter : (jdbcFieldInfo) -> JdbcToArrowUtils.getArrowTypeFromJdbcType(jdbcFieldInfo, calendar); + + this.jdbcConsumerGetter = jdbcConsumerGetter != null ? jdbcConsumerGetter : + (arrowType, columnIndex, nullable, vector) -> + JdbcToArrowUtils.getConsumer(arrowType, columnIndex, nullable, vector, this); } /** @@ -264,6 +275,13 @@ public Function getJdbcToArrowTypeConverter() { return jdbcToArrowTypeConverter; } + /** + * Gets the JDBC consumer getter. + */ + public Function4Arity getJdbcConsumerGetter() { + return jdbcConsumerGetter; + } + /** * Returns the array sub-type {@link JdbcFieldInfo} defined for the provided column index. * @@ -338,4 +356,18 @@ public Map> getColumnMetadataByColumnIndex() { public RoundingMode getBigDecimalRoundingMode() { return bigDecimalRoundingMode; } + + /** + * Interface for a function with 4 parameters. + * + * @param param 1 type + * @param param 2 type + * @param param 3 type + * @param param 4 type + * @param return type + */ + @FunctionalInterface + interface Function4Arity { + R apply(A a, B b, C c, D d); + } } diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java index 2fe0492deb7..7ffd626260e 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java @@ -24,8 +24,11 @@ import java.util.Map; import java.util.function.Function; +import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig.Function4Arity; +import org.apache.arrow.adapter.jdbc.consumer.JdbcConsumer; import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.util.Preconditions; +import org.apache.arrow.vector.FieldVector; import org.apache.arrow.vector.types.pojo.ArrowType; /** @@ -44,6 +47,7 @@ public class JdbcToArrowConfigBuilder { private Map> columnMetadataByColumnIndex; private int targetBatchSize; private Function jdbcToArrowTypeConverter; + private Function4Arity jdbcConsumerGetter; private RoundingMode bigDecimalRoundingMode; /** @@ -221,6 +225,18 @@ public JdbcToArrowConfigBuilder setJdbcToArrowTypeConverter( return this; } + /** + * Set the function used to get a JDBC consumer for a given type. + *

+ * Defaults to wrapping {@link + * JdbcToArrowUtils#getConsumer(ArrowType, Integer, Boolean, FieldVector, JdbcToArrowConfig)}. + */ + public JdbcToArrowConfigBuilder setJdbcConsumerGetter( + Function4Arity jdbcConsumerGetter) { + this.jdbcConsumerGetter = jdbcConsumerGetter; + return this; + } + /** * Set whether to use the same {@link org.apache.arrow.vector.VectorSchemaRoot} instance on each iteration, * or to allocate a new one. @@ -274,6 +290,7 @@ public JdbcToArrowConfig build() { arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, + jdbcConsumerGetter, explicitTypesByColumnIndex, explicitTypesByColumnName, schemaMetadata, diff --git a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java index 68a681b052c..8bf4a6aac30 100644 --- a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java +++ b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java @@ -117,12 +117,12 @@ public void testIncludeMetadata() { assertTrue(config.shouldIncludeMetadata()); config = new JdbcToArrowConfig(allocator, calendar, /* include metadata */ true, - /* reuse vector schema root */ true, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null); + /* reuse vector schema root */ true, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null, null); assertTrue(config.shouldIncludeMetadata()); assertTrue(config.isReuseVectorSchemaRoot()); config = new JdbcToArrowConfig(allocator, calendar, /* include metadata */ false, - /* reuse vector schema root */ false, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null); + /* reuse vector schema root */ false, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null, null); assertFalse(config.shouldIncludeMetadata()); assertFalse(config.isReuseVectorSchemaRoot()); } From dec947e06a41d205c799aae518823fbba7b471ba Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Tue, 8 Aug 2023 23:19:31 -0700 Subject: [PATCH 2/8] Throw helpful exception for unmapped JDBC type or arrow consumer --- .../java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java index dc79f6efff3..7c7227ce3f2 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java @@ -208,7 +208,7 @@ public static ArrowType getArrowTypeFromJdbcType(final JdbcFieldInfo fieldInfo, return new ArrowType.Struct(); default: // no-op, shouldn't get here - return null; + throw new UnsupportedOperationException("Unmapped JDBC type: " + fieldInfo.getJdbcType()); } } @@ -489,7 +489,7 @@ static JdbcConsumer getConsumer(ArrowType arrowType, int columnIndex, boolean nu return new NullConsumer((NullVector) vector); default: // no-op, shouldn't get here - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("No consumer for Arrow type: " + arrowType.getTypeID()); } } } From 6979cfdd06d2aede6d9e5ff245edc81e76ea24e4 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Wed, 9 Aug 2023 20:37:25 -0700 Subject: [PATCH 3/8] Address PR comments --- .../arrow/adapter/jdbc/JdbcToArrowConfig.java | 56 +++++++++++++------ .../jdbc/JdbcToArrowConfigBuilder.java | 6 +- .../arrow/adapter/jdbc/JdbcToArrowUtils.java | 2 +- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java index a1c879bd2b0..3f2c8762b52 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java @@ -78,7 +78,7 @@ public final class JdbcToArrowConfig { private final int targetBatchSize; private final Function jdbcToArrowTypeConverter; - private final Function4Arity jdbcConsumerGetter; + private final JdbcConsumerFactory jdbcConsumerGetter; /** * Constructs a new configuration from the provided allocator and calendar. The allocator @@ -105,10 +105,9 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnIndex, Map arraySubTypesByColumnName, int targetBatchSize, - Function jdbcToArrowTypeConverter, - Function4Arity jdbcConsumerGetter) { + Function jdbcToArrowTypeConverter) { this(allocator, calendar, includeMetadata, reuseVectorSchemaRoot, arraySubTypesByColumnIndex, - arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, jdbcConsumerGetter, null); + arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, null); } /** @@ -167,7 +166,6 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnName, int targetBatchSize, Function jdbcToArrowTypeConverter, - Function4Arity jdbcConsumerGetter, RoundingMode bigDecimalRoundingMode) { this( @@ -179,7 +177,6 @@ public final class JdbcToArrowConfig { arraySubTypesByColumnName, targetBatchSize, jdbcToArrowTypeConverter, - jdbcConsumerGetter, null, null, null, @@ -196,7 +193,38 @@ public final class JdbcToArrowConfig { Map arraySubTypesByColumnName, int targetBatchSize, Function jdbcToArrowTypeConverter, - Function4Arity jdbcConsumerGetter, + Map explicitTypesByColumnIndex, + Map explicitTypesByColumnName, + Map schemaMetadata, + Map> columnMetadataByColumnIndex, + RoundingMode bigDecimalRoundingMode) { + this( + allocator, + calendar, + includeMetadata, + reuseVectorSchemaRoot, + arraySubTypesByColumnIndex, + arraySubTypesByColumnName, + targetBatchSize, + jdbcToArrowTypeConverter, + null, + null, + null, + null, + null, + bigDecimalRoundingMode); + } + + JdbcToArrowConfig( + BufferAllocator allocator, + Calendar calendar, + boolean includeMetadata, + boolean reuseVectorSchemaRoot, + Map arraySubTypesByColumnIndex, + Map arraySubTypesByColumnName, + int targetBatchSize, + Function jdbcToArrowTypeConverter, + JdbcConsumerFactory jdbcConsumerGetter, Map explicitTypesByColumnIndex, Map explicitTypesByColumnName, Map schemaMetadata, @@ -278,7 +306,7 @@ public Function getJdbcToArrowTypeConverter() { /** * Gets the JDBC consumer getter. */ - public Function4Arity getJdbcConsumerGetter() { + public JdbcConsumerFactory getJdbcConsumerGetter() { return jdbcConsumerGetter; } @@ -358,16 +386,10 @@ public RoundingMode getBigDecimalRoundingMode() { } /** - * Interface for a function with 4 parameters. - * - * @param param 1 type - * @param param 2 type - * @param param 3 type - * @param param 4 type - * @param return type + * Interface for a function that gets a JDBC consumer for the given values. */ @FunctionalInterface - interface Function4Arity { - R apply(A a, B b, C c, D d); + protected interface JdbcConsumerFactory { + JdbcConsumer apply(ArrowType arrowType, int columnIndex, boolean nullable, FieldVector vector); } } diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java index 7ffd626260e..7d88c238320 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigBuilder.java @@ -24,8 +24,6 @@ import java.util.Map; import java.util.function.Function; -import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig.Function4Arity; -import org.apache.arrow.adapter.jdbc.consumer.JdbcConsumer; import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.util.Preconditions; import org.apache.arrow.vector.FieldVector; @@ -47,7 +45,7 @@ public class JdbcToArrowConfigBuilder { private Map> columnMetadataByColumnIndex; private int targetBatchSize; private Function jdbcToArrowTypeConverter; - private Function4Arity jdbcConsumerGetter; + private JdbcToArrowConfig.JdbcConsumerFactory jdbcConsumerGetter; private RoundingMode bigDecimalRoundingMode; /** @@ -232,7 +230,7 @@ public JdbcToArrowConfigBuilder setJdbcToArrowTypeConverter( * JdbcToArrowUtils#getConsumer(ArrowType, Integer, Boolean, FieldVector, JdbcToArrowConfig)}. */ public JdbcToArrowConfigBuilder setJdbcConsumerGetter( - Function4Arity jdbcConsumerGetter) { + JdbcToArrowConfig.JdbcConsumerFactory jdbcConsumerGetter) { this.jdbcConsumerGetter = jdbcConsumerGetter; return this; } diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java index 7c7227ce3f2..f8a13b93b1e 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java @@ -489,7 +489,7 @@ static JdbcConsumer getConsumer(ArrowType arrowType, int columnIndex, boolean nu return new NullConsumer((NullVector) vector); default: // no-op, shouldn't get here - throw new UnsupportedOperationException("No consumer for Arrow type: " + arrowType.getTypeID()); + throw new UnsupportedOperationException("No consumer for Arrow type: " + arrowType); } } } From f07630f2a2930f12a5b778b0d466218542234a30 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Wed, 9 Aug 2023 20:54:27 -0700 Subject: [PATCH 4/8] Make interface public --- .../java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java index 3f2c8762b52..d76c0883fbd 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java @@ -389,7 +389,7 @@ public RoundingMode getBigDecimalRoundingMode() { * Interface for a function that gets a JDBC consumer for the given values. */ @FunctionalInterface - protected interface JdbcConsumerFactory { + public interface JdbcConsumerFactory { JdbcConsumer apply(ArrowType arrowType, int columnIndex, boolean nullable, FieldVector vector); } } From 9837f267d740696bc1ea9df79509c44c69db1b54 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Thu, 10 Aug 2023 10:08:01 -0700 Subject: [PATCH 5/8] Add config param and fix constructor --- .../arrow/adapter/jdbc/ArrowVectorIterator.java | 2 +- .../arrow/adapter/jdbc/JdbcToArrowConfig.java | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java index add5d4f45e3..6e789009dd2 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/ArrowVectorIterator.java @@ -140,7 +140,7 @@ private void initialize(VectorSchemaRoot root) throws SQLException { final JdbcFieldInfo columnFieldInfo = JdbcToArrowUtils.getJdbcFieldInfoForColumn(rsmd, i, config); ArrowType arrowType = config.getJdbcToArrowTypeConverter().apply(columnFieldInfo); consumers[i - 1] = config.getJdbcConsumerGetter().apply( - arrowType, i, isColumnNullable(resultSet.getMetaData(), i, columnFieldInfo), root.getVector(i - 1)); + arrowType, i, isColumnNullable(resultSet.getMetaData(), i, columnFieldInfo), root.getVector(i - 1), config); } } diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java index d76c0883fbd..e23bad54afc 100644 --- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java +++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfig.java @@ -208,10 +208,10 @@ public final class JdbcToArrowConfig { targetBatchSize, jdbcToArrowTypeConverter, null, - null, - null, - null, - null, + explicitTypesByColumnIndex, + explicitTypesByColumnName, + schemaMetadata, + columnMetadataByColumnIndex, bigDecimalRoundingMode); } @@ -248,9 +248,7 @@ public final class JdbcToArrowConfig { this.jdbcToArrowTypeConverter = jdbcToArrowTypeConverter != null ? jdbcToArrowTypeConverter : (jdbcFieldInfo) -> JdbcToArrowUtils.getArrowTypeFromJdbcType(jdbcFieldInfo, calendar); - this.jdbcConsumerGetter = jdbcConsumerGetter != null ? jdbcConsumerGetter : - (arrowType, columnIndex, nullable, vector) -> - JdbcToArrowUtils.getConsumer(arrowType, columnIndex, nullable, vector, this); + this.jdbcConsumerGetter = jdbcConsumerGetter != null ? jdbcConsumerGetter : JdbcToArrowUtils::getConsumer; } /** @@ -390,6 +388,7 @@ public RoundingMode getBigDecimalRoundingMode() { */ @FunctionalInterface public interface JdbcConsumerFactory { - JdbcConsumer apply(ArrowType arrowType, int columnIndex, boolean nullable, FieldVector vector); + JdbcConsumer apply(ArrowType arrowType, int columnIndex, boolean nullable, FieldVector vector, + JdbcToArrowConfig config); } } From 7151b878df72f442cf766ba69a6d6d11cb59f163 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Thu, 10 Aug 2023 13:05:24 -0700 Subject: [PATCH 6/8] Undo test changes --- .../org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java index 8bf4a6aac30..68a681b052c 100644 --- a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java +++ b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowConfigTest.java @@ -117,12 +117,12 @@ public void testIncludeMetadata() { assertTrue(config.shouldIncludeMetadata()); config = new JdbcToArrowConfig(allocator, calendar, /* include metadata */ true, - /* reuse vector schema root */ true, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null, null); + /* reuse vector schema root */ true, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null); assertTrue(config.shouldIncludeMetadata()); assertTrue(config.isReuseVectorSchemaRoot()); config = new JdbcToArrowConfig(allocator, calendar, /* include metadata */ false, - /* reuse vector schema root */ false, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null, null); + /* reuse vector schema root */ false, null, null, JdbcToArrowConfig.NO_LIMIT_BATCH_SIZE, null); assertFalse(config.shouldIncludeMetadata()); assertFalse(config.isReuseVectorSchemaRoot()); } From 82fa1dcb21612dc5d5e5b75fd003ba82fcfefe34 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Thu, 10 Aug 2023 14:00:09 -0700 Subject: [PATCH 7/8] Fix hanging test --- .../apache/arrow/flight/sql/example/FlightSqlExample.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java index fe1e1445afc..de4412f823c 100644 --- a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java +++ b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java @@ -299,9 +299,11 @@ private static boolean populateDerbyDatabase() { } private static ArrowType getArrowTypeFromJdbcType(final int jdbcDataType, final int precision, final int scale) { - final ArrowType type = - JdbcToArrowUtils.getArrowTypeFromJdbcType(new JdbcFieldInfo(jdbcDataType, precision, scale), DEFAULT_CALENDAR); - return isNull(type) ? ArrowType.Utf8.INSTANCE : type; + try { + return JdbcToArrowUtils.getArrowTypeFromJdbcType(new JdbcFieldInfo(jdbcDataType, precision, scale), DEFAULT_CALENDAR); + } catch (UnsupportedOperationException ignored) { + return ArrowType.Utf8.INSTANCE; + } } private static void saveToVector(final Byte data, final UInt1Vector vector, final int index) { From 6eef22b224bc70089a10d30ccd1c5607a21f6da2 Mon Sep 17 00:00:00 2001 From: Diego Fernandez Date: Thu, 10 Aug 2023 14:02:08 -0700 Subject: [PATCH 8/8] . --- .../org/apache/arrow/flight/sql/example/FlightSqlExample.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java index de4412f823c..3cc8f4a1c1b 100644 --- a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java +++ b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java @@ -300,7 +300,8 @@ private static boolean populateDerbyDatabase() { private static ArrowType getArrowTypeFromJdbcType(final int jdbcDataType, final int precision, final int scale) { try { - return JdbcToArrowUtils.getArrowTypeFromJdbcType(new JdbcFieldInfo(jdbcDataType, precision, scale), DEFAULT_CALENDAR); + return JdbcToArrowUtils.getArrowTypeFromJdbcType(new JdbcFieldInfo(jdbcDataType, precision, scale), + DEFAULT_CALENDAR); } catch (UnsupportedOperationException ignored) { return ArrowType.Utf8.INSTANCE; }