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 d26d36d567 Publish built docs triggered by 
7cbc6b4383e6998b6a3a94ce1018a01e03c50be8
d26d36d567 is described below

commit d26d36d567c18e5b9b74d87423e585b661148d0e
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Mar 26 12:09:16 2026 +0000

    Publish built docs triggered by 7cbc6b4383e6998b6a3a94ce1018a01e03c50be8
---
 .../functions/adding-udfs.md.txt                   | 11 ------
 .../library-user-guide/upgrading/54.0.0.md.txt     | 44 ++++++++++++++++++++++
 library-user-guide/functions/adding-udfs.html      |  6 ---
 library-user-guide/upgrading/54.0.0.html           | 39 +++++++++++++++++++
 searchindex.js                                     |  2 +-
 5 files changed, 84 insertions(+), 18 deletions(-)

diff --git a/_sources/library-user-guide/functions/adding-udfs.md.txt 
b/_sources/library-user-guide/functions/adding-udfs.md.txt
index 48162d6abc..15db731ca3 100644
--- a/_sources/library-user-guide/functions/adding-udfs.md.txt
+++ b/_sources/library-user-guide/functions/adding-udfs.md.txt
@@ -98,7 +98,6 @@ impl AddOne {
 
 /// Implement the ScalarUDFImpl trait for AddOne
 impl ScalarUDFImpl for AddOne {
-   fn as_any(&self) -> &dyn Any { self }
    fn name(&self) -> &str { "add_one" }
    fn signature(&self) -> &Signature { &self.signature }
    fn return_type(&self, args: &[DataType]) -> Result<DataType> {
@@ -161,7 +160,6 @@ We now need to register the function with DataFusion so 
that it can be used in t
 #
 # /// Implement the ScalarUDFImpl trait for AddOne
 # impl ScalarUDFImpl for AddOne {
-#    fn as_any(&self) -> &dyn Any { self }
 #    fn name(&self) -> &str { "add_one" }
 #    fn signature(&self) -> &Signature { &self.signature }
 #    fn return_type(&self, args: &[DataType]) -> Result<DataType> {
@@ -411,10 +409,6 @@ impl AsyncUpper {
 /// Implement the normal ScalarUDFImpl trait for AsyncUpper
 #[async_trait]
 impl ScalarUDFImpl for AsyncUpper {
-    fn as_any(&self) -> &dyn Any {
-        self
-    }
-
     fn name(&self) -> &str {
         "async_upper"
     }
@@ -514,10 +508,6 @@ We can now transfer the async UDF into the normal scalar 
using `into_scalar_udf`
 #
 # #[async_trait]
 # impl ScalarUDFImpl for AsyncUpper {
-#     fn as_any(&self) -> &dyn Any {
-#         self
-#     }
-#
 #     fn name(&self) -> &str {
 #         "async_upper"
 #     }
@@ -641,7 +631,6 @@ impl PowerFunction {
 }
 
 impl ScalarUDFImpl for PowerFunction {
-    fn as_any(&self) -> &dyn Any { self }
     fn name(&self) -> &str { "power" }
     fn signature(&self) -> &Signature { &self.signature }
 
diff --git a/_sources/library-user-guide/upgrading/54.0.0.md.txt 
b/_sources/library-user-guide/upgrading/54.0.0.md.txt
index 77b4fb6f71..fcc7aed293 100644
--- a/_sources/library-user-guide/upgrading/54.0.0.md.txt
+++ b/_sources/library-user-guide/upgrading/54.0.0.md.txt
@@ -122,3 +122,47 @@ stats.column_statistics[0].min_value = ...;
 let mut stats = Arc::unwrap_or_clone(plan.partition_statistics(None)?);
 stats.column_statistics[0].min_value = ...;
 ```
+
+### Remove `as_any` from `ScalarUDFImpl`
+
+Now that we have a more recent minimum version of Rust, we can take advantage 
of
+trait upcasting for Scalar UDFs. This reduces the amount of boilerplate code 
that
+users need to do to create a UDF. In your implementations, you can simply 
remove
+this function. The below diff is an example from the associated PR
+
+```diff
+ impl ScalarUDFImpl for MyEq {
+-    fn as_any(&self) -> &dyn Any {
+-        self
+-    }
+-
+     fn name(&self) -> &str {
+         "my_eq"
+     }
+
+     ...
+ }
+```
+
+If you have a function that is downcasting a scalar function, you can replace
+the call to `.as_any()` with `.as_ref() as &dyn Any`. For example
+
+**Before:**
+
+```rust,ignore
+let is_async = func
+                .inner()
+                .as_any()
+                .downcast_ref::<AsyncScalarUDF>()
+                .is_some();
+```
+
+**After:**
+
+```rust,ignore
+let is_async = (func
+                .inner()
+                .as_ref() as &dyn Any)
+                .downcast_ref::<AsyncScalarUDF>()
+                .is_some();
+```
diff --git a/library-user-guide/functions/adding-udfs.html 
b/library-user-guide/functions/adding-udfs.html
index 5d54126d55..14cdfac78d 100644
--- a/library-user-guide/functions/adding-udfs.html
+++ b/library-user-guide/functions/adding-udfs.html
@@ -507,7 +507,6 @@ For production code, you may want to check, for example, 
that <code class="docut
 
 <span class="sd">/// Implement the ScalarUDFImpl trait for AddOne</span>
 <span class="k">impl</span><span class="w"> </span><span 
class="n">ScalarUDFImpl</span><span class="w"> </span><span 
class="k">for</span><span class="w"> </span><span class="n">AddOne</span><span 
class="w"> </span><span class="p">{</span>
-<span class="w">   </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">as_any</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="nc">dyn</span><span class="w"> </span><span 
class="n">Any</span><span class="w"> </span><span class="p">{</span><span 
class="w"> </span><span class="bp">self</span>< [...]
 <span class="w">   </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">name</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="kt">str</span><span class="w"> </span><span 
class="p">{</span><span class="w"> </span><span 
class="s">&quot;add_one&quot;</span><span class="w"> </span><span class="p" 
[...]
 <span class="w">   </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">signature</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="nc">Signature</span><span class="w"> 
</span><span class="p">{</span><span class="w"> </span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p [...]
 <span class="w">   </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">return_type</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span 
class="w"> </span><span class="n">args</span><span class="p">:</span><span 
class="w"> </span><span class="kp">&amp;</span><span class="p">[</span><span 
class="n">DataType</span><span class="p">])</span><span class="w"> </span><span 
class="p">-&gt;</span><span class="w"> < [...]
@@ -684,10 +683,6 @@ UDF.</p>
 <span class="sd">/// Implement the normal ScalarUDFImpl trait for 
AsyncUpper</span>
 <span class="cp">#[async_trait]</span>
 <span class="k">impl</span><span class="w"> </span><span 
class="n">ScalarUDFImpl</span><span class="w"> </span><span 
class="k">for</span><span class="w"> </span><span 
class="n">AsyncUpper</span><span class="w"> </span><span class="p">{</span>
-<span class="w">    </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">as_any</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="nc">dyn</span><span class="w"> </span><span 
class="n">Any</span><span class="w"> </span><span class="p">{</span>
-<span class="w">        </span><span class="bp">self</span>
-<span class="w">    </span><span class="p">}</span>
-
 <span class="w">    </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">name</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="kt">str</span><span class="w"> </span><span 
class="p">{</span>
 <span class="w">        </span><span class="s">&quot;async_upper&quot;</span>
 <span class="w">    </span><span class="p">}</span>
@@ -801,7 +796,6 @@ UDF.</p>
 <span class="p">}</span>
 
 <span class="k">impl</span><span class="w"> </span><span 
class="n">ScalarUDFImpl</span><span class="w"> </span><span 
class="k">for</span><span class="w"> </span><span 
class="n">PowerFunction</span><span class="w"> </span><span class="p">{</span>
-<span class="w">    </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">as_any</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="nc">dyn</span><span class="w"> </span><span 
class="n">Any</span><span class="w"> </span><span class="p">{</span><span 
class="w"> </span><span class="bp">self</span> [...]
 <span class="w">    </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">name</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="kt">str</span><span class="w"> </span><span 
class="p">{</span><span class="w"> </span><span 
class="s">&quot;power&quot;</span><span class="w"> </span><span class="p"> [...]
 <span class="w">    </span><span class="k">fn</span><span class="w"> 
</span><span class="nf">signature</span><span class="p">(</span><span 
class="o">&amp;</span><span class="bp">self</span><span class="p">)</span><span 
class="w"> </span><span class="p">-&gt;</span><span class="w"> </span><span 
class="kp">&amp;</span><span class="nc">Signature</span><span class="w"> 
</span><span class="p">{</span><span class="w"> </span><span 
class="o">&amp;</span><span class="bp">self</span><span class=" [...]
 
diff --git a/library-user-guide/upgrading/54.0.0.html 
b/library-user-guide/upgrading/54.0.0.html
index 79b873b92b..e9a51801c3 100644
--- a/library-user-guide/upgrading/54.0.0.html
+++ b/library-user-guide/upgrading/54.0.0.html
@@ -510,6 +510,44 @@ to the main branch and are awaiting release in this 
version.</p>
 </pre></div>
 </div>
 </section>
+<section id="remove-as-any-from-scalarudfimpl">
+<h3>Remove <code class="docutils literal notranslate"><span 
class="pre">as_any</span></code> from <code class="docutils literal 
notranslate"><span class="pre">ScalarUDFImpl</span></code><a class="headerlink" 
href="#remove-as-any-from-scalarudfimpl" title="Link to this heading">#</a></h3>
+<p>Now that we have a more recent minimum version of Rust, we can take 
advantage of
+trait upcasting for Scalar UDFs. This reduces the amount of boilerplate code 
that
+users need to do to create a UDF. In your implementations, you can simply 
remove
+this function. The below diff is an example from the associated PR</p>
+<div class="highlight-diff notranslate"><div 
class="highlight"><pre><span></span><span class="w"> </span>impl ScalarUDFImpl 
for MyEq {
+<span class="gd">-    fn as_any(&amp;self) -&gt; &amp;dyn Any {</span>
+<span class="gd">-        self</span>
+<span class="gd">-    }</span>
+<span class="gd">-</span>
+<span class="w"> </span>    fn name(&amp;self) -&gt; &amp;str {
+<span class="w"> </span>        &quot;my_eq&quot;
+<span class="w"> </span>    }
+
+<span class="w"> </span>    ...
+<span class="w"> </span>}
+</pre></div>
+</div>
+<p>If you have a function that is downcasting a scalar function, you can 
replace
+the call to <code class="docutils literal notranslate"><span 
class="pre">.as_any()</span></code> with <code class="docutils literal 
notranslate"><span class="pre">.as_ref()</span> <span class="pre">as</span> 
<span class="pre">&amp;dyn</span> <span class="pre">Any</span></code>. For 
example</p>
+<p><strong>Before:</strong></p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">is_async</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="n">func</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">inner</span><span class="p">()</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">as_any</span><span class="p">()</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">downcast_ref</span><span class="p">::</span><span 
class="o">&lt;</span><span class="n">AsyncScalarUDF</span><span 
class="o">&gt;</span><span class="p">()</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">is_some</span><span class="p">();</span>
+</pre></div>
+</div>
+<p><strong>After:</strong></p>
+<div class="highlight-rust notranslate"><div 
class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> 
</span><span class="n">is_async</span><span class="w"> </span><span 
class="o">=</span><span class="w"> </span><span class="p">(</span><span 
class="n">func</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">inner</span><span class="p">()</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">as_ref</span><span class="p">()</span><span class="w"> </span><span 
class="k">as</span><span class="w"> </span><span class="o">&amp;</span><span 
class="k">dyn</span><span class="w"> </span><span class="n">Any</span><span 
class="p">)</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">downcast_ref</span><span class="p">::</span><span 
class="o">&lt;</span><span class="n">AsyncScalarUDF</span><span 
class="o">&gt;</span><span class="p">()</span>
+<span class="w">                </span><span class="p">.</span><span 
class="n">is_some</span><span class="p">();</span>
+</pre></div>
+</div>
+</section>
 </section>
 </section>
 
@@ -562,6 +600,7 @@ to the main branch and are awaiting release in this 
version.</p>
     <ul class="visible nav section-nav flex-column">
 <li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" 
href="#datafusion-54-0-0">DataFusion 54.0.0</a><ul class="nav section-nav 
flex-column">
 <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="#remove-as-any-from-scalarudfimpl">Remove <code class="docutils literal 
notranslate"><span class="pre">as_any</span></code> from <code class="docutils 
literal notranslate"><span class="pre">ScalarUDFImpl</span></code></a></li>
 </ul>
 </li>
 </ul>
diff --git a/searchindex.js b/searchindex.js
index 1a34d82667..6eae72f552 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"!=":[[72,"op-neq"]],"!~":[[72,"op-re-not-match"]],"!~*":[[72,"op-re-not-match-i"]],"!~~":[[72,"id19"]],"!~~*":[[72,"id20"]],"#":[[72,"op-bit-xor"]],"%":[[72,"op-modulo"]],"&":[[72,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[14,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[72,"op-multiply"]],"+":[[72,"op-plus"]],"-":[[72,"op-minus"]],"/":[[72,"op-divide"]],"1.
 Array Literal Con [...]
\ No newline at end of file
+Search.setIndex({"alltitles":{"!=":[[72,"op-neq"]],"!~":[[72,"op-re-not-match"]],"!~*":[[72,"op-re-not-match-i"]],"!~~":[[72,"id19"]],"!~~*":[[72,"id20"]],"#":[[72,"op-bit-xor"]],"%":[[72,"op-modulo"]],"&":[[72,"op-bit-and"]],"(relation,
 name) tuples in logical fields and logical columns are 
unique":[[14,"relation-name-tuples-in-logical-fields-and-logical-columns-are-unique"]],"*":[[72,"op-multiply"]],"+":[[72,"op-plus"]],"-":[[72,"op-minus"]],"/":[[72,"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