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 8615e364c0 Publish built docs triggered by
dc786138cfa0ff562612528b93417a077a0b3003
8615e364c0 is described below
commit 8615e364c0eef270c490e479c1bb0c29362e659e
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Dec 9 17:27:59 2025 +0000
Publish built docs triggered by dc786138cfa0ff562612528b93417a077a0b3003
---
_sources/library-user-guide/upgrading.md.txt | 64 ++++++++++++++++++++++++++++
library-user-guide/upgrading.html | 54 +++++++++++++++++++++++
searchindex.js | 2 +-
3 files changed, 119 insertions(+), 1 deletion(-)
diff --git a/_sources/library-user-guide/upgrading.md.txt
b/_sources/library-user-guide/upgrading.md.txt
index 6462961ce6..cecc0ef25b 100644
--- a/_sources/library-user-guide/upgrading.md.txt
+++ b/_sources/library-user-guide/upgrading.md.txt
@@ -165,6 +165,70 @@ Statistics are now accessed through `FileScanConfig`
instead of `FileSource`:
Note that `FileScanConfig::statistics()` automatically marks statistics as
inexact when filters are present, ensuring correctness when filters are pushed
down.
+### Partition column handling moved out of `PhysicalExprAdapter`
+
+Partition column replacement is now a separate preprocessing step performed
before expression rewriting via `PhysicalExprAdapter`. This change provides
better separation of concerns and makes the adapter more focused on schema
differences rather than partition value substitution.
+
+**Who is affected:**
+
+- Users who have custom implementations of `PhysicalExprAdapterFactory` that
handle partition columns
+- Users who directly use the `FilePruner` API
+
+**Breaking changes:**
+
+1. `FilePruner::try_new()` signature changed: the `partition_fields` parameter
has been removed since partition column handling is now done separately
+2. Partition column replacement must now be done via
`replace_columns_with_literals()` before expressions are passed to the adapter
+
+**Migration guide:**
+
+If you have code that creates a `FilePruner` with partition fields:
+
+**Before:**
+
+```rust,ignore
+use datafusion_pruning::FilePruner;
+
+let pruner = FilePruner::try_new(
+ predicate,
+ file_schema,
+ partition_fields, // This parameter is removed
+ file_stats,
+)?;
+```
+
+**After:**
+
+```rust,ignore
+use datafusion_pruning::FilePruner;
+
+// Partition fields are no longer needed
+let pruner = FilePruner::try_new(
+ predicate,
+ file_schema,
+ file_stats,
+)?;
+```
+
+If you have custom code that relies on `PhysicalExprAdapter` to handle
partition columns, you must now call `replace_columns_with_literals()`
separately:
+
+**Before:**
+
+```rust,ignore
+// Adapter handled partition column replacement internally
+let adapted_expr = adapter.rewrite(expr)?;
+```
+
+**After:**
+
+```rust,ignore
+use datafusion_physical_expr_adapter::replace_columns_with_literals;
+
+// Replace partition columns first
+let expr_with_literals = replace_columns_with_literals(expr,
&partition_values)?;
+// Then apply the adapter
+let adapted_expr = adapter.rewrite(expr_with_literals)?;
+```
+
### Planner now requires explicit opt-in for WITHIN GROUP syntax
The SQL planner now enforces the aggregate UDF contract more strictly: the
diff --git a/library-user-guide/upgrading.html
b/library-user-guide/upgrading.html
index 48e1de3fce..48f6dc435d 100644
--- a/library-user-guide/upgrading.html
+++ b/library-user-guide/upgrading.html
@@ -524,6 +524,59 @@ which is <a class="reference external"
href="https://github.com/apache/datafusio
</div>
<p>Note that <code class="docutils literal notranslate"><span
class="pre">FileScanConfig::statistics()</span></code> automatically marks
statistics as inexact when filters are present, ensuring correctness when
filters are pushed down.</p>
</section>
+<section id="partition-column-handling-moved-out-of-physicalexpradapter">
+<h3>Partition column handling moved out of <code class="docutils literal
notranslate"><span class="pre">PhysicalExprAdapter</span></code><a
class="headerlink"
href="#partition-column-handling-moved-out-of-physicalexpradapter" title="Link
to this heading">#</a></h3>
+<p>Partition column replacement is now a separate preprocessing step performed
before expression rewriting via <code class="docutils literal
notranslate"><span class="pre">PhysicalExprAdapter</span></code>. This change
provides better separation of concerns and makes the adapter more focused on
schema differences rather than partition value substitution.</p>
+<p><strong>Who is affected:</strong></p>
+<ul class="simple">
+<li><p>Users who have custom implementations of <code class="docutils literal
notranslate"><span class="pre">PhysicalExprAdapterFactory</span></code> that
handle partition columns</p></li>
+<li><p>Users who directly use the <code class="docutils literal
notranslate"><span class="pre">FilePruner</span></code> API</p></li>
+</ul>
+<p><strong>Breaking changes:</strong></p>
+<ol class="arabic simple">
+<li><p><code class="docutils literal notranslate"><span
class="pre">FilePruner::try_new()</span></code> signature changed: the <code
class="docutils literal notranslate"><span
class="pre">partition_fields</span></code> parameter has been removed since
partition column handling is now done separately</p></li>
+<li><p>Partition column replacement must now be done via <code class="docutils
literal notranslate"><span
class="pre">replace_columns_with_literals()</span></code> before expressions
are passed to the adapter</p></li>
+</ol>
+<p><strong>Migration guide:</strong></p>
+<p>If you have code that creates a <code class="docutils literal
notranslate"><span class="pre">FilePruner</span></code> with partition
fields:</p>
+<p><strong>Before:</strong></p>
+<div class="highlight-rust notranslate"><div
class="highlight"><pre><span></span><span class="k">use</span><span class="w">
</span><span class="n">datafusion_pruning</span><span class="p">::</span><span
class="n">FilePruner</span><span class="p">;</span>
+
+<span class="kd">let</span><span class="w"> </span><span
class="n">pruner</span><span class="w"> </span><span class="o">=</span><span
class="w"> </span><span class="n">FilePruner</span><span
class="p">::</span><span class="n">try_new</span><span class="p">(</span>
+<span class="w"> </span><span class="n">predicate</span><span
class="p">,</span>
+<span class="w"> </span><span class="n">file_schema</span><span
class="p">,</span>
+<span class="w"> </span><span class="n">partition_fields</span><span
class="p">,</span><span class="w"> </span><span class="c1">// This parameter
is removed</span>
+<span class="w"> </span><span class="n">file_stats</span><span
class="p">,</span>
+<span class="p">)</span><span class="o">?</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="k">use</span><span class="w">
</span><span class="n">datafusion_pruning</span><span class="p">::</span><span
class="n">FilePruner</span><span class="p">;</span>
+
+<span class="c1">// Partition fields are no longer needed</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">pruner</span><span class="w"> </span><span class="o">=</span><span
class="w"> </span><span class="n">FilePruner</span><span
class="p">::</span><span class="n">try_new</span><span class="p">(</span>
+<span class="w"> </span><span class="n">predicate</span><span
class="p">,</span>
+<span class="w"> </span><span class="n">file_schema</span><span
class="p">,</span>
+<span class="w"> </span><span class="n">file_stats</span><span
class="p">,</span>
+<span class="p">)</span><span class="o">?</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>If you have custom code that relies on <code class="docutils literal
notranslate"><span class="pre">PhysicalExprAdapter</span></code> to handle
partition columns, you must now call <code class="docutils literal
notranslate"><span class="pre">replace_columns_with_literals()</span></code>
separately:</p>
+<p><strong>Before:</strong></p>
+<div class="highlight-rust notranslate"><div
class="highlight"><pre><span></span><span class="c1">// Adapter handled
partition column replacement internally</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">adapted_expr</span><span class="w"> </span><span
class="o">=</span><span class="w"> </span><span class="n">adapter</span><span
class="p">.</span><span class="n">rewrite</span><span class="p">(</span><span
class="n">expr</span><span class="p">)</span><span class="o">?</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="k">use</span><span class="w">
</span><span class="n">datafusion_physical_expr_adapter</span><span
class="p">::</span><span class="n">replace_columns_with_literals</span><span
class="p">;</span>
+
+<span class="c1">// Replace partition columns first</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">expr_with_literals</span><span class="w"> </span><span
class="o">=</span><span class="w"> </span><span
class="n">replace_columns_with_literals</span><span class="p">(</span><span
class="n">expr</span><span class="p">,</span><span class="w"> </span><span
class="o">&</span><span class="n">partition_values</span><span
class="p">)</span><span class="o">?</span><span class="p">;</span>
+<span class="c1">// Then apply the adapter</span>
+<span class="kd">let</span><span class="w"> </span><span
class="n">adapted_expr</span><span class="w"> </span><span
class="o">=</span><span class="w"> </span><span class="n">adapter</span><span
class="p">.</span><span class="n">rewrite</span><span class="p">(</span><span
class="n">expr_with_literals</span><span class="p">)</span><span
class="o">?</span><span class="p">;</span>
+</pre></div>
+</div>
+</section>
<section id="planner-now-requires-explicit-opt-in-for-within-group-syntax">
<h3>Planner now requires explicit opt-in for WITHIN GROUP syntax<a
class="headerlink"
href="#planner-now-requires-explicit-opt-in-for-within-group-syntax"
title="Link to this heading">#</a></h3>
<p>The SQL planner now enforces the aggregate UDF contract more strictly: the
@@ -1948,6 +2001,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="#removal-of-pyarrow-feature">Removal of <code class="docutils literal
notranslate"><span class="pre">pyarrow</span></code> feature</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#adaptive-filter-representation-in-parquet-filter-pushdown">Adaptive
filter representation in Parquet filter pushdown</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#statistics-handling-moved-from-filesource-to-filescanconfig">Statistics
handling moved from <code class="docutils literal notranslate"><span
class="pre">FileSource</span></code> to <code class="docutils literal
notranslate"><span class="pre">FileScanConfig</span></code></a></li>
+<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link"
href="#partition-column-handling-moved-out-of-physicalexpradapter">Partition
column handling moved out of <code class="docutils literal notranslate"><span
class="pre">PhysicalExprAdapter</span></code></a></li>
<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>
diff --git a/searchindex.js b/searchindex.js
index db42defe4b..8e38e8f952 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]