This is an automated email from the ASF dual-hosted git repository.

github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new d077c16559 Publish built docs triggered by 
bb45fb8275bf6370923ac40bfb3dd5712b640e97
d077c16559 is described below

commit d077c16559390e9b4cea1e54082ae66cefcdd785
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Aug 15 11:25:40 2026 +0000

    Publish built docs triggered by bb45fb8275bf6370923ac40bfb3dd5712b640e97
---
 .../library-user-guide/upgrading/55.0.0.md.txt     | 35 ++++++++++++++++++++++
 library-user-guide/upgrading/55.0.0.html           | 31 +++++++++++++++++++
 searchindex.js                                     |  2 +-
 3 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/_sources/library-user-guide/upgrading/55.0.0.md.txt 
b/_sources/library-user-guide/upgrading/55.0.0.md.txt
index 21def5a1fc..b0f2602d31 100644
--- a/_sources/library-user-guide/upgrading/55.0.0.md.txt
+++ b/_sources/library-user-guide/upgrading/55.0.0.md.txt
@@ -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
diff --git a/library-user-guide/upgrading/55.0.0.html 
b/library-user-guide/upgrading/55.0.0.html
index d8221cbd53..4946eb4a52 100644
--- a/library-user-guide/upgrading/55.0.0.html
+++ b/library-user-guide/upgrading/55.0.0.html
@@ -1408,6 +1408,36 @@ on a non-future value does not compile:</p>
 </ul>
 <p>See <a class="reference external" 
href="https://github.com/apache/datafusion/pull/23827";>PR #23827</a> for 
details.</p>
 </section>
