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

github-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 0f822cf056 Publish built docs triggered by 
1cc9bcd52e5901f9085864c032c5f51a1932a075
0f822cf056 is described below

commit 0f822cf056e278c7899c69b2e83e03a1bce4ed48
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Nov 24 20:21:40 2025 +0000

    Publish built docs triggered by 1cc9bcd52e5901f9085864c032c5f51a1932a075
---
 _sources/library-user-guide/upgrading.md.txt | 45 ++++++++++++++++++++++++++++
 library-user-guide/upgrading.html            | 36 ++++++++++++++++++++++
 searchindex.js                               |  2 +-
 3 files changed, 82 insertions(+), 1 deletion(-)

diff --git a/_sources/library-user-guide/upgrading.md.txt 
b/_sources/library-user-guide/upgrading.md.txt
index 91ba5acb19..1770ad41a8 100644
--- a/_sources/library-user-guide/upgrading.md.txt
+++ b/_sources/library-user-guide/upgrading.md.txt
@@ -157,6 +157,51 @@ Instead of silently succeeding.
 
 The remove API no longer requires a mutable instance
 
+### FFI crate updates
+
+Many of the structs in the `datafusion-ffi` crate have been updated to allow 
easier
+conversion to the underlying trait types they represent. This simplifies some 
code
+paths, but also provides an additional improvement in cases where library code 
goes
+through a round trip via the foreign function interface.
+
+To update your code, suppose you have a `FFI_SchemaProvider` called 
`ffi_provider`
+and you wish to use this as a `SchemaProvider`. In the old approach you would 
do
+something like:
+
+```rust,ignore
+    let foreign_provider: ForeignSchemaProvider = ffi_provider.into();
+    let foreign_provider = Arc::new(foreign_provider) as Arc<dyn 
SchemaProvider>;
+```
+
+This code should now be written as:
+
+```rust,ignore
+    let foreign_provider: Arc<dyn SchemaProvider + Send> = ffi_provider.into();
+    let foreign_provider = foreign_provider as Arc<dyn SchemaProvider>;
+```
+
+For the case of user defined functions, the updates are similar but you
+may need to change the way you call the creation of the `ScalarUDF`.
+Aggregate and window functions follow the same pattern.
+
+Previously you may write:
+
+```rust,ignore
+    let foreign_udf: ForeignScalarUDF = ffi_udf.try_into()?;
+    let foreign_udf: ScalarUDF = foreign_udf.into();
+```
+
+Instead this should now be:
+
+```rust,ignore
+    let foreign_udf: Arc<dyn ScalarUDFImpl> = ffi_udf.try_into()?;
+    let foreign_udf = ScalarUDF::new_from_shared_impl(foreign_udf);
+```
+
+Additionally, the FFI structure for Scalar UDF's no longer contains a
+`return_type` call. This code was not used since the `ForeignScalarUDF`
+struct implements the `return_field_from_args` instead.
+
 ## DataFusion `51.0.0`
 
 ### `arrow` / `parquet` updated to 57.0.0
diff --git a/library-user-guide/upgrading.html 
b/library-user-guide/upgrading.html
index 9c2632c262..b3f991d153 100644
--- a/library-user-guide/upgrading.html
+++ b/library-user-guide/upgrading.html
@@ -522,6 +522,41 @@ unless they explicitly declare support by overriding the 
method.</p>
 <h3>API change for <code class="docutils literal notranslate"><span 
class="pre">CacheAccessor</span></code> trait<a class="headerlink" 
href="#api-change-for-cacheaccessor-trait" title="Link to this 
heading">#</a></h3>
 <p>The remove API no longer requires a mutable instance</p>
 </section>
