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>