This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new bb45fb8275 docs(upgrading): document RecursiveQuery schema field in
upgrade guide (#23991)
bb45fb8275 is described below
commit bb45fb8275bf6370923ac40bfb3dd5712b640e97
Author: Alvaro Balbin <[email protected]>
AuthorDate: Sat Aug 15 11:16:18 2026 +0000
docs(upgrading): document RecursiveQuery schema field in upgrade guide
(#23991)
Adding the `schema` field to `RecursiveQuery` broke downstream code that
built the node with a struct literal, and the change was never written
up for people upgrading. I added an upgrade guide entry for 55.0.0 that
describes what changed, notes it also shipped in 54.1.0 so users on the
54 series find it, and shows how to move to `RecursiveQuery::try_new`.
It is documentation only, so whether to revert the change on `branch-54`
for 54.2.0 is still an open question.
I pushed this to my fork first and the project's own CI workflows pass
on the commit.
Fixes #23886.
Co-authored-by: Andrew Lamb <[email protected]>
---
docs/source/library-user-guide/upgrading/55.0.0.md | 35 ++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/docs/source/library-user-guide/upgrading/55.0.0.md
b/docs/source/library-user-guide/upgrading/55.0.0.md
index 21def5a1fc..b0f2602d31 100644
--- a/docs/source/library-user-guide/upgrading/55.0.0.md
+++ b/docs/source/library-user-guide/upgrading/55.0.0.md
@@ -1109,6 +1109,41 @@ let plan = deserialize_bytes(&proto_bytes)?;
See [PR #23827](https://github.com/apache/datafusion/pull/23827) for details.
+### `RecursiveQuery` gained a `schema` field
+
+`datafusion_expr::logical_plan::RecursiveQuery` exposed the static (anchor)
term's
+schema to parent plans, which ignored columns that only the recursive term
makes
+nullable. The node now stores the schema reconciled from both terms
explicitly, so
+it can no longer be built with an exhaustive struct literal.
+
+**Who is affected:**
+
+- Code constructing `RecursiveQuery` with a struct literal. This change also
+ shipped in `54.1.0`, so the same migration applies within the `54` series.
+
+**Migration guide:**
+
+Build the node with `RecursiveQuery::try_new`, which computes the schema and
+returns an error if the two terms do not have the same number of columns:
+
+```rust,ignore
+// Before
+let query = RecursiveQuery {
+ name,
+ static_term,
+ recursive_term,
+ is_distinct,
+};
+
+// After
+let query = RecursiveQuery::try_new(name, static_term, recursive_term,
is_distinct)?;
+```
+
+`RecursiveQueryExec::try_new` takes the reconciled schema as its second
argument
+for the same reason, rather than deriving it from its children.
+
+See [PR #22552](https://github.com/apache/datafusion/pull/22552) for details.
+
### `ExecutionPlan::apply_expressions` is now a required method
`apply_expressions` has been added as a **required** method on the
`ExecutionPlan`, `FileSource`, and `DataSource` traits. Any custom
implementation of
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]