Skip to content

Cherry pick 93ba65a - add downcast_delegate()#145

Closed
fred1268 wants to merge 3532 commits into
mainfrom
branch-54
Closed

Cherry pick 93ba65a - add downcast_delegate()#145
fred1268 wants to merge 3532 commits into
mainfrom
branch-54

Conversation

@fred1268

Copy link
Copy Markdown

No description provided.

Jefffrey and others added 30 commits April 23, 2026 02:05
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

N/A

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

Some PRs are being omitted from stale check because they were in a
cache, and the workflow appears to not have permission to delete cache
so they are forever stuck as unprocessed.

For example in this run:
https://github.com/apache/datafusion/actions/runs/24756695077/job/72431314533

Seeing this in logs:

```
[apache#20473]            issue skipped due being processed during the previous run
[apache#20460]            pull request skipped due being processed during the previous run
[apache#20448]            issue skipped due being processed during the previous run
[apache#20443]            issue skipped due being processed during the previous run
[apache#20435]            issue skipped due being processed during the previous run
[apache#20418]            issue skipped due being processed during the previous run
[apache#20417]            pull request skipped due being processed during the previous run
[apache#20416]            pull request skipped due being processed during the previous run
[apache#20403]            pull request skipped due being processed during the previous run
```

And at the end we see this warning:

```
Warning: Error delete _state: [403] Resource not accessible by integration - https://docs.github.com/rest/actions/cache#delete-github-actions-caches-for-a-repository-using-a-cache-key
```

stale workflow uses a cache in case it hits the `operations-per-run`
limit meant to prevent API rate limiting (we have default of 30), so it
seems we previously hit this limit and some issues/PRs were cached, and
have never been uncached since so are never processed again. See:
https://github.com/actions/stale#operations-per-run

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

Give permission to stale workflow to run github actions (like delete
cache). See recommended permissions:

https://github.com/actions/stale#recommended-permissions

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
## Summary

- Adds `cosine_distance(array1, array2)` / `list_cosine_distance` —
computes cosine distance (1 - cosine similarity) between two numeric
arrays
- Introduces shared `vector_math.rs` primitives (`dot_product_f64`,
`magnitude_f64`, `convert_to_f64_array`) for reuse by follow-on vector
functions
- Returns NULL for zero-magnitude vectors; errors on mismatched lengths
- Supports List, LargeList, and FixedSizeList with any numeric element
type

Part of apache#21536 — first in a series of split PRs (replacing apache#21371).

## Test plan

