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-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 93deb03  [Format][C][Java] Add method to get parameter schema (#62)
93deb03 is described below

commit 93deb0349d57e9572e244d3b161e08eb072c4675
Author: David Li <[email protected]>
AuthorDate: Fri Aug 12 12:50:50 2022 -0400

    [Format][C][Java] Add method to get parameter schema (#62)
    
    * [Format][C][Java] Add method to get parameter schema
    
    * Clarify docstrings
---
 adbc.h                                             | 22 ++++++++++++++
 c/driver_manager/adbc_driver_manager.cc            | 16 ++++++++++
 c/drivers/sqlite/sqlite.cc                         | 35 ++++++++++++++++++++++
 c/validation/adbc_validation.c                     | 16 ++++++++--
 java/core/pom.xml                                  |  2 +-
 .../org/apache/arrow/adbc/core/AdbcStatement.java  | 21 +++++++++++++
 java/driver-manager/pom.xml                        |  2 +-
 java/driver/flight-sql-validation/pom.xml          |  2 +-
 java/driver/flight-sql/pom.xml                     |  2 +-
 .../adbc/driver/flightsql/FlightSqlStatement.java  | 10 +++++++
 java/driver/jdbc-util/pom.xml                      |  2 +-
 java/driver/jdbc-validation-derby/pom.xml          |  2 +-
 java/driver/jdbc-validation-postgresql/pom.xml     |  2 +-
 java/driver/jdbc/pom.xml                           |  2 +-
 .../arrow/adbc/driver/jdbc/JdbcStatement.java      | 34 +++++++++++++++++++++
 java/driver/validation/pom.xml                     |  2 +-
 .../driver/testsuite/AbstractStatementTest.java    | 11 +++++++
 java/pom.xml                                       | 15 ++--------
 java/sql/pom.xml                                   |  2 +-
 19 files changed, 175 insertions(+), 25 deletions(-)

diff --git a/adbc.h b/adbc.h
index e7d9d51..b7f4d43 100644
--- a/adbc.h
+++ b/adbc.h
@@ -746,6 +746,26 @@ AdbcStatusCode AdbcStatementBindStream(struct 
AdbcStatement* statement,
                                        struct ArrowArrayStream* values,
                                        struct AdbcError* error);
 
+/// \brief Get the schema for bound parameters.
+///
+/// This retrieves an Arrow schema describing the number, names, and
+/// types of the parameters in a parameterized statement.  The fields
+/// of the schema should be in order of the ordinal position of the
+/// parameters; named parameters should appear only once.
+///
+/// If the parameter does not have a name, or the name cannot be
+/// determined, the name of the corresponding field in the schema will
+/// be an empty string.  If the type cannot be determined, the type of
+/// the corresponding field will be NA (NullType).
+///
+/// This should be called after AdbcStatementPrepare.
+///
+/// \return ADBC_STATUS_NOT_IMPLEMENTED if the schema cannot be determined.
+ADBC_EXPORT
+AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement* statement,
+                                               struct ArrowSchema* schema,
+                                               struct AdbcError* error);
+
 /// \brief Read the result of a statement.
 ///
 /// This method can be called only once per execution of the
@@ -918,6 +938,8 @@ struct ADBC_EXPORT AdbcDriver {
                                         struct AdbcError*);
   AdbcStatusCode (*StatementExecute)(struct AdbcStatement*, struct AdbcError*);
   AdbcStatusCode (*StatementPrepare)(struct AdbcStatement*, struct AdbcError*);
+  AdbcStatusCode (*StatementGetParameterSchema)(struct AdbcStatement*,
+                                                struct ArrowSchema*, struct 
AdbcError*);
   AdbcStatusCode (*StatementGetStream)(struct AdbcStatement*, struct 
ArrowArrayStream*,
                                        struct AdbcError*);
   AdbcStatusCode (*StatementGetPartitionDescSize)(struct AdbcStatement*, 
size_t*,
diff --git a/c/driver_manager/adbc_driver_manager.cc 
b/c/driver_manager/adbc_driver_manager.cc
index a6c4efb..4058b83 100644
--- a/c/driver_manager/adbc_driver_manager.cc
+++ b/c/driver_manager/adbc_driver_manager.cc
@@ -102,6 +102,12 @@ AdbcStatusCode StatementExecute(struct AdbcStatement*, 
struct AdbcError* error)
   return ADBC_STATUS_NOT_IMPLEMENTED;
 }
 
+AdbcStatusCode StatementGetParameterSchema(struct AdbcStatement* statement,
+                                           struct ArrowSchema* schema,
+                                           struct AdbcError* error) {
+  return ADBC_STATUS_NOT_IMPLEMENTED;
+}
+
 AdbcStatusCode StatementGetPartitionDesc(struct AdbcStatement*, uint8_t*,
                                          struct AdbcError*) {
   return ADBC_STATUS_NOT_IMPLEMENTED;
@@ -476,6 +482,15 @@ AdbcStatusCode AdbcStatementGetPartitionDescSize(struct 
AdbcStatement* statement
                                                                   error);
 }
 
+AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement* statement,
+                                               struct ArrowSchema* schema,
+                                               struct AdbcError* error) {
+  if (!statement->private_driver) {
+    return ADBC_STATUS_INVALID_STATE;
+  }
+  return statement->private_driver->StatementGetParameterSchema(statement, 
schema, error);
+}
+
 AdbcStatusCode AdbcStatementGetStream(struct AdbcStatement* statement,
                                       struct ArrowArrayStream* out,
                                       struct AdbcError* error) {
@@ -707,6 +722,7 @@ AdbcStatusCode AdbcLoadDriver(const char* driver_name, 
const char* entrypoint,
   CHECK_REQUIRED(driver, StatementRelease);
   FILL_DEFAULT(driver, StatementBind);
   FILL_DEFAULT(driver, StatementExecute);
+  FILL_DEFAULT(driver, StatementGetParameterSchema);
   FILL_DEFAULT(driver, StatementGetPartitionDesc);
   FILL_DEFAULT(driver, StatementGetPartitionDescSize);
   FILL_DEFAULT(driver, StatementPrepare);
diff --git a/c/drivers/sqlite/sqlite.cc b/c/drivers/sqlite/sqlite.cc
index ddaf94d..9616ae5 100644
--- a/c/drivers/sqlite/sqlite.cc
+++ b/c/drivers/sqlite/sqlite.cc
@@ -34,6 +34,7 @@
 #include <arrow/util/string_builder.h>
 
 #include "adbc.h"
+#include "arrow/type_fwd.h"
 #include "drivers/util.h"
 
 namespace {
@@ -1138,6 +1139,24 @@ class SqliteStatementImpl {
     return ADBC_STATUS_OK;
   }
 
+  AdbcStatusCode GetParameterSchema(const 
std::shared_ptr<SqliteStatementImpl>& self,
+                                    struct ArrowSchema* schema, struct 
AdbcError* error) {
+    if (!stmt_) {
+      SetError(error, "Cannot get parameter schema before preparing");
+      return ADBC_STATUS_INVALID_STATE;
+    }
+
+    const int num_params = sqlite3_bind_parameter_count(stmt_);
+    arrow::FieldVector fields(num_params);
+    for (int i = 0; i < num_params; i++) {
+      const char* name = sqlite3_bind_parameter_name(stmt_, i);
+      fields[i] = arrow::field(name ? name : "", arrow::null());
+    }
+    ADBC_RETURN_NOT_OK(FromArrowStatus(
+        arrow::ExportSchema(arrow::Schema(std::move(fields)), schema), error));
+    return ADBC_STATUS_OK;
+  }
+
   AdbcStatusCode GetStream(const std::shared_ptr<SqliteStatementImpl>& self,
                            struct ArrowArrayStream* out, struct AdbcError* 
error) {
     if (!result_reader_) {
@@ -1502,6 +1521,15 @@ AdbcStatusCode 
SqliteStatementGetPartitionDescSize(struct AdbcStatement* stateme
   return ADBC_STATUS_NOT_IMPLEMENTED;
 }
 
+AdbcStatusCode SqliteStatementGetParameterSchema(struct AdbcStatement* 
statement,
+                                                 struct ArrowSchema* schema,
+                                                 struct AdbcError* error) {
+  if (!statement->private_data) return ADBC_STATUS_INVALID_STATE;
+  auto* ptr =
+      
reinterpret_cast<std::shared_ptr<SqliteStatementImpl>*>(statement->private_data);
+  return (*ptr)->GetParameterSchema(*ptr, schema, error);
+}
+
 AdbcStatusCode SqliteStatementGetStream(struct AdbcStatement* statement,
                                         struct ArrowArrayStream* out,
                                         struct AdbcError* error) {
@@ -1669,6 +1697,12 @@ AdbcStatusCode AdbcStatementGetPartitionDescSize(struct 
AdbcStatement* statement
   return SqliteStatementGetPartitionDescSize(statement, length, error);
 }
 
+AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement* statement,
+                                               struct ArrowSchema* schema,
+                                               struct AdbcError* error) {
+  return SqliteStatementGetParameterSchema(statement, schema, error);
+}
+
 AdbcStatusCode AdbcStatementGetStream(struct AdbcStatement* statement,
                                       struct ArrowArrayStream* out,
                                       struct AdbcError* error) {
@@ -1727,6 +1761,7 @@ AdbcStatusCode AdbcSqliteDriverInit(size_t count, struct 
AdbcDriver* driver,
   driver->StatementBind = SqliteStatementBind;
   driver->StatementBindStream = SqliteStatementBindStream;
   driver->StatementExecute = SqliteStatementExecute;
+  driver->StatementGetParameterSchema = SqliteStatementGetParameterSchema;
   driver->StatementGetPartitionDesc = SqliteStatementGetPartitionDesc;
   driver->StatementGetPartitionDescSize = SqliteStatementGetPartitionDescSize;
   driver->StatementGetStream = SqliteStatementGetStream;
diff --git a/c/validation/adbc_validation.c b/c/validation/adbc_validation.c
index 76ee737..8bb415b 100644
--- a/c/validation/adbc_validation.c
+++ b/c/validation/adbc_validation.c
@@ -28,7 +28,7 @@ const char* AdbcValidateStatusCodeMessage(AdbcStatusCode 
code) {
 #define STRINGIFY_VALUE(s) ADBCV_STRINGIFY(s)
 #define CASE(CONSTANT)         \
   case ADBC_STATUS_##CONSTANT: \
-    return #CONSTANT " (" STRINGIFY_VALUE(ADBC_STATUS_##CONSTANT) ")";
+    return STRINGIFY_VALUE(ADBC_STATUS_##CONSTANT) " (" #CONSTANT ")";
 
   switch (code) {
     CASE(OK);
@@ -85,14 +85,20 @@ void AdbcValidateFail(struct AdbcValidateTestContext* ctx, 
const char* file, int
   }
 }
 
-#define ADBCV_ASSERT_FAILS_WITH(STATUS, ERROR, EXPR)                           
 \
+#define ADBCV_CONCAT(a, b) a##b
+#define ADBCV_NAME(a, b) ADBCV_CONCAT(a, b)
+#define ADBCV_ASSERT_FAILS_WITH_IMPL(STATUS, ERROR, NAME, EXPR)                
 \
   AdbcValidateBeginAssert(adbc_context, "%s == %s", #EXPR,                     
 \
                           
AdbcValidateStatusCodeMessage(ADBC_STATUS_##STATUS)); \
-  if (ADBC_STATUS_##STATUS != (EXPR)) {                                        
 \
+  AdbcStatusCode NAME = (EXPR);                                                
 \
+  if (ADBC_STATUS_##STATUS != NAME) {                                          
 \
+    printf("(was %s) ", AdbcValidateStatusCodeMessage(NAME));                  
 \
     AdbcValidateFail(adbc_context, __FILE__, __LINE__, ERROR);                 
 \
     return;                                                                    
 \
   }                                                                            
 \
   AdbcValidatePass(adbc_context);
+#define ADBCV_ASSERT_FAILS_WITH(STATUS, ERROR, EXPR) \
+  ADBCV_ASSERT_FAILS_WITH_IMPL(STATUS, ERROR, ADBCV_NAME(adbc_status_, 
__COUNTER__), EXPR)
 #define ADBCV_ASSERT_OK(ERROR, EXPR)                                      \
   AdbcValidateBeginAssert(adbc_context, "%s == %s", #EXPR,                \
                           AdbcValidateStatusCodeMessage(ADBC_STATUS_OK)); \
@@ -352,10 +358,14 @@ void AdbcValidateStatementSqlPrepare(struct 
AdbcValidateTestContext* adbc_contex
   ADBCV_ASSERT_OK(&error, AdbcConnectionNew(&connection, &error));
   ADBCV_ASSERT_OK(&error, AdbcConnectionInit(&connection, &database, &error));
 
+  struct ArrowSchema schema;
+  memset(&schema, 0, sizeof(schema));
   AdbcValidateBeginCase(adbc_context, "StatementSql", "prepare");
   ADBCV_ASSERT_OK(&error, AdbcStatementNew(&connection, &statement, &error));
   ADBCV_ASSERT_OK(&error, AdbcStatementSetSqlQuery(&statement, "SELECT 1", 
&error));
   ADBCV_ASSERT_OK(&error, AdbcStatementPrepare(&statement, &error));
+  ADBCV_ASSERT_OK(&error, AdbcStatementGetParameterSchema(&statement, &schema, 
&error));
+  schema.release(&schema);
   ADBCV_ASSERT_OK(&error, AdbcStatementExecute(&statement, &error));
   ADBCV_ASSERT_OK(&error, AdbcStatementGetStream(&statement, &out, &error));
   ADBCV_ASSERT_NE(NULL, out.release);
diff --git a/java/core/pom.xml b/java/core/pom.xml
index 6e88f15..990786f 100644
--- a/java/core/pom.xml
+++ b/java/core/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>adbc-core</artifactId>
diff --git 
a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcStatement.java 
b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcStatement.java
index b621587..5af2dfc 100644
--- a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcStatement.java
+++ b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcStatement.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 import org.apache.arrow.vector.VectorSchemaRoot;
 import org.apache.arrow.vector.ipc.ArrowReader;
+import org.apache.arrow.vector.types.pojo.Schema;
 
 public interface AdbcStatement extends AutoCloseable {
   /** Set a generic query option. */
@@ -75,6 +76,26 @@ public interface AdbcStatement extends AutoCloseable {
    */
   ArrowReader getArrowReader() throws AdbcException;
 
+  /**
+   * Get the schema for bound parameters.
+   *
+   * <p>This retrieves an Arrow schema describing the number, names, and types 
of the parameters in
+   * a parameterized statement. The fields of the schema should be in order of 
the ordinal position
+   * of the parameters; named parameters should appear only once.
+   *
+   * <p>If the parameter does not have a name, or the name cannot be 
determined, the name of the
+   * corresponding field in the schema will be an empty string. If the type 
cannot be determined,
+   * the type of the corresponding field will be NA (NullType).
+   *
+   * <p>This should be called after AdbcStatementPrepare.
+   *
+   * @throws AdbcException with {@link AdbcStatusCode#NOT_IMPLEMENTED} if the 
parameters cannot be
+   *     determined at all.
+   */
+  default Schema getParameterSchema() throws AdbcException {
+    throw AdbcException.notImplemented("Statement does not support 
getParameterSchema");
+  }
+
   /**
    * Get a list of partitions of the result set.
    *
diff --git a/java/driver-manager/pom.xml b/java/driver-manager/pom.xml
index 97d1575..14b8d81 100644
--- a/java/driver-manager/pom.xml
+++ b/java/driver-manager/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>adbc-driver-manager</artifactId>
diff --git a/java/driver/flight-sql-validation/pom.xml 
b/java/driver/flight-sql-validation/pom.xml
index 3ad44e2..c453e8e 100644
--- a/java/driver/flight-sql-validation/pom.xml
+++ b/java/driver/flight-sql-validation/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git a/java/driver/flight-sql/pom.xml b/java/driver/flight-sql/pom.xml
index 02033c7..5003d95 100644
--- a/java/driver/flight-sql/pom.xml
+++ b/java/driver/flight-sql/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git 
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlStatement.java
 
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlStatement.java
index 3a3e072..c44ed56 100644
--- 
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlStatement.java
+++ 
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlStatement.java
@@ -41,6 +41,7 @@ import org.apache.arrow.util.AutoCloseables;
 import org.apache.arrow.vector.VectorSchemaRoot;
 import org.apache.arrow.vector.ipc.ArrowReader;
 import org.apache.arrow.vector.types.pojo.Field;
+import org.apache.arrow.vector.types.pojo.Schema;
 
 public class FlightSqlStatement implements AdbcStatement {
   private final BufferAllocator allocator;
@@ -247,6 +248,15 @@ public class FlightSqlStatement implements AdbcStatement {
     return reader;
   }
 
+  @Override
+  public Schema getParameterSchema() throws AdbcException {
+    if (preparedStatement == null) {
+      throw AdbcException.invalidState(
+          "[Flight SQL] Must call prepare() before getParameterSchema()");
+    }
+    return preparedStatement.getParameterSchema();
+  }
+
   @Override
   public List<PartitionDescriptor> getPartitionDescriptors() throws 
AdbcException {
     if (flightEndpoints == null) {
diff --git a/java/driver/jdbc-util/pom.xml b/java/driver/jdbc-util/pom.xml
index ea38d87..5c0e025 100644
--- a/java/driver/jdbc-util/pom.xml
+++ b/java/driver/jdbc-util/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git a/java/driver/jdbc-validation-derby/pom.xml 
b/java/driver/jdbc-validation-derby/pom.xml
index 453c5d6..f1b0c04 100644
--- a/java/driver/jdbc-validation-derby/pom.xml
+++ b/java/driver/jdbc-validation-derby/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git a/java/driver/jdbc-validation-postgresql/pom.xml 
b/java/driver/jdbc-validation-postgresql/pom.xml
index bea4545..1f7672f 100644
--- a/java/driver/jdbc-validation-postgresql/pom.xml
+++ b/java/driver/jdbc-validation-postgresql/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git a/java/driver/jdbc/pom.xml b/java/driver/jdbc/pom.xml
index 05b0e9f..964c0a3 100644
--- a/java/driver/jdbc/pom.xml
+++ b/java/driver/jdbc/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git 
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcStatement.java
 
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcStatement.java
index 1d243bd..db2dc3e 100644
--- 
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcStatement.java
+++ 
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcStatement.java
@@ -19,11 +19,16 @@ package org.apache.arrow.adbc.driver.jdbc;
 
 import java.io.IOException;
 import java.sql.Connection;
+import java.sql.ParameterMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
+import org.apache.arrow.adapter.jdbc.JdbcFieldInfo;
+import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
 import org.apache.arrow.adbc.core.AdbcException;
 import org.apache.arrow.adbc.core.AdbcStatement;
 import org.apache.arrow.adbc.core.AdbcStatusCode;
@@ -34,7 +39,9 @@ import org.apache.arrow.memory.BufferAllocator;
 import org.apache.arrow.util.AutoCloseables;
 import org.apache.arrow.vector.VectorSchemaRoot;
 import org.apache.arrow.vector.ipc.ArrowReader;
+import org.apache.arrow.vector.types.pojo.ArrowType;
 import org.apache.arrow.vector.types.pojo.Field;
+import org.apache.arrow.vector.types.pojo.Schema;
 
 public class JdbcStatement implements AdbcStatement {
   private final BufferAllocator allocator;
@@ -227,6 +234,33 @@ public class JdbcStatement implements AdbcStatement {
     return reader;
   }
 
+  @Override
+  public Schema getParameterSchema() throws AdbcException {
+    if (statement instanceof PreparedStatement) {
+      final PreparedStatement preparedStatement = (PreparedStatement) 
statement;
+      try {
+        final ParameterMetaData md = preparedStatement.getParameterMetaData();
+        final List<Field> fields = new ArrayList<>(md.getParameterCount());
+        for (int i = 0; i < md.getParameterCount(); i++) {
+          final int paramIndex = i + 1;
+          JdbcFieldInfo fieldInfo =
+              new JdbcFieldInfo(
+                  md.getParameterType(paramIndex),
+                  md.getPrecision(paramIndex),
+                  md.getScale(paramIndex));
+          ArrowType arrowType =
+              JdbcToArrowUtils.getArrowTypeFromJdbcType(
+                  fieldInfo, JdbcToArrowUtils.getUtcCalendar());
+          fields.add(Field.nullable("", arrowType));
+        }
+        return new Schema(fields);
+      } catch (SQLException e) {
+        throw new RuntimeException(e);
+      }
+    }
+    throw AdbcException.invalidState("[JDBC] Must call prepare() before 
getParameterSchema()");
+  }
+
   @Override
   public void prepare() throws AdbcException {
     try {
diff --git a/java/driver/validation/pom.xml b/java/driver/validation/pom.xml
index d686350..e0008d4 100644
--- a/java/driver/validation/pom.xml
+++ b/java/driver/validation/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
 
diff --git 
a/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractStatementTest.java
 
b/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractStatementTest.java
index c6fc97c..ea5c84c 100644
--- 
a/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractStatementTest.java
+++ 
b/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractStatementTest.java
@@ -244,4 +244,15 @@ public abstract class AbstractStatementTest {
       }
     }
   }
+
+  @Test
+  public void getParameterSchema() throws Exception {
+    util.ingestTableIntsStrs(allocator, connection, tableName);
+    try (final AdbcStatement stmt = connection.createStatement()) {
+      stmt.setSqlQuery(String.format("SELECT * FROM %s WHERE INTS = ?", 
tableName));
+      stmt.prepare();
+      final Schema paramsSchema = stmt.getParameterSchema();
+      assertThat(paramsSchema.getFields().size()).isEqualTo(1);
+    }
+  }
 }
diff --git a/java/pom.xml b/java/pom.xml
index fc9bcea..1ab451f 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -20,25 +20,16 @@
 
   <groupId>org.apache.arrow.adbc</groupId>
   <artifactId>arrow-adbc-java-root</artifactId>
-  <version>9.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Apache Arrow ADBC Java Root POM</name>
   <description>Apache Arrow is open source, in-memory columnar data structures 
and low-overhead messaging</description>
   <url>https://arrow.apache.org/</url>
 
-  <!-- Get nightly Arrow for now to pick up bug fixes -->
-  <repositories>
-    <repository>
-      <id>arrow-apache-nightlies</id>
-      <url>https://nightlies.apache.org/arrow/java</url>
-    </repository>
-  </repositories>
-
   <properties>
-    <!-- Nightly build 2022/07/11 -->
-    <dep.arrow.version>9.0.0.dev363</dep.arrow.version>
-    <adbc.version>9.0.0-SNAPSHOT</adbc.version>
+    <dep.arrow.version>9.0.0</dep.arrow.version>
+    <adbc.version>10.0.0-SNAPSHOT</adbc.version>
   </properties>
 
   <scm>
diff --git a/java/sql/pom.xml b/java/sql/pom.xml
index 5009d67..5044089 100644
--- a/java/sql/pom.xml
+++ b/java/sql/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>arrow-adbc-java-root</artifactId>
     <groupId>org.apache.arrow.adbc</groupId>
-    <version>9.0.0-SNAPSHOT</version>
+    <version>10.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>adbc-sql</artifactId>

Reply via email to