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"),
         [

Reply via email to