This is an automated email from the ASF dual-hosted git repository.
pierrejeambrun 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 63be7a6be9b Fix dag_display_name property bypass for DagStats query
(#64256)
63be7a6be9b is described below
commit 63be7a6be9b9d56bf2e1b341588be82e6f1e7905
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Thu Mar 26 13:16:16 2026 +0100
Fix dag_display_name property bypass for DagStats query (#64256)
---
airflow-core/src/airflow/api_fastapi/common/db/dag_runs.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/airflow-core/src/airflow/api_fastapi/common/db/dag_runs.py
b/airflow-core/src/airflow/api_fastapi/common/db/dag_runs.py
index 72565c45ef2..f9ae3d6c3b6 100644
--- a/airflow-core/src/airflow/api_fastapi/common/db/dag_runs.py
+++ b/airflow-core/src/airflow/api_fastapi/common/db/dag_runs.py
@@ -35,15 +35,18 @@ from airflow.models.taskinstancehistory import
TaskInstanceHistory
if TYPE_CHECKING:
from sqlalchemy.orm import Session
+# Use the hybrid_property for dag_display_name so the CASE WHEN fallback to
dag_id
+# is applied when dag_display_name is NULL. Using __table__.c would return
raw NULLs
+# and crash DagStatsResponse validation
(https://github.com/apache/airflow/issues/64247).
dagruns_select_with_state_count = (
- select(
+ select( # type: ignore[call-overload]
DagRun.__table__.c.dag_id,
DagRun.__table__.c.state,
- DagModel.__table__.c.dag_display_name,
+ DagModel.dag_display_name,
func.count(DagRun.__table__.c.state).label("count"),
)
.join(DagModel, DagRun.__table__.c.dag_id == DagModel.__table__.c.dag_id)
- .group_by(DagRun.__table__.c.dag_id, DagRun.__table__.c.state,
DagModel.__table__.c.dag_display_name)
+ .group_by(DagRun.__table__.c.dag_id, DagRun.__table__.c.state,
DagModel.dag_display_name)
.order_by(DagRun.__table__.c.dag_id)
)