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 698ae6b2c feat!(java/core): declare close to throw AdbcException
(#4451)
698ae6b2c is described below
commit 698ae6b2c474b7b1ec9e14ddaee5f3f8db3a0e97
Author: David Li <[email protected]>
AuthorDate: Wed Jul 8 00:12:41 2026 -0700
feat!(java/core): declare close to throw AdbcException (#4451)
This makes the API more consistent: you only need to handle one checked
exception type.
This is a breaking change.
---
.../main/java/org/apache/arrow/adbc/core/AdbcConnection.java | 3 +++
.../src/main/java/org/apache/arrow/adbc/core/AdbcDatabase.java | 3 +++
.../main/java/org/apache/arrow/adbc/core/AdbcStatement.java | 3 +++
.../arrow/adbc/driver/flightsql/FlightSqlConnection.java | 8 ++++++--
.../apache/arrow/adbc/driver/flightsql/FlightSqlDatabase.java | 2 +-
.../apache/arrow/adbc/driver/flightsql/FlightSqlStatement.java | 9 +++++++--
.../java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java | 10 ++++++++--
.../apache/arrow/adbc/driver/jdbc/JdbcDataSourceDatabase.java | 10 ++++++++--
.../java/org/apache/arrow/adbc/driver/jdbc/JdbcStatement.java | 10 ++++++++--
9 files changed, 47 insertions(+), 11 deletions(-)
diff --git
a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcConnection.java
b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcConnection.java
index ab650ec40..fef9bfa99 100644
--- a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcConnection.java
+++ b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcConnection.java
@@ -459,4 +459,7 @@ public interface AdbcConnection extends AutoCloseable,
AdbcOptions {
default void setIsolationLevel(IsolationLevel level) throws AdbcException {
throw AdbcException.notImplemented("Connection does not support setting
isolation level");
}
+
+ @Override
+ void close() throws AdbcException;
}
diff --git
a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcDatabase.java
b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcDatabase.java
index 723acfc0d..73f1579e0 100644
--- a/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcDatabase.java
+++ b/java/core/src/main/java/org/apache/arrow/adbc/core/AdbcDatabase.java
@@ -27,4 +27,7 @@ package org.apache.arrow.adbc.core;
public interface AdbcDatabase extends AutoCloseable, AdbcOptions {
/** Create a new connection to the database. */
AdbcConnection connect() throws AdbcException;
+
+ @Override
+ void close() throws AdbcException;
}
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 ba7333684..49087103d 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
@@ -285,4 +285,7 @@ public interface AdbcStatement extends AutoCloseable,
AdbcOptions {
+ '}';
}
}
+
+ @Override
+ void close() throws AdbcException;
}
diff --git
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlConnection.java
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlConnection.java
index f099cb64c..9f36c9024 100644
---
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlConnection.java
+++
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlConnection.java
@@ -204,9 +204,13 @@ public class FlightSqlConnection implements AdbcConnection
{
}
@Override
- public void close() throws Exception {
+ public void close() throws AdbcException {
clientCache.invalidateAll();
- AutoCloseables.close(client, allocator);
+ try {
+ AutoCloseables.close(client, allocator);
+ } catch (Exception e) {
+ throw AdbcException.internal("[Flight SQL] Failed to close
connection").withCause(e);
+ }
}
@Override
diff --git
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlDatabase.java
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlDatabase.java
index af8221d6b..e40326ef4 100644
---
a/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlDatabase.java
+++
b/java/driver/flight-sql/src/main/java/org/apache/arrow/adbc/driver/flightsql/FlightSqlDatabase.java
@@ -76,7 +76,7 @@ public final class FlightSqlDatabase implements AdbcDatabase {
}
@Override
- public void close() throws Exception {}
+ public void close() throws AdbcException {}
@Override
public String toString() {
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 983c1927a..dd3ba1f28 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
@@ -309,10 +309,15 @@ public class FlightSqlStatement implements AdbcStatement {
}
@Override
- public void close() throws Exception {
+ public void close() throws AdbcException {
// TODO(https://github.com/apache/arrow/issues/39814): this is annotated
wrongly upstream
if (preparedStatement != null) {
- AutoCloseables.close(preparedStatement);
+ try {
+ AutoCloseables.close(preparedStatement);
+ } catch (Exception e) {
+ throw AdbcException.internal("[Flight SQL] Could not close prepared
statement")
+ .withCause(e);
+ }
}
}
diff --git
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
index 2987815d1..a0bdd23cf 100644
---
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
+++
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
@@ -508,8 +508,14 @@ public class JdbcConnection implements AdbcConnection {
}
@Override
- public void close() throws Exception {
- AutoCloseables.close(connection, allocator);
+ public void close() throws AdbcException {
+ try {
+ AutoCloseables.close(connection, allocator);
+ } catch (Exception e) {
+ throw AdbcException.internal(
+ JdbcDriverUtil.prefixExceptionMessage("Could not close
connection"))
+ .withCause(e);
+ }
}
private void checkAutoCommit() throws AdbcException, SQLException {
diff --git
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcDataSourceDatabase.java
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcDataSourceDatabase.java
index 2f6b7154c..d090ec33c 100644
---
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcDataSourceDatabase.java
+++
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcDataSourceDatabase.java
@@ -77,9 +77,15 @@ public final class JdbcDataSourceDatabase implements
AdbcDatabase {
}
@Override
- public void close() throws Exception {
+ public void close() throws AdbcException {
if (connection != null) {
- connection.close();
+ try {
+ connection.close();
+ } catch (Exception e) {
+ throw AdbcException.internal(
+ JdbcDriverUtil.prefixExceptionMessage("Could not close
database"))
+ .withCause(e);
+ }
}
connection = null;
}
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 339c31adc..d825cd7b8 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
@@ -371,8 +371,14 @@ public class JdbcStatement implements AdbcStatement {
}
@Override
- public void close() throws Exception {
- AutoCloseables.close(reader, resultSet, statement);
+ public void close() throws AdbcException {
+ try {
+ AutoCloseables.close(reader, resultSet, statement);
+ } catch (Exception e) {
+ throw AdbcException.internal(
+ JdbcDriverUtil.prefixExceptionMessage("Could not close
statement"))
+ .withCause(e);
+ }
}
private static final class BulkState {