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