+<section id="recursivequery-gained-a-schema-field">
+<h3><code class="docutils literal notranslate"><span 
class="pre">RecursiveQuery</span></code> gained a <code class="docutils literal 
notranslate"><span class="pre">schema</span></code> field<a class="headerlink" 
href="#recursivequery-gained-a-schema-field" title="Link to this 
heading">#</a></h3>
+<p><code class="docutils literal notranslate"><span 
class="pre">datafusion_expr::logical_plan::RecursiveQuery</span></code> 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.</p>
+<p><strong>Who is affected:</strong></p>
+<ul class="simple">
+<li><p>Code constructing <code class="docutils literal notranslate"><span 
class="pre">RecursiveQuery</span></code> with a struct literal. This change also
+shipped in <code class="docutils literal notranslate"><span 
class="pre">54.1.0</span></code>, so the same migration applies within the 
<code class="docutils literal notranslate"><span class="pre">54</span></code> 
series.</p></li>
+</ul>
+<p><strong>Migration guide:</strong></p>
+<p>Build the node with <code class="docutils literal notranslate"><span 
class="pre">RecursiveQuery::try_new</span></code>, which computes the schema and
+returns an error if the two terms do not have the same number of columns:</p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="c1">// Before</span>
+<span class="kd">let</span><span class="w"> </span><span 
class="n">query</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">RecursiveQuery</span><span class="w"> 
</span><span class="p">{</span>
+<span class="w">    </span><span class="n">name</span><span class="p">,</span>
+<span class="w">    </span><span class="n">static_term</span><span 
class="p">,</span>
+<span class="w">    </span><span class="n">recursive_term</span><span 
class="p">,</span>
+<span class="w">    </span><span class="n">is_distinct</span><span 
class="p">,</span>
+<span class="p">};</span>
+
+<span class="c1">// After</span>
+<span class="kd">let</span><span class="w"> </span><span 
class="n">query</span><span class="w"> </span><span class="o">=</span><span 
class="w"> </span><span class="n">RecursiveQuery</span><span 
class="p">::</span><span class="n">try_new</span><span class="p">(</span><span 
class="n">name</span><span class="p">,</span><span class="w"> </span><span 
class="n">static_term</span><span class="p">,</span><span class="w"> 
</span><span class="n">recursive_term</span><span class="p">,</span><span c 
[...]
+</pre></div>
+</div>
+<p><code class="docutils literal notranslate"><span 
class="pre">RecursiveQueryExec::try_new</span></code> takes the reconciled 
schema as its second argument
+for the same reason, rather than deriving it from its children.</p>
+<p>See <a class="reference external" 
href="https://github.com/apache/datafusion/pull/22552";>PR #22552</a> for 
details.</p>
+</section>
 <section id="executionplan-apply-expressions-is-now-a-required-method">
 <h3><code class="docutils literal notranslate"><span 
class="pre">ExecutionPlan::apply_expressions</span></code> is now a required 
method<a class="headerlink" 
href="#executionplan-apply-expressions-is-now-a-required-method" title="Link to 
this heading">#</a></h3>
 <p><code class="docutils literal notranslate"><span 
class="pre">apply_expressions</span></code> has been added as a 
<strong>required</strong> method on the <code class="docutils literal 
notranslate"><span class="pre">ExecutionPlan</span></code>, <code 
class="docutils literal notranslate"><span 
class="pre">FileSource</span></code>, and <code class="docutils literal 
notranslate"><span class="pre">DataSource</span></code> traits. Any custom 
implementation of
@@ -1686,6 +1716,7 @@ changes.</p>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#ffi-logicalextensioncodec-task-ctx-provider-is-now-private"><code 
class="docutils literal notranslate"><span 
class="pre">FFI_LogicalExtensionCodec::task_ctx_provider</span></code> is now 
private</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#unused-async-removed-from-several-public-functions">Unused <code 
class="docutils literal notranslate"><span class="pre">async</span></code> 
removed from several public functions</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#movingmin-and-movingmax-changed-to-pub-crate"><code class="docutils 
literal notranslate"><span class="pre">MovingMin</span></code> and <code 
class="docutils literal notranslate"><span class="pre">MovingMax</span></code> 
changed to <code class="docutils literal notranslate"><span 
class="pre">pub(crate)</span></code></a></li>
+<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#recursivequery-gained-a-schema-field"><code class="docutils literal 
notranslate"><span class="pre">RecursiveQuery</span></code> gained a <code 
class="docutils literal notranslate"><span class="pre">schema</span></code> 
field</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#executionplan-apply-expressions-is-now-a-required-method"><code 
class="docutils literal notranslate"><span 
class="pre">ExecutionPlan::apply_expressions</span></code> is now a required 
method</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#windowexpr-evaluate-stateful-now-takes-a-windowevalcontext"><code 
class="docutils literal notranslate"><span 
class="pre">WindowExpr::evaluate_stateful</span></code> now takes a <code 
class="docutils literal notranslate"><span 
class="pre">WindowEvalContext</span></code></a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#partitionbatchstate-most-recent-row-removed"><code class="docutils 
literal notranslate"><span 
class="pre">PartitionBatchState::most_recent_row</span></code> removed</a></li>
diff --git a/searchindex.js b/searchindex.js
index cecb308e46..3f49d97860 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[76,"op-neq"]],"!~":[[76,"op-re-not-match"]],"!~*":[[76,"op-re-not-match-i"]],"!~~":[[76,"id19"]],"!~~*":[[76,"id20"]],"#":[[76,"op-bit-xor"]],"%":[[76,"op-modulo"]],"&":[[76,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[16,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[76,"op-multiply"]],"+":[[76,"op-plus"]],"-":[[76,"op-minus"]],"/":[[76,"op-divide"]],"1.
 Array Literal Con [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[76,"op-neq"]],"!~":[[76,"op-re-not-match"]],"!~*":[[76,"op-re-not-match-i"]],"!~~":[[76,"id19"]],"!~~*":[[76,"id20"]],"#":[[76,"op-bit-xor"]],"%":[[76,"op-modulo"]],"&":[[76,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[16,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[76,"op-multiply"]],"+":[[76,"op-plus"]],"-":[[76,"op-minus"]],"/":[[76,"op-divide"]],"1.
 Array Literal Con [...]
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to