- [x] Unit tests: identical, orthogonal, opposite, 45-degree,
zero-magnitude, mismatched-length, NULL, multi-row
- [x] sqllogictest: `cosine_distance.slt` covering all edge cases
including empty arrays, LargeList, integer coercion, alias, return type
- [x] Full slt suite (426/426 pass)
- [x] `cargo clippy`, `cargo fmt`, `taplo`, `prettier`, `cargo machete`
— all clean

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ueryAlias (apache#21491)

## Which issue does this PR close?

  - Closes apache#21490.

  ## Rationale for this change

When `plan_to_sql` encounters a `Projection → Sort → Projection →
SubqueryAlias` plan where the outer Projection excludes a Sort
column defined as an alias in the inner Projection (e.g. `Z AS c`), the
function `rewrite_plan_for_sort_on_non_projected_fields`
flattens the two Projections into one but only keeps the outer
Projection's columns. This drops the alias definition, leaving
`ORDER BY c` referencing a column that no longer exists in the generated
SQL.

  ## What changes are included in this PR?

In `rewrite_plan_for_sort_on_non_projected_fields`
(`datafusion/sql/src/unparser/rewrite.rs`), when the inner Projection is
trimmed to only the outer Projection's expressions, sort expressions
that reference dropped aliases are now inlined to the
underlying physical expression. For example, `ORDER BY c` becomes `ORDER
BY t."Z"` when `c` was defined as `Z AS c` in the
  dropped inner Projection.

  ## Are these changes tested?

Yes. A new regression test
`test_sort_on_aliased_column_dropped_by_outer_projection` in
`datafusion/sql/tests/cases/plan_to_sql.rs` constructs the exact plan
shape that triggers the bug and asserts the correct SQL
  output:

  ```sql
SELECT t."X" AS a, t."Y" AS b FROM phys_table AS t ORDER BY t."Z" DESC
NULLS FIRST LIMIT 1
  ```

  All existing `plan_to_sql` tests (118 tests) continue to pass.

  ## Are there any user-facing changes?

  No API changes. Previously invalid SQL is now generated correctly.

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- From this discussion:
apache#19711 (comment)

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

In above PR we didn't enable a test because upstream arrow-rs had a
panic bug. This is now fixed:

- apache/arrow-rs#9144

So now we can enable this test again to assert expected error.

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#19782

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

We've landed various PRs required to support aggregating on list views
(both upstream in arrow-rs and here in datafusion) so now this simple
aggregation test succeeds; adding it to the slt suite.

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

Add aggregation test for listviews

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

Yes

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

No

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
…he#21773)

## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#19798

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

Upstream issue fixed, re-enable test

- apache/arrow-rs#9227

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
…l_compression` pass in every config (apache#21504)

## Which issue does this PR close?

- Closes apache#21503.

## Rationale for this change

The spill manager assumes that all available compressions are actually
available, which currently relies on feature unification with
`datafusion-datasource-arrow`.

## What changes are included in this PR?

Move `arrow-ipc/zstd` feature from `datafusion-datasource-arrow` to the
workspace dependency, like lz4.

## Are these changes tested?

Existing tests cover the functionality, tested individual crates
locally.

## Are there any user-facing changes?

Shifts some features around which might change behavior for users for
DataFusion, not sure how the project reasons about this level of
changes.
…he#21800)

## Which issue does this PR close?

- Closes apache#21798

## Rationale for this change

The coercion should take place in the same way as is foreseen already
for the string datatypes (Utf8, LargeUtf8, Null -> Utf8View)

## What changes are included in this PR?

The coerced_from function in
datafusion/expr/src/type_coercion/functions.rs was missing a match arm
for (BinaryView, Binary | LargeBinary | Null).

## Are these changes tested?

Additional unit test written : `test_binary_conversion`

## Are there any user-facing changes?

No

Co-authored-by: Bert Vermeiren <bert.vermeiren@datadobi.com>
## Which issue does this PR close?

- Follow-up to apache#21544

## Rationale for this change

@Jefffrey
[noted](apache#21544 (comment))
that some bench helpers created a special distribution of values, so we
can revisit their usage.

## What changes are included in this PR?

Some of the helpers are created for the purpose. For this reason, I
initially avoided migrating most candidate helpers from other files
(`array_has`, `array_sort` etc).

- `array_remove`'s helpers (`create_f64_list_array` and
`create_decimal64_list_array`) should be brought back because the
probability of finding a needle depends on the distribution, which is
set explicitly instead of the range of a template parameter - bringing
them back in this PR

- array_min_max is safe since it locates a min/max elements, which isn't
affected by the value distribution

- array_repeat doesn't check contents, so it is safe

- array_to_string is not content-aware

## Are these changes tested?

Run changed benchmarks

## Are there any user-facing changes?

No
## Which issue does this PR close?

- Closes apache#10669

Related arrow-rs PRs apache/arrow-rs#8960 and
apache/arrow-rs#9004

## Rationale for this change

The CSV writer was missing support for `quote_style`,
`ignore_leading_whitespace`, and `ignore_trailing_whitespace` options
that are available on the underlying arrow `WriterBuilder`. This meant
users couldn't control quoting behaviour or whitespace trimming when
writing CSV files.

## What changes are included in this PR?

Adds three new CSV writer options wired through the full stack:

- `quote_style` — controls when fields are quoted (`Always`,
`Necessary`, `NonNumeric`, `Never`). Modelled as a protobuf enum
(`CsvQuoteStyle`).
- `ignore_leading_whitespace` — trims leading whitespace from string
values on write.
- `ignore_trailing_whitespace` — trims trailing whitespace from string
values on write.

## Are these changes tested?

Yes — sqllogictest coverage added in `csv_files.slt`

## Are there any user-facing changes?

Three new `format.*` options available in COPY TO and CREATE EXTERNAL
TABLE for CSV:
- `format.quote_style` (string: `Always`, `Necessary`, `NonNumeric`,
`Never`)
- `format.ignore_leading_whitespace` (boolean)
- `format.ignore_trailing_whitespace` (boolean)
## Which issue does this PR close?

- Closes apache#21804.

## Rationale for this change

`case_conversion_ascii_array` operates directly on the underlying values
buffer, but it neglects to ensure it only looks at bytes within the
visible slice. For sliced arrays, this can lead to doing substantial
unnecessary work.

## What changes are included in this PR?

* Optimize `case_conversion_ascii_array` for sliced arrays
* Add a unit test
* Add a benchmark. We can make the "sliced array" case arbitrarily
extreme, so the raw benchmark number here is less important; it is more
important that this benchmark confirms that the work we do scales with
the visible size of a sliced array, which it does.

## Are these changes tested?

Yes.

## Are there any user-facing changes?

No.
…apache#21789)

## Which issue does this PR close?

- Part of apache#21684

## Rationale for this change

Introduce three new string array builders with bulk null tracking:

- `StringArrayBuilder` (Utf8)
- `LargeStringArrayBuilder` (LargeUtf8)
- `StringViewArrayBuilder` (Utf8View)

Each builder has the following API:

- append_value(&str) -- add a non-NULL value (row)
- append_placeholder() -- add a NULL row placeholder
- finish(Option<NullBuffer>) -- finish the build, specify NULLs

These are the counterpart of Arrow's `GenericStringBuilder` /
`StringViewBuilder` but it
skips per-row NULL buffer maintenance, which lets callers compute the
NULL buffer in
bulk when possible.

This PR also switches `case_conversion` to use the new APIs, which is
used to
implement `lower`, `upper`, and the Spark equivalents. This improves
`lower` / `upper`
performance by 3-15% on microbenchmarks. More UDFs (~10) will be
converted to use
this API in future PRs.

## What changes are included in this PR?

* Add new builders
* Add unit tests
* Adopt builders in `case_conversion`

## Are these changes tested?

Yes.

## Are there any user-facing changes?

No.
…st/datafusion-wasm-app (apache#21164)

Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to
2.3.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/micromatch/picomatch/releases">picomatch's
releases</a>.</em></p>
<blockquote>
<h2>2.3.2</h2>
<p>This is a security release fixing several security relevant
issues.</p>
<h2>What's Changed</h2>
<ul>
<li>fix: exception when glob pattern contains constructor by <a
href="https://github.com/Jason3S"><code>@​Jason3S</code></a> in <a
href="https://redirect.github.com/micromatch/picomatch/pull/144">micromatch/picomatch#144</a></li>
<li>Fix for <a
href="https://github.com/micromatch/picomatch/security/advisories/GHSA-c2c7-rcm5-vvqj">CVE-2026-33671</a></li>
<li>Fix for <a
href="https://github.com/micromatch/picomatch/security/advisories/GHSA-3v7f-55p6-f55p">CVE-2026-33672</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2">https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md">picomatch's
changelog</a>.</em></p>
<blockquote>
<h1>Release history</h1>
<p><strong>All notable changes to this project will be documented in
this file.</strong></p>
<p>The format is based on <a
href="http://keepachangelog.com/en/1.0.0/">Keep a Changelog</a>
and this project adheres to <a
href="http://semver.org/spec/v2.0.0.html">Semantic Versioning</a>.</p>
<!-- raw HTML omitted -->
<ul>
<li>Changelogs are for humans, not machines.</li>
<li>There should be an entry for every single version.</li>
<li>The same types of changes should be grouped.</li>
<li>Versions and sections should be linkable.</li>
<li>The latest version comes first.</li>
<li>The release date of each versions is displayed.</li>
<li>Mention whether you follow Semantic Versioning.</li>
</ul>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p>Changelog entries are classified using the following labels <em>(from
<a href="http://keepachangelog.com/">keep-a-changelog</a></em>):</p>
<ul>
<li><code>Added</code> for new features.</li>
<li><code>Changed</code> for changes in existing functionality.</li>
<li><code>Deprecated</code> for soon-to-be removed features.</li>
<li><code>Removed</code> for now removed features.</li>
<li><code>Fixed</code> for any bug fixes.</li>
<li><code>Security</code> in case of vulnerabilities.</li>
</ul>
<!-- raw HTML omitted -->
<h2>4.0.0 (2024-02-07)</h2>
<h3>Fixes</h3>
<ul>
<li>Fix bad text values in parse <a
href="https://redirect.github.com/micromatch/picomatch/issues/126">#126</a>,
thanks to <a
href="https://github.com/connor4312"><code>@​connor4312</code></a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Remove process global to work outside of node <a
href="https://redirect.github.com/micromatch/picomatch/issues/129">#129</a>,
thanks to <a
href="https://github.com/styfle"><code>@​styfle</code></a></li>
<li>Add sideEffects to package.json <a
href="https://redirect.github.com/micromatch/picomatch/issues/128">#128</a>,
thanks to <a
href="https://github.com/frandiox"><code>@​frandiox</code></a></li>
<li>Removed <code>os</code>, make compatible browser environment. See <a
href="https://redirect.github.com/micromatch/picomatch/issues/124">#124</a>,
thanks to <a
href="https://github.com/gwsbhqt"><code>@​gwsbhqt</code></a></li>
</ul>
<h2>3.0.1</h2>
<h3>Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/micromatch/picomatch/commit/81cba8d4b767cab3cb29d26eb4f691eed75b73b2"><code>81cba8d</code></a>
Publish 2.3.2</li>
<li><a
href="https://github.com/micromatch/picomatch/commit/fc1f6b69006e9435caf8fb40d8aff378bc0b7bce"><code>fc1f6b6</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/micromatch/picomatch/commit/eec17aee5428a7249e9ca5adbb8a0d28fa29619b"><code>eec17ae</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/micromatch/picomatch/commit/78f8ca4362d9e66cadea97b93e292f10096452ed"><code>78f8ca4</code></a>
Merge pull request <a
href="https://redirect.github.com/micromatch/picomatch/issues/156">#156</a>
from micromatch/backport-144</li>
<li><a
href="https://github.com/micromatch/picomatch/commit/3f4f10eaa65bf3a52e8f2999674cd27e11fa3c9b"><code>3f4f10e</code></a>
Merge pull request <a
href="https://redirect.github.com/micromatch/picomatch/issues/144">#144</a>
from Jason3S/jdent-object-properties</li>
<li>See full diff in <a
href="https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Part of apache#20585.

## Rationale for this change

`substr_index` is part of the Utf8View epic. This function was still
missing the Utf8View optimization path, and it also did extra work when
delimiter and count were constant scalars.

This PR adds the same kind of optimization used in similar string work
and includes benchmark coverage.

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

## What changes are included in this PR?

  - Return the input string type directly, including `Utf8View`.
  - Add a zero-copy `Utf8View` path for `substr_index`.
  - Add a scalar fast path when delimiter and count are constant.
- Keep the hot path specialized after checking a cleaner shared-helper
version and benchmarking it.
  - Add SQL coverage for `Utf8View` type and value results.
- Add unit tests for the scalar fast path, sliced `Utf8View` arrays, and
the unchanged original-view case.
- Extend the benchmark to cover `Utf8`, `Utf8View`, array arguments,
scalar delimiter/count, and positive and negative counts.

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

Yes

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

No

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
## Which issue does this PR close?

When `PushdownSort` removes a `SortExec` because a source returns
`Exact` (guaranteeing ordering), any `fetch` (LIMIT) on the `SortExec`
is silently dropped if the underlying plan does not support
`with_fetch()`.

For example, `ProjectionExec` supports `try_pushdown_sort` (delegating
to its child) but does not implement `with_fetch()`. A plan like
`SortExec(fetch=10) → ProjectionExec → source` that gets sort-eliminated
loses the limit.

## What changes are included in this PR?

In the `Exact` branch of `PushdownSort`, when the eliminated `SortExec`
carried a `fetch`:

1. Try `with_fetch()` on the pushed-down source first
2. If `with_fetch()` returns `None`, fall back to wrapping with
`GlobalLimitExec`

## Are these changes tested?

Yes. Three new unit tests:

- `test_sort_pushdown_exact_no_fetch_no_limit` — Exact elimination
without fetch: no limit wrapper added
- `test_sort_pushdown_exact_preserves_fetch_with_global_limit` — Exact
elimination with fetch, source does NOT support `with_fetch()`:
`GlobalLimitExec` wrapper added
- `test_sort_pushdown_exact_preserves_fetch_with_source_support` — Exact
elimination with fetch, source supports `with_fetch()`: limit pushed
into source directly

## Are there any user-facing changes?

No.
## Which issue does this PR close?

- Closes apache#21844.

## Rationale for this change

`uuid()` never emits NULLs, so this is a straightforward win.
Benchmarks:

```
uuid (1024 rows): 21.618 µs → 20.133 µs, −6.90% (`p < 0.05`)
```

## What changes are included in this PR?

* `GenericStringBuilder` -> `GenericStringArrayBuilder` in `uuid()`
implementation

## Are these changes tested?

Yes.

## Are there any user-facing changes?

No.
…ns (apache#21701)

## Which issue does this PR close?

- Closes apache#21700.

## Rationale for this change

When an Extension node has no expressions, `map_expressions` was still
cloning all inputs and calling `with_exprs_and_inputs` to reconstruct
the node — wasted work since there are no expressions to transform. This
is common for Extension nodes like view matching candidates that carry
multiple children but no expressions.

## What changes are included in this PR?

1. **Code change** (`datafusion/expr/src/logical_plan/tree_node.rs`):
Add early return when `node.expressions()` is empty, skipping the clone
+ rebuild path.

2. **Micro-benchmark** (`datafusion/expr/benches/map_expressions.rs`):
Criterion benchmark comparing `map_expressions` on Extension nodes with
and without expressions, varying the number of children (1, 3, 5, 10).

## Are these changes tested?

Yes — existing tests pass, and the new benchmark validates the
optimization.

Benchmark results:

| Children | no_expr (optimized) | with_expr (rebuild) | Speedup |
|----------|--------------------|--------------------|---------|
| 1        | 24 ns              | 167 ns             | 7x      |
| 3        | 23 ns              | 192 ns             | 8x      |
| 5        | 23 ns              | 181 ns             | 8x      |
| 10       | 24 ns              | 216 ns             | 9x      |

The `no_expr` path is constant time regardless of children count.

In a real optimizer pipeline (~15 rules × 5-child Extension), this saves
~2.4 us per optimization pass.

## Next step

A more general optimization would be to change
`UserDefinedLogicalNode::expressions()` to return references (`&[Expr]`)
instead of cloned `Vec<Expr>`, and only clone + rebuild when the
transform actually modifies an expression. This would avoid the clone +
`with_exprs_and_inputs` rebuild even for non-empty expression lists when
the transform is a no-op. Added a TODO comment in the code for this
direction. This would be a larger API change, so the empty-expressions
shortcut is a pragmatic first step.

## Are there any user-facing changes?

No — purely internal optimization. No API changes.
## Which issue does this PR close?

- Closes #.

## Rationale for this change

Avoid deep-copying values behind Arc when the Arc is uniquely owned by
using Arc::unwrap_or_clone.

## What changes are included in this PR?

Replaces several owned Arc<T> pointee clones with Arc::unwrap_or_clone,
including logical plans, schemas, fields, expressions, and statistics.

## Are these changes tested?

## Are there any user-facing changes?

No.
…1869)

## Which issue does this PR close?

N/A

## Rationale for this change

this is done so we can query cargo metadata alone to find only user
facing crates
and to use cargo metadata to find user facing crates when searching for
breaking changes in pr as suggested here:
-
apache#21499 (comment)

## What changes are included in this PR?
set `publish = false` for:
1. `datafusion-benchmarks`
2. `datafusion-wasmtest`
3. `test-utils`

## Are these changes tested?

I verified that these are not already published to crates.io and not in
`dev/release/README.md` _Publish on Crates.io_ list

## Are there any user-facing changes?

No
## Which issue does this PR close?

- Part of apache#19241.

## Rationale for this change

This PR is a preparatory refactor for
[apache#19390](apache#19390).

`InListExpr` currently mixes expression evaluation, constant-list filter
construction, primitive-vs-fallback dispatch, and generic fallback
execution in one file.

This PR extracts the existing static-filter code into smaller internal
modules while preserving the current behavior.

## Review guide

This PR is intended to be a move/extract-only refactor. The main review
question is whether the existing `InListExpr` static-filter behavior has
been preserved while making the internal structure easier to follow.

In particular:

- `in_list.rs` still owns `InListExpr` construction and evaluation
- `primitive_filter.rs` contains the existing primitive numeric
static-filter implementations moved out of `in_list.rs`
- `array_static_filter.rs` contains the existing `ArrayStaticFilter`
fallback moved out of `in_list.rs`
- `strategy.rs` contains the existing dispatch between primitive filters
and `ArrayStaticFilter`
- `static_filter.rs` defines the shared internal trait used by those
extracted pieces

No user-facing behavior or API changes are intended in this PR.

## Are these changes tested?

Yes. I validated this PR with:

- `cargo fmt --all`
- `cargo clippy -p datafusion-physical-expr --all-targets --all-features
-- -D warnings`
- `cargo test -p datafusion-physical-expr --all-features`

## Are there any user-facing changes?

No. This is an internal refactor only.

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
## Which issue does this PR close?

- None.

## Rationale for this change

Fix a handful of small typos in the contributor and user documentation.

## What changes are included in this PR?

- Correct spelling mistakes in several docs pages
- Replace a Cyrillic `С` with an ASCII `C` in aggregate function
descriptions

## Are these changes tested?

- `rustup run stable cargo fmt --all -- --check`
- Attempted `PATH="$HOME/Library/Python/3.9/bin:$PATH" rustup run stable
cargo clippy --all-targets --all-features -- -D warnings`, which hit an
existing clippy failure in
`datafusion/expr/src/logical_plan/plan.rs:3775` unrelated to this
docs-only change

## Are there any user-facing changes?

- Documentation text only.
## Which issue does this PR close?

- Closes apache#21862.

## Rationale for this change

Similar to other recent changes, we can use the bulk-NULL string
builders to avoid per-row NULL handling overhead.

Benchmarks:

  - scalar/scalar_utf8: 227.4ns → 228.6ns (+0.53%)
  - scalar/scalar_utf8view: 227.9ns → 229.2ns (+0.57%)
  - size=1024 str_len=128/array_utf8: 276.5µs → 277.7µs (+0.43%)
  - size=1024 str_len=128/array_utf8view: 223.3µs → 222.4µs (−0.40%)
  - size=1024 str_len=16/array_utf8: 37.5µs → 37.4µs (−0.27%)
  - size=1024 str_len=16/array_utf8view: 41.9µs → 39.3µs (−6.21%)
  - size=4096 str_len=128/array_utf8: 1115.4µs → 1109.2µs (−0.56%)
  - size=4096 str_len=128/array_utf8view: 900.2µs → 895.2µs (−0.56%)
  - size=4096 str_len=16/array_utf8: 148.3µs → 148.4µs (+0.07%)
  - size=4096 str_len=16/array_utf8view: 164.2µs → 153.8µs (−6.33%)
  - size=8192 str_len=128/array_utf8: 2.2ms → 2.2ms (0.00%)
  - size=8192 str_len=128/array_utf8view: 1811.2µs → 1819.2µs (+0.44%)
  - size=8192 str_len=16/array_utf8: 299.0µs → 299.3µs (+0.10%)
  - size=8192 str_len=16/array_utf8view: 330.6µs → 310.2µs (−6.17%)
  - unicode size=1024/array_utf8: 772.2µs → 769.2µs (−0.39%)
  - unicode size=1024/array_utf8view: 777.8µs → 779.2µs (+0.18%)
  - unicode size=4096/array_utf8: 3.1ms → 3.1ms (0.00%)
  - unicode size=4096/array_utf8view: 3.1ms → 3.1ms (0.00%)
  - unicode size=8192/array_utf8: 6.2ms → 6.1ms (−1.61%)
  - unicode size=8192/array_utf8view: 6.2ms → 6.2ms (0.00%)

## What changes are included in this PR?

* Switch to bulk-NULL string builders
* Optimize `StringViewArrayBuilder::append_value()` by inlining the view
construction for > 12 byte strings. Empirically this improved
performance, probably because `make_view` can't be inlined. This should
also help other PRs in this series.

## Are these changes tested?

Yes, covered by existing tests.

## Are there any user-facing changes?

No.
## Which issue does this PR close?

- Closes apache#21574.

## Rationale for this change

Previously, the CLI hint was being highlighted directly, which was
causing an assertion to fail in `rustyline`.

## What changes are included in this PR?

- Use `highlight_hint` instead of manually highlighting the text.

## Are these changes tested?

Manually.

## Are there any user-facing changes?

No.
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#21279
- Closes apache#21281

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

Keep dependencies up to date.

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

We used to use `Digest` from `blake2`, which was a common dependency
used by `md5` and `sha2`; however `blake2` doesn't have a `0.11.0`
release so we were blocked because of incompatible dependencies when
trying to upgrade `sha2` or `md5`. Fix code to use their own `Digest`
(e.g. `md5::Digest`, `sha2::Digest`) instead of relying on
`blake2::Digest` which should prevent such issues from occurring again
and allows us to bump their versions independently.

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

Existing tests.

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

No.

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
## Which issue does this PR close?

- None. This is a small documentation sync update.

## Rationale for this change

The CLI help output shown in the user guide had drifted from the current
`datafusion-cli --help` output, which makes the documentation misleading
for users trying to discover supported flags.

## What changes are included in this PR?

- Update the `datafusion-cli --help` snippet in
`docs/source/user-guide/cli/usage.md`
- Remove outdated options and defaults
- Add newer flags and current help text formatting

## Are these changes tested?

- Not with automated tests. This is a documentation-only change that
updates the checked-in help output.

## Are there any user-facing changes?

- Yes. The user guide now matches the current CLI usage output more
closely.

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
## Which issue does this PR close?

- Follow on to apache#21240

## Rationale for this change

While reviewing apache#21240 I found
that the existing doc comments describing the relationship between
ExecutionProps and TaskContext were vague

## What changes are included in this PR?

- Update the doc comments on ExecutionProps and TaskContext
- Clarify why the two structures remain separate

## Are these changes tested?

Not with automated tests. This is a comment-only change.

## Are there any user-facing changes?

Docs only
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#21747 

## Rationale for this change
datafusion did not have a CI check for broken links in markdown content,
docs workflows build and deploy docs, and dev checks formatting and
spelling, but none of them validate link targets.
This pr adds a dedicated link check for internal markdown links so
broken references fail early in PRs.
I kept the scope internal-only to avoid flaky CI failures from external
websites and rate limits.
Rust doc comments remain covered by the existing rustdoc CI job.



<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

## What changes are included in this PR?


- Added a new Dev workflow job, **Check Markdown Links**, in `dev.yml`.
- Added `LYCHEE_VERSION` pin in `tool_versions.sh`.
- Added `markdown_link_check.sh` to run lychee on the selected markdown
paths.
- Added `lychee.toml` with internal-link policy and exclusions.
- Added check markdown links to required status checks in `.asf.yaml`.
- Updated contributor testing docs with the new local command and scope
note.
- Fixed internal markdown links that failed under the new check in:
  - `roadmap.md`
  - `49.0.0.md`
  - `overview.md`
  - `dataframe.md`
  - `format_options.md`
<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?
Yes,

- `python3 ci/scripts/check_asf_yaml_status_checks.py` passed.
- `bash -n ci/scripts/markdown_link_check.sh` passed.
- `bash ci/scripts/markdown_link_check.sh` passed with 0 errors.
- `cargo fmt --all --check` passed.

OK: All 5 required_status_checks match existing GitHub Actions jobs.
🔍 12824 Total (in 0s) ✅ 490 OK 🚫 0 Errors 👻 12334 Excluded
<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?
No,

There is one contributor-facing CI change: PRs now fail when internal
markdown links break in the checked markdown files.

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->

---------

Co-authored-by: Oleks V <comphead@users.noreply.github.com>
## Which issue does this PR close?

- Closes apache#21846.

## Rationale for this change

Optimize `chr` by avoiding per-row NULL bitmap maintenance, and also
split the hot loop to avoid taking a branch when no NULL bitmap is
given.

Benchmarks:

```
chr/array: 3.8768 µs → 3.1548 µs, −18.57% (`p < 0.05`)
```

## What changes are included in this PR?

* Optimize `chr` to reduce NULL-handling overhead

## Are these changes tested?

Yes.

## Are there any user-facing changes?

No.

---------

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
…ache#21725)

## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#16894 

## What changes are included in this PR?

- User-visible struct-UNNEST columns no longer expose
`__unnest_placeholder`.
- Internal Unnest planning still uses placeholders.
- This adds a final Projection layer in explain plans wherever struct
UNNEST output is published.

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?
Yes.
<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?
Yes. The aliases of unnested columns will be changed.
<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->

---------

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
dependabot Bot and others added 28 commits May 20, 2026 02:50
Bumps [idna](https://github.com/kjd/idna) from 3.11 to 3.15.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/kjd/idna/blob/master/HISTORY.md">idna's
changelog</a>.</em></p>
<blockquote>
<h2>3.15 (2026-05-12)</h2>
<ul>
<li>Enforce DNS-length cap on individual labels early in
<code>check_label</code>,
short-circuiting contextual-rule processing for oversized input
while staying compatible with UTS 46 usage.</li>
<li>Tidy core helpers: hoist bidi category sets to module-level
frozensets (avoiding per-codepoint list construction), simplify
length checks, and reuse the shared <code>_unicode_dots_re</code> from
<code>idna.core</code> in the codec module.</li>
<li>Use <code>raise ... from err</code> for proper exception chaining
and
switch internal string formatting to f-strings.</li>
<li>Allow <code>flit_core</code> 4.x in the build backend.</li>
<li>Expand the ruff lint set (flake8-bugbear, flake8-simplify,
pyupgrade, perflint) and apply the surfaced fixes; pin lint CI
to Python 3.14.</li>
<li>Add Dependabot configuration for GitHub Actions.</li>
<li>Convert README and HISTORY from reStructuredText to Markdown.</li>
<li>Reference CVE-2026-45409 for the 3.14 advisory in place of the
initial GHSA identifier.</li>
</ul>
<p>Thanks to Felix Yan, Stan Ulbrych, and metsw24-max for
contributions to this release.</p>
<h2>3.14 (2026-05-10)</h2>
<ul>
<li>Removed opportunity to process long inputs into quadratic
time by rejecting oversize inputs up-front. Closes a bypass
of the CVE-2024-3651 mitigation. [CVE-2026-45409]</li>
</ul>
<p>Thanks to Stan Ulbrych for reporting the issue.</p>
<h2>3.13 (2026-04-22)</h2>
<ul>
<li>Correct classification error for codepoint U+A7F1</li>
</ul>
<h2>3.12 (2026-04-21)</h2>
<ul>
<li>Update to Unicode 17.0.0.</li>
<li>Issue a deprecation warning for the transitional argument.</li>
<li>Added lazy-loading to provide some performance improvements.</li>
<li>Removed vestiges of code related to Python 2 support, including
segmentation of data structures specific to Jython.</li>
</ul>
<p>Thanks to Rodrigo Nogueira for contributions to this release.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8"><code>af30a09</code></a>
Release 3.15</li>
<li><a
href="https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2"><code>30314d4</code></a>
Pre-release 3.15rc0</li>
<li><a
href="https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9"><code>05d4b21</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/237">#237</a> from
kjd/convert-docs-to-markdown</li>
<li><a
href="https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee"><code>2987fdb</code></a>
Convert README and HISTORY from reStructuredText to Markdown</li>
<li><a
href="https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c"><code>59fa800</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/236">#236</a> from
kjd/dependabot/github_actions/actions-f3e34333ea</li>
<li><a
href="https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2"><code>def6983</code></a>
Merge branch 'master' into
dependabot/github_actions/actions-f3e34333ea</li>
<li><a
href="https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631"><code>bbd8004</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/234">#234</a> from
StanFromIreland/patch-1</li>
<li><a
href="https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc"><code>edd07c0</code></a>
Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions
group</li>
<li><a
href="https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123"><code>5557db0</code></a>
Merge branch 'master' into patch-1</li>
<li><a
href="https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d"><code>f11746c</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/235">#235</a> from
StanFromIreland/patch-2</li>
<li>Additional commits viewable in <a
href="https://github.com/kjd/idna/compare/v3.11...v3.15">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=idna&package-manager=uv&previous-version=3.11&new-version=3.15)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/apache/datafusion/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Which issue does this PR close?

- Partially addresses apache#14044

## Rationale for this change

Donate the `xxhash64` hash function from Comet so that other projects
can benefit from it.
The function was initially implemented in Comet by @advancedxy.

This is a continuation of apache#19627, which has gone stale. To keep the
change focused
and easier to review, this PR adds only `xxhash64`. Murmur3 will follow
in a separate PR.

The first commit is the same as the version of apache#19627 that was
previously approved.

The second commit implements optmizations and bug fixes from the latest
Comet version.

The third commit is cleanup.

## What changes are included in this PR?

- Add `xxhash64(expr1, expr2, ...)` to `datafusion-spark`.
- Add Rust unit tests for primitives, boundary values, emoji/CJK
strings, float `-0.0`
normalization, dictionaries (with and without nulls), `FixedSizeBinary`,
`Struct`, and
  `List`.
- Add sqllogictest coverage in
`datafusion/sqllogictest/test_files/spark/hash/xxhash64.slt`
  with values verified against Spark.

## Are these changes tested?

Yes, both Rust unit tests and sqllogictest are included.

## Are there any user-facing changes?

A new `xxhash64` scalar function is available in `datafusion-spark`.
## Which issue does this PR close?

Follow up of apache#21679 

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
…he#22166)

## Which issue does this PR close?

* Part of apache#22163

## Rationale for this change

The `%c` conversion path in Spark `format_string` duplicated nearly
identical logic across all signed and unsigned integer scalar variants.
This duplication increased maintenance overhead and the risk of future
`%c` fixes being applied inconsistently.

This change centralizes numeric scalar-to-character conversion in a
single helper while preserving existing behavior and error propagation
semantics.

## What changes are included in this PR?

* Added a local `integer_scalar_to_char` helper to centralize integer
scalar `%c` conversion handling.
* Routed all non-null integer `%c` conversion paths through the new
helper.
* Removed duplicated `%c` conversion branches from individual integer
scalar match arms.
* Preserved existing signed/unsigned conversion semantics by continuing
to use the existing `signed_to_char` and `unsigned_to_char` helpers.
* Left all non-`%c` formatting behavior unchanged.

## Are these changes tested?

No new tests were added in this PR.

This refactor is intended to preserve existing behavior, and existing
`%c` formatting tests continue to validate valid and invalid code point
handling.

Suggested validation command:

```bash
cargo test -p datafusion-spark format_char
```

## Are there any user-facing changes?

No. This is a maintainability refactor only and is not intended to
change observable behavior or error messages.

## LLM-generated code disclosure

This PR includes LLM-generated code and comments. All LLM-generated
content has been manually reviewed and tested.
… in /docs (apache#22378)

Updates the requirements on
[myst-parser](https://github.com/executablebooks/MyST-Parser) to permit
the latest version.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/executablebooks/MyST-Parser/releases">myst-parser's
releases</a>.</em></p>
<blockquote>
<h2>v5.1.0</h2>
<h2>✨ New Features</h2>
<ul>
<li>✨ Add <code>&quot;alert&quot;</code> syntax extension for <a
href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts">GFM
alerts</a> (e.g. <code>&gt; [!NOTE]</code>), see <a
href="https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#alerts-github-style-callouts">docs</a>
by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
<li>✨ Add <code>&quot;gfm_autolink&quot;</code> syntax extension for <a
href="https://github.github.com/gfm/#autolinks-extension-">GFM
autolinks</a>, see <a
href="https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#gfm-autolinks">docs</a>
by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
<li>✨ Add <code>myst_strikethrough_single_tilde</code> <a
href="https://myst-parser.readthedocs.io/en/latest/configuration.html">config
option</a> to allow single tilde (<code>~</code>) for strikethrough by
<a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
<li>✨ Add <code>myst_colon_fence_exact_match</code> <a
href="https://myst-parser.readthedocs.io/en/latest/configuration.html">config
option</a> to require the closing colon fence to have exactly the same
number of colons as the opening, see <a
href="https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#code-fences-using-colons">docs</a>
by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
</ul>
<h2>👌 Improvements</h2>
<ul>
<li>👌 Update <code>myst_gfm_only</code> mode to use the unified
<code>gfm_plugin</code>, which now includes GFM autolinks, alerts, and
improved strikethrough/tasklist handling by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
<li>👌 Improve MathJax 4 compatibility for Sphinx 9 by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1110">#1110</a></li>
<li>👌 Stop directive-option parsing at colon fences, fixing nested colon
fence directives by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1133">#1133</a></li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>🐛 Use docname instead of source path in warning locations by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1114">#1114</a></li>
<li>🐛 Correctly encode <code>&amp;</code> in Markdown URLs by not
HTML-escaping <code>refuri</code> by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1126">#1126</a></li>
<li>🐛 Fix <code>RemovedInSphinx10Warning</code> for inventory item
iteration by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1129">#1129</a></li>
<li>🐛 Pin <code>mdit-py-plugins&gt;=0.6.1</code> for nested field list
fix by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1134">#1134</a></li>
</ul>
<h2>⬆️ Dependency Upgrades</h2>
<ul>
<li>⬆️ Upgrade to <code>markdown-it-py~=4.2</code> and
<code>mdit-py-plugins~=0.6</code> by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1128">#1128</a></li>
<li>⬆️ Update pygments requirement from <code>&lt;2.20</code> to
<code>&lt;2.21</code> by <a
href="https://github.com/chrisjsewell"><code>@​chrisjsewell</code></a>
in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1117">#1117</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/mb"><code>@​mb</code></a> made their
first contribution in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/pull/1126">executablebooks/MyST-Parser#1126</a></li>
<li><a href="https://github.com/Bizordec"><code>@​Bizordec</code></a>
made their first contribution in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/pull/1114">executablebooks/MyST-Parser#1114</a></li>
<li><a href="https://github.com/ilia-kats"><code>@​ilia-kats</code></a>
made their first contribution in <a
href="https://redirect.github.com/executablebooks/MyST-Parser/pull/1110">executablebooks/MyST-Parser#1110</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/executablebooks/MyST-Parser/compare/v5.0.0...v5.1.0">https://github.com/executablebooks/MyST-Parser/compare/v5.0.0...v5.1.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/CHANGELOG.md">myst-parser's
changelog</a>.</em></p>
<blockquote>
<h2>5.1.0 - 2026-05-13</h2>
<h3>✨ New Features</h3>
<ul>
<li>✨ Add <code>&quot;alert&quot;</code> syntax extension for <a
href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts">GFM
alerts</a> (e.g. <code>&gt; [!NOTE]</code>), see <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/syntax/alerts"></a>
by <a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
<li>✨ Add <code>&quot;gfm_autolink&quot;</code> syntax extension for <a
href="https://github.github.com/gfm/#autolinks-extension-">GFM
autolinks</a>, see <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/syntax/gfm-autolink"></a>
by <a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
<li>✨ Add <code>myst_strikethrough_single_tilde</code> <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/sphinx/config-options">config
option</a> to allow single tilde (<code>~</code>) for strikethrough by
<a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
<li>✨ Add <code>myst_colon_fence_exact_match</code> <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/sphinx/config-options">config
option</a> to require the closing colon fence to have exactly the same
number of colons as the opening, see <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/syntax/colon_fence"></a>
by <a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
</ul>
<h3>👌 Improvements</h3>
<ul>
<li>👌 Update <a
href="https://github.com/executablebooks/MyST-Parser/blob/master/sphinx/config-options"><code>myst_gfm_only</code></a>
mode to use the unified <code>gfm_plugin</code>, which now includes GFM
autolinks, alerts, and improved strikethrough/tasklist handling by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
<li>👌 Improve MathJax 4 compatibility for Sphinx 9 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1110">gh-pr:1110</a></li>
<li>👌 Stop directive-option parsing at colon fences, fixing nested colon
fence directives by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1133">gh-pr:1133</a></li>
</ul>
<h3>🐛 Bug Fixes</h3>
<ul>
<li>🐛 Use docname instead of source path in warning locations by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1114">gh-pr:1114</a></li>
<li>🐛 Correctly encode <code>&amp;</code> in Markdown URLs by not
HTML-escaping <code>refuri</code> by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1126">gh-pr:1126</a></li>
<li>🐛 Fix <code>RemovedInSphinx10Warning</code> for inventory item
iteration by <a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in
<a href="gh-pr:1129">gh-pr:1129</a></li>
<li>🐛 Pin <code>mdit-py-plugins&gt;=0.6.1</code> for nested field list
fix by <a href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1134">gh-pr:1134</a></li>
</ul>
<h3>⬆️ Dependency Upgrades</h3>
<ul>
<li>⬆️ Upgrade to <code>markdown-it-py~=4.2</code> and
<code>mdit-py-plugins~=0.6</code> by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1128">gh-pr:1128</a></li>
<li>⬆️ Update pygments requirement from <code>&lt;2.20</code> to
<code>&lt;2.21</code> by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1117">gh-pr:1117</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/executablebooks/MyST-Parser/compare/v5.0.0...v5.1.0">v5.0.0...v5.1.0</a></p>
<h2>5.0.0 - 2026-01-15</h2>
<p>This release significantly bumps the supported versions of core
dependencies:</p>
<h3>‼️ Breaking Changes</h3>
<p>This release updates the minimum supported versions:</p>
<ul>
<li><strong>Python</strong>: <code>&gt;=3.11</code> (dropped Python
3.10, tests up to 3.14)</li>
<li><strong>Sphinx</strong>: <code>&gt;=8,&lt;10</code> (dropped Sphinx
7, added Sphinx 9)</li>
<li><strong>Docutils</strong>: <code>&gt;=0.20,&lt;0.23</code> (dropped
docutils 0.19, added docutils 0.22)</li>
<li><strong>markdown-it-py</strong>: <code>~=4.0</code> (upgraded from
v3)</li>
</ul>
<h3>⬆️ Dependency Upgrades</h3>
<ul>
<li>⬆️ Upgrade to markdown-it-py v4 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1060">gh-pr:1060</a></li>
<li>⬆️ Drop Python 3.10 and Sphinx 7 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1059">gh-pr:1059</a></li>
<li>⬆️ Drop docutils 0.19 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1061">gh-pr:1061</a></li>
<li>⬆️ Add support for Python 3.14 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1075">gh-pr:1075</a></li>
<li>⬆️ Support Sphinx v9 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1076">gh-pr:1076</a></li>
<li>⬆️ Allow docutils 0.22 by <a
href="gh-user:chrisjsewell">gh-user:chrisjsewell</a> in <a
href="gh-pr:1084">gh-pr:1084</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/2871eb95750873ccec2c4ab1dac0568815b64ca5"><code>2871eb9</code></a>
🚀 Release v5.1.0 (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1135">#1135</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/cc5db37fd06445d7d023f7f2e0c2c073730be9cf"><code>cc5db37</code></a>
🐛 FIX: Pin mdit-py-plugins&gt;=0.6.1 for nested field list fix (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1134">#1134</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/4ce57f94af31de53c8790ccfffa3107c64241d0d"><code>4ce57f9</code></a>
👌 Stop directive-option parsing at colon fences (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1133">#1133</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/cfcc3278f9e8c7508aae4cea82f1dd9c5c111183"><code>cfcc327</code></a>
⬆️ Bump mypy from 2.0.0 to 2.1.0 (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1131">#1131</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/691738c3d897f82577440e18079d8b990edb8e34"><code>691738c</code></a>
⬆️ Bump ruff from 0.15.10 to 0.15.12 (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1132">#1132</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/0fb1ae983d7b0df68bd02a9f77b0bc45057edbaf"><code>0fb1ae9</code></a>
👌 IMPROVE: MathJax 4 compatibility (Sphinx 9) (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1110">#1110</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/f153b4b8ae68cbe77b41942147cf5cb6464168f0"><code>f153b4b</code></a>
⬆️ Bump actions/setup-python from 5 to 6 (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1092">#1092</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/93acf8dae502aba484b14a1d291366fc21f839e6"><code>93acf8d</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1095">#1095</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/a5f1d6963bc3ee361d25309a24ccc42e6860fd54"><code>a5f1d69</code></a>
⬆️ Update pygments requirement from &lt;2.20 to &lt;2.21 (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1117">#1117</a>)</li>
<li><a
href="https://github.com/executablebooks/MyST-Parser/commit/838129687219517e31a395736397c957d93532dd"><code>8381296</code></a>
🐛 FIX: Use docname instead of source path in warning locations (<a
href="https://redirect.github.com/executablebooks/MyST-Parser/issues/1114">#1114</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/executablebooks/MyST-Parser/compare/v5.0.0...v5.1.0">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [sysinfo](https://github.com/GuillaumeGomez/sysinfo) from 0.38.4
to 0.39.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/GuillaumeGomez/sysinfo/blob/main/CHANGELOG.md">sysinfo's
changelog</a>.</em></p>
<blockquote>
<h1>0.39.2</h1>
<ul>
<li>Windows: Greatly improve performance of
<code>System::refresh_cpu_specifics</code> when CPU usage is not
requested.</li>
<li>iOS: Fix compilation error when <code>user</code> feature is
enabled.</li>
<li>Linux: Correctly set thread information for processes.</li>
</ul>
<h1>0.39.1</h1>
<ul>
<li>Linux: Fix wrong network numbers computation.</li>
</ul>
<h1>0.39.0</h1>
<ul>
<li>Update minimum supported rust version to <code>1.95</code>.</li>
<li>Add new <code>NetworkData::operational_state</code> API.</li>
<li>Add new <code>Process::cgroup_limits</code> API (only returning data
on Linux).</li>
<li>All supported systems other than Windows: Improve performance of
<code>Networks::refresh*</code>.</li>
<li>All supported systems other than Windows: Fix soundness issue when
retrieving users.</li>
<li>Linux: Take into account parent cgroup memory limits.</li>
<li>Linux: Fix panic when retrieving process information on
<code>ESXi</code>.</li>
<li>FreeBSD: Use the name of dataset as <code>name</code> for zfs
disks.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/c43234a69dfc6f5c12e7d500e04e4ce5a5dc1b97"><code>c43234a</code></a>
Update crate version to <code>0.39.2</code></li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/b71467e99dfea531667d83ba4b90e95581a7c50d"><code>b71467e</code></a>
Update CHANGELOG for <code>0.39.2</code> version</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/345915a6350514454527a1fb00484bd9e47bd7ba"><code>345915a</code></a>
Improve code readability</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/35f3c186da0629b6520e02e692fc06bfb14fdd1e"><code>35f3c18</code></a>
Fix fmt and clippy</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/4bf1fe4c078bc81c5acf370066a19266994414ca"><code>4bf1fe4</code></a>
Windows: skip PDH setup when cpu_usage isn't requested (<a
href="https://redirect.github.com/GuillaumeGomez/sysinfo/issues/1664">#1664</a>)</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/2be72d77b095b884690a8d932d7cf2afdd638d70"><code>2be72d7</code></a>
Stub <code>get_users</code> on iOS via
<code>app_store::users</code></li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/c725c09d84ecf948906879eb5786fe1f22e6a642"><code>c725c09</code></a>
linux: fix detect thread entries in ProcessesToUpdate::All mode</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/6e883a32ffcc2b9fa8146cb96daf78d61b1ee05e"><code>6e883a3</code></a>
Update CHANGELOG and crate version to <code>0.39.1</code></li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/a45d38af0ba8066ac0367ca078970314aa9fcf1e"><code>a45d38a</code></a>
Merge pull request <a
href="https://redirect.github.com/GuillaumeGomez/sysinfo/issues/1659">#1659</a>
from isaidsari/fix/linux-network-buffer-truncation</li>
<li><a
href="https://github.com/GuillaumeGomez/sysinfo/commit/ee9cd3b611a3167c8fb00077e2e5dc201d07fbc6"><code>ee9cd3b</code></a>
Merge pull request <a
href="https://redirect.github.com/GuillaumeGomez/sysinfo/issues/1655">#1655</a>
from GuillaumeGomez/update</li>
<li>Additional commits viewable in <a
href="https://github.com/GuillaumeGomez/sysinfo/compare/v0.38.4...v0.39.2">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Which issue does this PR close?

- Closes apache#22267

## Rationale for this change

`regexp_count` did not handle empty regular-expression patterns
correctly. An empty pattern should be counted as valid matches instead
of returning `0`. This also affects calls that use the `start` argument
and certain flag combinations.

## What changes are included in this PR?

- Fix `regexp_count` so empty-pattern matches are counted correctly.
- Adjust `start` handling so character offsets are computed correctly.
- Update unit tests and sqllogictest coverage for empty patterns,
`start`, and flags.
- Update expected results to match the corrected behavior.

## Are these changes tested?

- Yes. Rust unit tests were updated.
- Yes. Sqllogictest coverage was added/updated.
- I also ran:
- `cargo test -p datafusion-sqllogictest --test sqllogictests
table_functions`
  - `cargo test -p datafusion-sqllogictest --test sqllogictests scalar`

## Are there any user-facing changes?

- Yes. `regexp_count` now returns correct counts for empty patterns, so
results may differ from the previous behavior.
…#21643)

## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes apache#21642.
- Relevant PR to datafusion-testing:
apache/datafusion-testing#20

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

It just makes more sense - if the user knows that they want a particular
filter before the others, let them do that. Also, the existing comments
indicate that this was the original intention.

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

The combined predicate of multiple filter plan nodes now preserves
execution order.

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

Yes, added unit tests.

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->

Yes, execution order of predicates might change.
## Which issue does this PR close?

N/A

## Rationale for this change

`coerce_int96_to_resolution` currently produces `Timestamp(unit, None)`
for every INT96-derived column. Some downstream readers need the
resulting Arrow type to carry a timezone, because the *absence* of a
timezone is itself meaningful.

The motivating case is Apache DataFusion Comet (a Spark accelerator)
trying to enforce [SPARK-36182\: pre-Spark-4 Spark rejects reading a
Parquet TimestampLTZ column as
TimestampNTZ](https://issues.apache.org/jira/browse/SPARK-36182).
Comet's schema adapter pattern-matches `Timestamp(_, Some(_)) ->
Timestamp(_, None)` to detect this case, but for INT96 columns the
post-coerce type is `Timestamp(unit, None)` — indistinguishable from a
true TimestampNTZ source. The LTZ signal is destroyed at the wrong
layer.

Spark and other systems write INT96 as UTC-adjusted instants, so a
caller can ask for the column to surface as `Timestamp(unit,
Some(\"UTC\"))`, preserving the LTZ semantic at the Arrow level.

## What changes are included in this PR?

- New `TableParquetOptions.global.coerce_int96_tz: Option<String>`
config field (defaults to `None`).
- `coerce_int96_to_resolution` gains a `timezone: Option<Arc<str>>`
parameter and threads it into the constructed `Timestamp` type.
- The new option is plumbed through `ParquetSource` -> `ParquetOpener` /
`ParquetMorselizer` -> `DFParquetMetadata`.
- `with_coerce_int96_tz` builder method on `DFParquetMetadata`.
- Default behavior is unchanged when the option is unset.

## Are these changes tested?

Yes, see apache/datafusion-comet#4357

## Are there any user-facing changes?

A new \`coerce_int96_tz\` config option. No change in behavior for the
default value.

---------

Co-authored-by: Oleks V <comphead@users.noreply.github.com>
…on-wasm-app (apache#22321)

Bumps [qs](https://github.com/ljharb/qs) and
[body-parser](https://github.com/expressjs/body-parser). These
dependencies needed to be updated together.
Updates `qs` from 6.14.0 to 6.14.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/qs/blob/main/CHANGELOG.md">qs's
changelog</a>.</em></p>
<blockquote>
<h2><strong>6.14.2</strong></h2>
<ul>
<li>[Fix] <code>parse</code>: mark overflow objects for indexed notation
exceeding <code>arrayLimit</code> (<a
href="https://redirect.github.com/ljharb/qs/issues/546">#546</a>)</li>
<li>[Fix] <code>arrayLimit</code> means max count, not max index, in
<code>combine</code>/<code>merge</code>/<code>parseArrayValue</code></li>
<li>[Fix] <code>parse</code>: throw on <code>arrayLimit</code> exceeded
with indexed notation when <code>throwOnLimitExceeded</code> is true (<a
href="https://redirect.github.com/ljharb/qs/issues/529">#529</a>)</li>
<li>[Fix] <code>parse</code>: enforce <code>arrayLimit</code> on
<code>comma</code>-parsed values</li>
<li>[Fix] <code>parse</code>: fix error message to reflect arrayLimit as
max index; remove extraneous comments (<a
href="https://redirect.github.com/ljharb/qs/issues/545">#545</a>)</li>
<li>[Robustness] avoid <code>.push</code>, use <code>void</code></li>
<li>[readme] document that <code>addQueryPrefix</code> does not add
<code>?</code> to empty output (<a
href="https://redirect.github.com/ljharb/qs/issues/418">#418</a>)</li>
<li>[readme] clarify <code>parseArrays</code> and
<code>arrayLimit</code> documentation (<a
href="https://redirect.github.com/ljharb/qs/issues/543">#543</a>)</li>
<li>[readme] replace runkit CI badge with shields.io check-runs
badge</li>
<li>[meta] fix changelog typo (<code>arrayLength</code> →
<code>arrayLimit</code>)</li>
<li>[actions] fix rebase workflow permissions</li>
</ul>
<h2><strong>6.14.1</strong></h2>
<ul>
<li>[Fix] ensure <code>arrayLimit</code> applies to <code>[]</code>
notation as well</li>
<li>[Fix] <code>parse</code>: when a custom decoder returns
<code>null</code> for a key, ignore that key</li>
<li>[Refactor] <code>parse</code>: extract key segment splitting
helper</li>
<li>[meta] add threat model</li>
<li>[actions] add workflow permissions</li>
<li>[Tests] <code>stringify</code>: increase coverage</li>
<li>[Dev Deps] update <code>eslint</code>,
<code>@ljharb/eslint-config</code>, <code>npmignore</code>,
<code>es-value-fixtures</code>, <code>for-each</code>,
<code>object-inspect</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ljharb/qs/commit/bdcf0c7f82387c18ac8fabfccd2f440645cef47b"><code>bdcf0c7</code></a>
v6.14.2</li>
<li><a
href="https://github.com/ljharb/qs/commit/294db90c812ddbe7d7a35d5687c505fd21a2d6a2"><code>294db90</code></a>
[readme] document that <code>addQueryPrefix</code> does not add
<code>?</code> to empty output</li>
<li><a
href="https://github.com/ljharb/qs/commit/5c308e5516c270a78caa6f278465914090f91ec6"><code>5c308e5</code></a>
[readme] clarify <code>parseArrays</code> and <code>arrayLimit</code>
documentation</li>
<li><a
href="https://github.com/ljharb/qs/commit/6addf8cf738d529c54d91f6f3ffb6c1be91bbfdc"><code>6addf8c</code></a>
[Fix] <code>parse</code>: mark overflow objects for indexed notation
exceeding <code>arrayLimit</code></li>
<li><a
href="https://github.com/ljharb/qs/commit/cfc108f662326d6ab540f3545ef0b832baf83cdf"><code>cfc108f</code></a>
[Fix] <code>arrayLimit</code> means max count, not max index, in
<code>combine</code>/<code>merge</code>/`pars...</li>
<li><a
href="https://github.com/ljharb/qs/commit/febb64442a80e49200211fa38d3c96b58024ac77"><code>febb644</code></a>
[Fix] <code>parse</code>: throw on <code>arrayLimit</code> exceeded with
indexed notation when `thr...</li>
<li><a
href="https://github.com/ljharb/qs/commit/f6a7abff1f13d644db9b05fe4f2c98ada6bf8482"><code>f6a7abf</code></a>
[Fix] <code>parse</code>: enforce <code>arrayLimit</code> on
<code>comma</code>-parsed values</li>
<li><a
href="https://github.com/ljharb/qs/commit/fbc5206c25b4d1851cea683f02c10756c521d15a"><code>fbc5206</code></a>
[Fix] <code>parse</code>: fix error message to reflect arrayLimit as max
index; remove e...</li>
<li><a
href="https://github.com/ljharb/qs/commit/1b9a8b4e78c6aff4c22fa559107227f02fd0216a"><code>1b9a8b4</code></a>
[actions] fix rebase workflow permissions</li>
<li><a
href="https://github.com/ljharb/qs/commit/2a35775614e0fb46ac8a3060201a32a7c23a7fda"><code>2a35775</code></a>
[meta] fix changelog typo (<code>arrayLength</code> →
<code>arrayLimit</code>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ljharb/qs/compare/v6.14.0...v6.14.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `body-parser` from 1.20.3 to 1.20.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/expressjs/body-parser/releases">body-parser's
releases</a>.</em></p>
<blockquote>
<h2>v1.20.5</h2>
<h2>What's Changed</h2>
<p>The reason for this release is a fix to the extended urlencoded
parser returning objects instead of arrays for large array inputs (&gt;
100) on qs@6.14.2+. (<a
href="https://redirect.github.com/expressjs/body-parser/pull/716">expressjs/body-parser#716</a>)</p>
<ul>
<li>refactor(json): simplify strict mode error string construction by <a
href="https://github.com/jonchurch"><code>@​jonchurch</code></a> in <a
href="https://redirect.github.com/expressjs/body-parser/pull/692">expressjs/body-parser#692</a></li>
<li>fix: correct off-by-one error in parameterCount by <a
href="https://github.com/abhu85"><code>@​abhu85</code></a> in <a
href="https://redirect.github.com/expressjs/body-parser/pull/716">expressjs/body-parser#716</a></li>
<li>deps(qs): bump qs to 6.15.1 by <a
href="https://github.com/jonchurch"><code>@​jonchurch</code></a> in <a
href="https://redirect.github.com/expressjs/body-parser/pull/722">expressjs/body-parser#722</a></li>
<li>Release: 1.20.5 by <a
href="https://github.com/jonchurch"><code>@​jonchurch</code></a> in <a
href="https://redirect.github.com/expressjs/body-parser/pull/721">expressjs/body-parser#721</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/abhu85"><code>@​abhu85</code></a> made
their first contribution in <a
href="https://redirect.github.com/expressjs/body-parser/pull/716">expressjs/body-parser#716</a></li>
</ul>
<p>Special thanks to triager <a
href="https://github.com/krzysdz"><code>@​krzysdz</code></a> for keeping
this on our radar and effectively triaging the specific issue!</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/expressjs/body-parser/compare/1.20.4...1.20.5">https://github.com/expressjs/body-parser/compare/1.20.4...1.20.5</a></p>
<h2>1.20.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Remove redundant depth check by <a
href="https://github.com/blakeembrey"><code>@​blakeembrey</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/538">expressjs/body-parser#538</a></li>
<li>ci: add support for Node.js v23 by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/553">expressjs/body-parser#553</a></li>
<li>ci: restore CI for 1.x branch by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/665">expressjs/body-parser#665</a></li>
<li>deps: qs@^6.14.0 by <a
href="https://github.com/bjohansebas"><code>@​bjohansebas</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/664">expressjs/body-parser#664</a></li>
<li>deps: use tilde notation and update certain dependencies by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/668">expressjs/body-parser#668</a></li>
<li>chore: remove SECURITY.md by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/669">expressjs/body-parser#669</a></li>
<li>ci: add CodeQL (SAST) by <a
href="https://github.com/Phillip9587"><code>@​Phillip9587</code></a> in
<a
href="https://redirect.github.com/expressjs/body-parser/pull/670">expressjs/body-parser#670</a></li>
<li>Release: 1.20.4 by <a
href="https://github.com/UlisesGascon"><code>@​UlisesGascon</code></a>
in <a
href="https://redirect.github.com/expressjs/body-parser/pull/672">expressjs/body-parser#672</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/expressjs/body-parser/compare/1.20.3...1.20.4">https://github.com/expressjs/body-parser/compare/1.20.3...1.20.4</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/expressjs/body-parser/blob/1.20.5/HISTORY.md">body-parser's
changelog</a>.</em></p>
<blockquote>
<h1>1.20.5 / 2026-04-24</h1>
<ul>
<li>refactor(json): simplify strict mode error string construction</li>
<li>fix: extended urlencoded parsing of arrays with &gt;100 elements (<a
href="https://redirect.github.com/expressjs/body-parser/issues/716">#716</a>)</li>
<li>deps: qs@~6.15.1</li>
</ul>
<h1>1.20.4 / 2025-12-01</h1>
<ul>
<li>deps: qs@~6.14.0</li>
<li>deps: use tilde notation for dependencies</li>
<li>deps: http-errors@~2.0.1</li>
<li>deps: raw-body@~2.5.3</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/expressjs/body-parser/commit/0defdbe7f95ad0d3bc007d3a7c59c8c0ab9e6575"><code>0defdbe</code></a>
release(patch): 1.20.5</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/cd0e7a000c53e7be7262d303e57a352b6a00db7f"><code>cd0e7a0</code></a>
deps(qs): bump qs to 6.15.1</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/6f24d7e8bcd9860b136920926ce86da1a7dd1d51"><code>6f24d7e</code></a>
fix: correct off-by-one error in parameterCount (<a
href="https://redirect.github.com/expressjs/body-parser/issues/716">#716</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/b849bd533d8b4abf5576a3e301f28d9befa05ddd"><code>b849bd5</code></a>
deps: qs@~6.14.1 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/690">#690</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/2c55e2f712f320a8e8d0f9fcb1d06526d0e401c9"><code>2c55e2f</code></a>
refactor(json): simplify strict mode error string construction (<a
href="https://redirect.github.com/expressjs/body-parser/issues/692">#692</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/7db202cac84a001e6566c2dc6516b44db98beff3"><code>7db202c</code></a>
1.20.4 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/672">#672</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/d8f8adb898676dfdf997b4455e5f9b689b53e989"><code>d8f8adb</code></a>
ci: add CodeQL (SAST) (<a
href="https://redirect.github.com/expressjs/body-parser/issues/670">#670</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/6d133c19b3e7c0bb8301959ca1dba283d23d23c3"><code>6d133c1</code></a>
chore: remove SECURITY.md (<a
href="https://redirect.github.com/expressjs/body-parser/issues/669">#669</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/fcd15355041ada6f37288dd13858d50429016b66"><code>fcd1535</code></a>
deps: use tilde notation and update certain dependencies (<a
href="https://redirect.github.com/expressjs/body-parser/issues/668">#668</a>)</li>
<li><a
href="https://github.com/expressjs/body-parser/commit/ec5fa290d25d85e0049757e240249072331eaee6"><code>ec5fa29</code></a>
deps: qs@~6.14.0 (<a
href="https://redirect.github.com/expressjs/body-parser/issues/664">#664</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/expressjs/body-parser/compare/1.20.3...1.20.5">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~jonchurch">jonchurch</a>, a new releaser
for body-parser since your current version.</p>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Which issue does this PR close?

Addresses the immediate problem identified in
apache/datafusion-python#1551 and the first
recommendation in apache#22367

## Rationale for this change

We expect Literal and Column expressions and they get `Transform::no` as
expected. If we have other PhysicalExpr that similarly should not get
through because they have no children then they should likewise get
`Transform::no`. This was found when a FFI wrapped Column expression
failed in simplification.

## What changes are included in this PR?

Essentially a two line change to see if it is a leaf node (no children)
instead of just checking that all of the children are literals.

## Are these changes tested?

Unit test added.

## Are there any user-facing changes?

No user facing changes.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…e#21895)

## Which issue does this PR close?

Partially addresses apache#14509 — implements `array_filter` / `list_filter`.

## Rationale for this change

`array_transform` (apache#21679) added the first `HigherOrderUDF`.
`array_filter` is the natural companion: filter array elements with a
boolean lambda, matching Spark `filter` / DuckDB `list_filter`
semantics.

## What changes are included in this PR?

- New `HigherOrderUDF` `ArrayFilter` (`array_filter` / `list_filter`
alias)
- Boolean lambda per element; `true` keeps, `false`/null drops (matches
Spark semantics)
  - Handles `List`, `LargeList`, sliced arrays, null sublists
  - Scalar predicate short-circuit (`x -> true` / `x -> false`)
- No-copy fast path when nothing is filtered (skips
`arrow::compute::filter`)
- Shared HOF helpers extracted from `array_transform` into a common
module (`value_lambda_pair`, `coerce_single_list_arg`,
`single_list_lambda_parameters`, `extract_list_values`)
- Shared unit test helpers for higher-order function tests

## Are these changes tested?

- Unit tests: basic filter, multiple sublists, sliced arrays, null
sublists, all-filtered-out, nothing-filtered (fast path), scalar
true/false predicates
- SQL logic tests in `array_filter.slt`: filter variants, `array_filter`
+ `array_transform` combinations, error cases

## Are there any user-facing changes?

Yes — `array_filter(array, lambda)` and alias `list_filter(array,
lambda)` are now available as SQL functions.
## Which issue does this PR close?

- Follow on to apache#21743
- Related to apache#22102

## Rationale for this change

As we have discovered, sometimes seemingly minor changes in SQL
semantics have caused non trivial downstream pain, for example the
recent changes to NULL semantics in `ANY/ALL`. See
-
apache#21743 (comment)

## What changes are included in this PR?

Add a note to the the API guide making it clear that changes to SQL
semantics are also API changes too and deserve extra attention.

## Are these changes tested?

By CI

## Are there any user-facing changes?
Clearer API docs
…20337)" (apache#22437) (apache#22445)

- Backports apache#22437 from @alamb
to the branch-54 line

This PR cherry-picks the revert of `ExecutionPlan::apply_expressions()`
(apache#20337) onto `branch-54` so that DataFusion 54.0 does not ship the new
public API.
…apache#22443)

## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

Backport apache#22404 

- Closes #.

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
…ter stats-based file reorder (apache#22501)

## Which issue does this PR close?

Cherry-pick of apache#22493 onto `branch-54`.

## Rationale for this change

`branch-54` includes apache#21956 (`feat: globally reorder files and row
groups by statistics for TopK queries`), which introduced a regression:
for plain-column, multi-file scans where the on-disk file order does not
match the declared sort order, `SortExec` was no longer eliminated even
when stats-based reorder produced non-overlapping file groups whose
declared ordering re-validated.

apache#22493 restores the pre-apache#21956 sort-elimination behaviour by
re-validating `output_ordering` after `rebuild_with_source` reorders
files, and (per @adriangb's correctness follow-up) restoring the
original hint-free `file_source` on the Inexact→Exact upgrade so
leftover `reverse_row_groups` / `sort_order_for_reorder` hints don't
mis-order row groups within a single file once the `SortExec` safety net
is gone.

## What changes are included in this PR?

Straight cherry-pick of merge commit `94c58d086`. Includes:

- `FileScanConfig::try_pushdown_sort` Inexact arm: re-validate, upgrade
to Exact (with file_source restore), guard with NULL safety +
early-return
- `rebuild_with_source`: `match (all_non_overlapping, is_exact)`
decision table for keep_ordering
- SLT updates restoring `SortExec` elimination expectations + Tests
5b/5c/8b for the NULL-safety and same-min row-group edge cases

## Are these changes tested?

Cherry-picked cleanly (auto-merge in `sort_pushdown.rs`).
`cargo build -p datafusion-datasource` — passes.
`cargo test -p datafusion-sqllogictest --test sqllogictests --
sort_pushdown` — passes.

## Are there any user-facing changes?

Same as apache#22493: plain-column wrong-order-files cases regain SortExec
elimination when files happen to be non-overlapping by statistics. No
new API.

Co-authored-by: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… container types (apache#21934) (apache#22446)

- Backports apache#21934 from
@bert-beyondloops to the branch-54 line

This PR cherry-picks the fix for `ScalarValue::compact` to compact view
buffers for all container types onto `branch-54`.

Co-authored-by: Bert Vermeiren <103956021+bert-beyondloops@users.noreply.github.com>
Co-authored-by: Bert Vermeiren <bert.vermeiren@datadobi.com>
Co-authored-by: Dmitrii Blaginin <dmitrii@blaginin.me>
## Which issue does this PR close?

- Refs apache#22557.
- Companion PR to apache#22559, targeting `branch-54`.

## Rationale for this change

DataFusion 54 changed `ExecutionPlan` downcasting to use the `Any`
supertrait directly. That removes `ExecutionPlan::as_any`, which had
also served as a customization point for wrapper nodes: wrappers could
identify as themselves internally while exposing the wrapped plan type
to normal downcast-based inspection.

This PR adds an explicit `ExecutionPlan::downcast_delegate()` hook for
wrapper nodes that want their public `ExecutionPlan` downcast identity
to be delegated to another plan.

The proposed behavior intentionally preserves the old `as_any` override
semantics: when a node opts into downcast delegation, intermediate
delegating wrappers are invisible to `dyn ExecutionPlan::is::<T>()` and
`downcast_ref::<T>()`.

## What changes are included in this PR?

- Adds `ExecutionPlan::downcast_delegate()` with a default
implementation returning `None`.
- Updates `dyn ExecutionPlan::is::<T>()` and `downcast_ref::<T>()` to
delegate to `downcast_delegate()` when present, otherwise use the
current concrete plan type.
- Documents that `downcast_delegate()` is only for type introspection
and is independent from `children()` / plan traversal.
- Adds tests for direct and nested downcast-delegating wrappers,
including that intermediate delegating wrappers remain invisible to
normal downcast-based inspection.

## Are these changes tested?

Yes.

- `cargo test -p datafusion-physical-plan execution_plan_downcast`
- `cargo test -p datafusion-physical-plan --lib`
- `cargo fmt --all -- --check`
- `git diff --check`

## Are there any user-facing changes?

Yes. This adds a new public `ExecutionPlan` trait method with a default
implementation, and it changes `ExecutionPlan` downcast helpers to honor
wrappers that explicitly opt into delegating public downcast identity.
) (apache#22634)

- Part of apache#21080

This PR:
- Backports apache#22571 from
@kumarUjjawal to the `branch-54` line

Co-authored-by: Kumar Ujjawal <ujjawalpathak6@gmail.com>
…erUDF struct (apache#22593) (apache#22635)

- Part of apache#21080

This PR:
- Backports apache#22593 from
@LiaCastaneda to the `branch-54` line

## Note on conflict resolution

The cherry-pick had conflicts in two test areas:
- `datafusion/functions-nested/src/array_any_match.rs` — only the
test-module `use` line conflicted; `branch-54`'s test does not reference
the renamed symbols, so the existing import was kept (the production
`HigherOrderUDF` -> `HigherOrderUDFImpl` rename applied cleanly).
- `datafusion/substrait/tests/cases/roundtrip_logical_plan.rs` — the
upstream PR modified the
`roundtrip_array_transform_higher_order_function` test and
`ArrayTransform` helper, but that test was added to `main` after
`branch-54` was cut and does not exist on `branch-54`. It is out of
scope for this refactor backport, so the `branch-54` file was left
unchanged.

Co-authored-by: Lía Adriana <lia.castaneda@datadoghq.com>
…ryToJoin` (#… (apache#22693)

This is PR packports apache#22316
from @neilconway to branch-54

Co-authored-by: Neil Conway <neil.conway@gmail.com>
…pache#22530) (apache#22690)

## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes #.

## Rationale for this change

This PR backports apache#22530


## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->
…Pushdown (apache#22525) (apache#22631)

- Part of apache#21080

This PR:
- Backports apache#22525 from
@kumarUjjawal to the `branch-54` line

Co-authored-by: Kumar Ujjawal <ujjawalpathak6@gmail.com>
…flag (backport apache#22632) (apache#22648)

## Which issue does this PR close?

- Backport of apache#22632 to `branch-54`.

## Rationale for this change

Content-defined chunking (CDC) write options were added in apache#21110 and
are slated for the 54.0.0 release. This backports the refactor in apache#22632
so the config/proto surface ships in its final form, before the release
goes out.

The CDC options previously worked as `use_content_defined_chunking:
Option<CdcOptions>` with a `ConfigField` impl that accepted a bare
`use_content_defined_chunking = true|false` and otherwise enabled CDC
implicitly when any sub-field was set. This has a few problems:

- **Naming diverges from parquet-rs.** `WriterProperties` exposes
`content_defined_chunking()` /
`set_content_defined_chunking(Option<CdcOptions>)` with no `use_`
prefix.
- **Implicit / order-dependent on the SQL side.** Format options in
`COPY ... OPTIONS` / `CREATE EXTERNAL TABLE ... OPTIONS` are applied
from a `HashMap` (non-deterministic order). With the old bare-boolean
form, mixing `... = false` with a sub-field could resolve to enabled or
disabled depending on iteration order.
- **Extra machinery.** Supporting the bare boolean required hand-written
`ConfigField` impls and a `#[expect(clippy::should_implement_trait)]`
workaround, plus a zero-sentinel fallback in the proto mapping.

Since CDC is unreleased, the config/proto surface can still be changed
freely.

## What changes are included in this PR?

- Rename the `ParquetOptions` field `use_content_defined_chunking` ->
`content_defined_chunking` (matches parquet-rs).
- Make `CdcOptions` a plain `config_namespace!` with an explicit
`enabled: bool` field alongside the chunking parameters; the field is a
bare `CdcOptions` (no longer `Option<CdcOptions>`). CDC is on iff
`content_defined_chunking.enabled` is true. Setting a parameter no
longer implicitly enables CDC, and the result is independent of key
order.
- Add `CdcOptions::enabled()` / `CdcOptions::disabled()` shorthand
constructors.
- Drop the `ConfigField` impls and the `should_implement_trait`
workaround — all generated by the macro now.
- Add an `enabled` field to the proto `CdcOptions` message so the proto
<-> config mapping is a plain field copy in both directions.
- Update unit tests, regenerate config docs + the `information_schema`
snapshot, and add `parquet_cdc_config.slt` documenting the resolution
behavior.

## Are these changes tested?

Yes — `datafusion-common` config + writer unit tests,
`datafusion-proto-common` proto round-trip tests, `datafusion/core`
parquet integration tests, and sqllogictest (`parquet_cdc.slt` + new
`parquet_cdc_config.slt`). Cherry-pick applied cleanly onto `branch-54`;
affected crates build and the CDC unit tests pass.

## Are there any user-facing changes?

Yes, but only to the unreleased CDC options:
- Config key `datafusion.execution.parquet.use_content_defined_chunking`
-> `datafusion.execution.parquet.content_defined_chunking.enabled` (plus
`.min_chunk_size` / `.max_chunk_size` / `.norm_level`).
- The bare-boolean form is removed; enable/disable via
`content_defined_chunking.enabled = true|false`.

No released API is affected.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
## Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax. For example
`Closes #123` indicates that this PR will close issue #123.
-->

- Closes #.

## Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

## What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

## Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

## Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.
-->

<!--
If there are any breaking changes to public APIs, please add the `api
change` label.
-->

---------

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
…trip (backport apache#22104) (apache#22785)

## Which issue does this PR close?

- Backport of apache#22104 to `branch-54` (for 54.1.0, tracked in apache#22547).

This PR:
- Backports apache#22104 to the `branch-54` line so the `null_aware` proto
  round-trip fix ships in 54.1.0, as requested in

apache#22065 (comment)

Clean cherry-pick; `datafusion-proto` builds and both round-trip
regression tests pass on `branch-54`.
@datadog-prod-us1-5

Copy link
Copy Markdown

Pipelines

Fix all issues with BitsAI

⚠️ Warnings

🚦 1 Pipeline job failed

Security audit | security_audit   View in Datadog   GitHub Actions

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 08da279 | Docs | Datadog PR Page | Give us feedback!

@fred1268 fred1268 closed this Jun 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.