This is an automated email from the ASF dual-hosted git repository.
potiuk 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 aa4aeef0a14 Reject a DataSourceConfig with no uri or format in
DataFusionEngine (#73287)
aa4aeef0a14 is described below
commit aa4aeef0a1443ab7326ce933e25dc6e7ed920874
Author: Pankaj Singh <[email protected]>
AuthorDate: Sun Sep 20 22:07:51 2026 +0530
Reject a DataSourceConfig with no uri or format in DataFusionEngine (#73287)
Follow-up per [review
feedback](https://github.com/apache/airflow/pull/73273#pullrequestreview-5235383645)
on #73273.
`LLMSQLOperator`, `DataFusionToolset`, and `AnalyticsOperator` hand
`DataFusionEngine.register_datasource` whatever `DataSourceConfig` the caller
supplies, unlike `LLMSchemaCompareOperator` which checks the connection kind
first. A plain-database-table config reaching any of them failed deep inside
credential resolution with a confusing `Unknown connection type` error instead
of a clear message. `register_datasource` now rejects that shape immediately.
---
.../sql/src/airflow/providers/common/sql/datafusion/engine.py | 6 ++++++
.../common/sql/tests/unit/common/sql/datafusion/test_engine.py | 7 +++++++
2 files changed, 13 insertions(+)
diff --git
a/providers/common/sql/src/airflow/providers/common/sql/datafusion/engine.py
b/providers/common/sql/src/airflow/providers/common/sql/datafusion/engine.py
index 207ab3e0f77..f35bd5786ab 100644
--- a/providers/common/sql/src/airflow/providers/common/sql/datafusion/engine.py
+++ b/providers/common/sql/src/airflow/providers/common/sql/datafusion/engine.py
@@ -51,6 +51,12 @@ class DataFusionEngine(LoggingMixin):
if not isinstance(datasource_config, DataSourceConfig):
raise ValueError("datasource_config must be of type
DataSourceConfig")
+ if not datasource_config.is_table_provider and
datasource_config.storage_type is None:
+ raise ValueError(
+ f"DataSourceConfig for table {datasource_config.table_name!r}
has no uri or format; "
+ "DataFusionEngine only registers object-store or
catalog-managed sources."
+ )
+
if not datasource_config.is_table_provider:
if datasource_config.storage_type == StorageType.LOCAL:
connection_config = None
diff --git
a/providers/common/sql/tests/unit/common/sql/datafusion/test_engine.py
b/providers/common/sql/tests/unit/common/sql/datafusion/test_engine.py
index 21287cfa075..5e78e0c7761 100644
--- a/providers/common/sql/tests/unit/common/sql/datafusion/test_engine.py
+++ b/providers/common/sql/tests/unit/common/sql/datafusion/test_engine.py
@@ -71,6 +71,13 @@ class TestDataFusionEngine:
with pytest.raises(ValueError, match="datasource_config must be of
type DataSourceConfig"):
engine.register_datasource("invalid")
+ def test_register_datasource_rejects_plain_database_table(self):
+ engine = DataFusionEngine()
+ datasource_config = DataSourceConfig(conn_id="postgres_default",
table_name="test_table")
+
+ with pytest.raises(ValueError, match="has no uri or format"):
+ engine.register_datasource(datasource_config)
+
@pytest.mark.parametrize(
("storage_type", "format", "scheme"),
[