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 61c9236a fix(java/driver/jdbc): fix connection leak in 
`JdbcDataSourceDatabase` constructor  (#1418)
61c9236a is described below

commit 61c9236a822b01748dd66dfa4d340a6d236d416e
Author: rtadepalli <[email protected]>
AuthorDate: Wed Jan 3 08:34:58 2024 -0500

    fix(java/driver/jdbc): fix connection leak in `JdbcDataSourceDatabase` 
constructor  (#1418)
    
    I think there is a connection leak in the constructor for
    `JdbcDataSourceDatabase` where we're obtaining a connection in the
    constructor but we're obtaining another one in the `connect` method
    using the appropriate username/password. We can remove this and fix the
    bug as described in #1415.
    
    Fixes #1415.
---
 .../adbc/driver/jdbc/JdbcDataSourceDatabase.java   | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

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 4059759b..6348e05c 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
@@ -34,8 +34,8 @@ public final class JdbcDataSourceDatabase implements 
AdbcDatabase {
   private final String username;
   private final String password;
   private final JdbcQuirks quirks;
-  private final Connection connection;
   private final AtomicInteger counter;
+  private Connection connection;
 
   JdbcDataSourceDatabase(
       BufferAllocator allocator,
@@ -49,22 +49,19 @@ public final class JdbcDataSourceDatabase implements 
AdbcDatabase {
     this.username = username;
     this.password = password;
     this.quirks = Objects.requireNonNull(quirks);
-    try {
-      this.connection = dataSource.getConnection();
-    } catch (SQLException e) {
-      throw JdbcDriverUtil.fromSqlException(e);
-    }
+    this.connection = null;
     this.counter = new AtomicInteger();
   }
 
   @Override
   public AdbcConnection connect() throws AdbcException {
-    final Connection connection;
     try {
-      if (username != null && password != null) {
-        connection = dataSource.getConnection(username, password);
-      } else {
-        connection = dataSource.getConnection();
+      if (connection == null) {
+        if (username != null && password != null) {
+          connection = dataSource.getConnection(username, password);
+        } else {
+          connection = dataSource.getConnection();
+        }
       }
     } catch (SQLException e) {
       throw JdbcDriverUtil.fromSqlException(e);
@@ -79,7 +76,10 @@ public final class JdbcDataSourceDatabase implements 
AdbcDatabase {
 
   @Override
   public void close() throws Exception {
-    connection.close();
+    if (connection != null) {
+      connection.close();
+    }
+    connection = null;
   }
 
   @Override

Reply via email to