+<section id="ffi-crate-updates">
+<h3>FFI crate updates<a class="headerlink" href="#ffi-crate-updates" 
title="Link to this heading">#</a></h3>
+<p>Many of the structs in the <code class="docutils literal notranslate"><span 
class="pre">datafusion-ffi</span></code> crate have been updated to allow easier
+conversion to the underlying trait types they represent. This simplifies some 
code
+paths, but also provides an additional improvement in cases where library code 
goes
+through a round trip via the foreign function interface.</p>
+<p>To update your code, suppose you have a <code class="docutils literal 
notranslate"><span class="pre">FFI_SchemaProvider</span></code> called <code 
class="docutils literal notranslate"><span 
class="pre">ffi_provider</span></code>
+and you wish to use this as a <code class="docutils literal notranslate"><span 
class="pre">SchemaProvider</span></code>. In the old approach you would do
+something like:</p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_provider</span><span class="p">:</span><span 
class="w"> </span><span class="nc">ForeignSchemaProvider</span><span class="w"> 
</span><span class="o">=</span><span class="w"> </span><span 
class="n">ffi_provider</span><span class="p">.</span><span 
class="n">into</span><span class="p">();</span>
+<span class="w">    </span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_provider</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">Arc</span><span 
class="p">::</span><span class="n">new</span><span class="p">(</span><span 
class="n">foreign_provider</span><span class="p">)</span><span class="w"> 
</span><span class="k">as</span><span class="w"> </span><span 
class="n">Arc</span><span class="o">&lt;</span><span class=" [...]
+</pre></div>
+</div>
+<p>This code should now be written as:</p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_provider</span><span class="p">:</span><span 
class="w"> </span><span class="nc">Arc</span><span class="o">&lt;</span><span 
class="k">dyn</span><span class="w"> </span><span 
class="n">SchemaProvider</span><span class="w"> </span><span 
class="o">+</span><span class="w"> </span><span class="nb">Send</span><span 
class="o">&gt;</span><span [...]
+<span class="w">    </span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_provider</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span 
class="n">foreign_provider</span><span class="w"> </span><span 
class="k">as</span><span class="w"> </span><span class="n">Arc</span><span 
class="o">&lt;</span><span class="k">dyn</span><span class="w"> </span><span 
class="n">SchemaProvider</span><span class="o">&gt;</span><span 
class="p">;</span>
+</pre></div>
+</div>
+<p>For the case of user defined functions, the updates are similar but you
+may need to change the way you call the creation of the <code class="docutils 
literal notranslate"><span class="pre">ScalarUDF</span></code>.
+Aggregate and window functions follow the same pattern.</p>
+<p>Previously you may write:</p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_udf</span><span class="p">:</span><span 
class="w"> </span><span class="nc">ForeignScalarUDF</span><span class="w"> 
</span><span class="o">=</span><span class="w"> </span><span 
class="n">ffi_udf</span><span class="p">.</span><span 
class="n">try_into</span><span class="p">()</span><span class="o">?</span><span 
class="p">;</span>
+<span class="w">    </span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_udf</span><span class="p">:</span><span 
class="w"> </span><span class="nc">ScalarUDF</span><span class="w"> 
</span><span class="o">=</span><span class="w"> </span><span 
class="n">foreign_udf</span><span class="p">.</span><span 
class="n">into</span><span class="p">();</span>
+</pre></div>
+</div>
+<p>Instead this should now be:</p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_udf</span><span class="p">:</span><span 
class="w"> </span><span class="nc">Arc</span><span class="o">&lt;</span><span 
class="k">dyn</span><span class="w"> </span><span 
class="n">ScalarUDFImpl</span><span class="o">&gt;</span><span class="w"> 
</span><span class="o">=</span><span class="w"> </span><span 
class="n">ffi_udf</span><span cla [...]
+<span class="w">    </span><span class="kd">let</span><span class="w"> 
</span><span class="n">foreign_udf</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">ScalarUDF</span><span 
class="p">::</span><span class="n">new_from_shared_impl</span><span 
class="p">(</span><span class="n">foreign_udf</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>Additionally, the FFI structure for Scalar UDF’s no longer contains a
+<code class="docutils literal notranslate"><span 
class="pre">return_type</span></code> call. This code was not used since the 
<code class="docutils literal notranslate"><span 
class="pre">ForeignScalarUDF</span></code>
+struct implements the <code class="docutils literal notranslate"><span 
class="pre">return_field_from_args</span></code> instead.</p>
+</section>
 </section>
 <section id="datafusion-51-0-0">
 <h2>DataFusion <code class="docutils literal notranslate"><span 
class="pre">51.0.0</span></code><a class="headerlink" href="#datafusion-51-0-0" 
title="Link to this heading">#</a></h2>
@@ -1765,6 +1800,7 @@ take care of constructing the <code class="docutils 
literal notranslate"><span c
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#planner-now-requires-explicit-opt-in-for-within-group-syntax">Planner 
now requires explicit opt-in for WITHIN GROUP syntax</a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#aggregateudfimpl-supports-null-handling-clause-now-defaults-to-false"><code
 class="docutils literal notranslate"><span 
class="pre">AggregateUDFImpl::supports_null_handling_clause</span></code> now 
defaults to <code class="docutils literal notranslate"><span 
class="pre">false</span></code></a></li>
 <li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#api-change-for-cacheaccessor-trait">API change for <code class="docutils 
literal notranslate"><span class="pre">CacheAccessor</span></code> 
trait</a></li>
+<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" 
href="#ffi-crate-updates">FFI crate updates</a></li>
 </ul>
 </li>
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" 
href="#datafusion-51-0-0">DataFusion <code class="docutils literal 
notranslate"><span class="pre">51.0.0</span></code></a><ul class="nav 
section-nav flex-column">
diff --git a/searchindex.js b/searchindex.js
index 425d9d6479..527a8887b0 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[60,"op-neq"]],"!~":[[60,"op-re-not-match"]],"!~*":[[60,"op-re-not-match-i"]],"!~~":[[60,"id19"]],"!~~*":[[60,"id20"]],"#":[[60,"op-bit-xor"]],"%":[[60,"op-modulo"]],"&":[[60,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[13,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[60,"op-multiply"]],"+":[[60,"op-plus"]],"-":[[60,"op-minus"]],"/":[[60,"op-divide"]],"<":[[60,"op-lt"]],"<
 [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[60,"op-neq"]],"!~":[[60,"op-re-not-match"]],"!~*":[[60,"op-re-not-match-i"]],"!~~":[[60,"id19"]],"!~~*":[[60,"id20"]],"#":[[60,"op-bit-xor"]],"%":[[60,"op-modulo"]],"&":[[60,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[13,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[60,"op-multiply"]],"+":[[60,"op-plus"]],"-":[[60,"op-minus"]],"/":[[60,"op-divide"]],"<":[[60,"op-lt"]],"<
 [...]
\ No newline at end of file


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

Reply via email to