This is an automated email from the ASF dual-hosted git repository.

eladkal pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new ea5bb8a9988 Fixed resolving of dialect name when host of JdbcHook is 
an JDBC URL (#54446)
ea5bb8a9988 is described below

commit ea5bb8a9988f51ac2e6639fb6faefe2e234dafcc
Author: David Blain <[email protected]>
AuthorDate: Thu Aug 14 13:35:21 2025 +0200

    Fixed resolving of dialect name when host of JdbcHook is an JDBC URL 
(#54446)
    
    * fix: Make sure dialect names can also be resolved if host is an JDBC url
    
    * refactor: Reformatted test_dialect_name_when_host_is_jdbc_url
    
    ---------
    
    Co-authored-by: David Blain <[email protected]>
---
 .../sql/src/airflow/providers/common/sql/hooks/sql.py |  2 +-
 .../jdbc/src/airflow/providers/jdbc/hooks/jdbc.py     |  9 ++++++---
 providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py     | 19 +++++++++++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py 
b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
index 7dbda88aa93..21c6a165ca7 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py
@@ -332,7 +332,7 @@ class DbApiHook(BaseHook):
     def dialect_name(self) -> str:
         try:
             return make_url(self.get_uri()).get_dialect().name
-        except (ArgumentError, NoSuchModuleError):
+        except (ArgumentError, NoSuchModuleError, ValueError):
             config = self.connection_extra
             sqlalchemy_scheme = config.get("sqlalchemy_scheme")
             if sqlalchemy_scheme:
diff --git a/providers/jdbc/src/airflow/providers/jdbc/hooks/jdbc.py 
b/providers/jdbc/src/airflow/providers/jdbc/hooks/jdbc.py
index 7f6f2aeedc5..219311ae269 100644
--- a/providers/jdbc/src/airflow/providers/jdbc/hooks/jdbc.py
+++ b/providers/jdbc/src/airflow/providers/jdbc/hooks/jdbc.py
@@ -25,7 +25,6 @@ from typing import TYPE_CHECKING, Any, cast
 from urllib.parse import quote_plus, urlencode
 
 import jaydebeapi
-import jpype
 from sqlalchemy.engine import URL
 
 from airflow.exceptions import AirflowException
@@ -210,7 +209,9 @@ class JdbcHook(DbApiHook):
         :param conn: The connection.
         :param autocommit: The connection's autocommit setting.
         """
-        with suppress_and_warn(jaydebeapi.Error, jpype.JException):
+        from jpype import JException
+
+        with suppress_and_warn(jaydebeapi.Error, JException):
             conn.jconn.setAutoCommit(autocommit)
 
     def get_autocommit(self, conn: jaydebeapi.Connection) -> bool:
@@ -222,7 +223,9 @@ class JdbcHook(DbApiHook):
             to True on the connection. False if it is either not set, set to
             False, or the connection does not support auto-commit.
         """
-        with suppress_and_warn(jaydebeapi.Error, jpype.JException):
+        from jpype import JException
+
+        with suppress_and_warn(jaydebeapi.Error, JException):
             return conn.jconn.getAutoCommit()
 
         # This is reachable when the driver does not support autocommit then 
exceptions raised above are
diff --git a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py 
b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
index 76b3c9a6eca..b7cd12d6ff9 100644
--- a/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
+++ b/providers/jdbc/tests/unit/jdbc/hooks/test_jdbc.py
@@ -281,6 +281,25 @@ class TestJdbcHook:
 
         assert jdbc_hook.dialect_name == "hana"
 
+    def test_dialect_name_when_host_is_jdbc_url(self):
+        jdbc_hook = get_hook(
+            conn_params=dict(
+                extra={
+                    "driver_class": "com.sap.db.jdbc.Driver",
+                    "driver_path": "/usr/local/lib/java/ngdbc.jar",
+                    "placeholder": "?",
+                    "sqlalchemy_scheme": "hana",
+                    "replace_statement_format": "UPSERT {} {} VALUES ({}) WITH 
PRIMARY KEY",
+                }
+            ),
+            conn_type="jdbc",
+            login=None,
+            password=None,
+            host="jdbc:sap://localhost:30015",
+        )
+
+        assert jdbc_hook.dialect_name == "hana"
+
     def test_get_conn_thread_safety(self):
         mock_conn = MagicMock()
         open_connections = 0

Reply via email to