Skip to content

docs: preserve released documentation during deployment - #1

Closed
yiaany wants to merge 439 commits into
mainfrom
docs/preserve-release-snapshots
Closed

yiaany wants to merge 439 commits into
mainfrom
docs/preserve-release-snapshots

Conversation

@yiaany

@yiaany yiaany commented Sep 29, 2026

Copy link
Copy Markdown
Owner

Summary\n\nThe docs deployment uses

sync --delete, which removes manually published �ersions/ directories because they are not part of the current development build. Exclude /versions/ from deletion so released documentation survives normal development-site deployments.\n\nThis is intentionally separate from apache#24792 so the deployment behavior can be reviewed independently.

kumarUjjawal and others added 30 commits September 13, 2026 03:38
## Which issue does this PR close?

Part of apache#25148.

## Rationale for this change

Five feature-check jobs currently run without a Rust dependency cache.
Reusing compatible compilation artifacts should reduce repeated
dependency compilation and CI runner usage while preserving the existing
feature checks and parallel jobs.

## What changes are included in this PR?

- Add dependency caching to the `datafusion-common`, `datafusion-proto`,
`datafusion-ffi`, `datafusion-functions`, and `datafusion-spark`
feature-check jobs using the existing `amd-ci-check` key.
- Let the functions check save the cache on `main` to populate GitHub's
cache backend. The workspace check already saves to the separate Runs-On
cache backend. The other four jobs only restore caches.
- Clarify the cache comments. Job names, runner choices, feature-check
commands, and required checks remain unchanged.

## What is the testing strategy for this PR?

- Compared the parsed workflows before and after the change: removing
the five new cache steps produces the original configuration, including
all 26 jobs and their commands.
- `python3 ci/scripts/check_asf_yaml_status_checks.py` passed for all 35
required checks.
- `ci/scripts/check_no_cargo_install_in_workflows.sh`, targeted spelling
checks, and `git diff --check` passed.
- Actionlint passed for the complete cache producer and consumer job
definitions. Full-workflow actionlint still reports existing `parallel`
blocks and a numeric service-port lookup outside the changed jobs.

This changes workflow configuration only. Cache hit rates and
elapsed-time savings need measurement in hosted CI with populated
caches. A cache miss still compiles dependencies and runs the existing
checks.

## Are there any user-facing changes?

No.
…ache#25228)

## Which issue does this PR close?

Closes apache#25226.

## Rationale for this change

MIN/MAX queries can return incorrect results when a Parquet file
contains a mix of row groups with and without bounds. A missing bound is
converted to a NULL in the per-row-group statistics array. Aggregating
that array skips the NULL, allowing another group's endpoint to be
reported as an exact bound for the entire file. The optimizer can then
answer the aggregate from incomplete statistics.

For example, a file contains `["a", "b"]` with statistics and two
8192-character strings starting with `z` without statistics. `SELECT
LENGTH(MIN(a)), LENGTH(MAX(a))` previously returned `1, 1`; the correct
result is `1, 8192`.

## What changes are included in this PR?

- Invalidate a file-level bound when any row group has no converted
bound and may contain non-NULL values. Return `Precision::Absent` so
that incomplete statistics cannot establish the file's extrema.
- Handle minimum and maximum independently, preserving a usable bound
when only the other endpoint is missing.
- Preserve bounds from other groups when the group with no bound is
empty or is proven all NULL. The all-NULL check requires both the column
value count and the explicitly recorded NULL count to equal the row
count.
- Express the active-accumulator precondition with `expect`: callers
already check for `Some`, and the path that clears the accumulator
returns immediately. This removes an unreachable fallback return.

## What is the testing strategy for this PR?

`test_min_max_require_complete_row_group_bounds` covers absent
statistics, independently missing minimum/maximum values, unknown and
partial NULL counts, empty groups, all-NULL groups, and complete bounds.
Every case runs in both row-group orders.

`parquet_missing_bounds.slt` verifies both the stored string lengths and
the aggregate results. Its fixture is generated at runtime using public
Rust Parquet writer APIs, enabling chunk statistics for the first row
group and disabling them for the second. Disabling statistics is
deliberate: parquet-rs truncates long extrema rather than omitting them.
No generated Parquet file is committed and no footer is manually edited.

Local validation:

- All 10 tests in `metadata::tests::statistics_tests` passed.
- `parquet_missing_bounds.slt` passed with the fix. Running the same
fixture and SQL test against unmodified main reproduced the incorrect
`1, 1` result.
- LLVM coverage confirmed that the removed fallback return had zero
executions and that the replacement precondition assertion was exercised
36 times by the statistics tests. The updated Codecov patch percentage
remains subject to the next CI run.

## Are there any user-facing changes?

MIN/MAX queries return correct results for Parquet files with incomplete
row-group bounds. Valid statistics remain usable for each independently
complete endpoint, including when other groups are empty or all NULL.
There are no public API changes.

---------

Co-authored-by: Jay Zhan <jayzhan211@gmail.com>
## Which issue does this PR close?

- N/A

## Rationale for this change

`bit_xor(DISTINCT c)` with `GROUP BY` fails with `column types must
match schema types, expected List(Int16) but found Int16`:
`groups_accumulator_supported` ignored `is_distinct`, so the plan got
the non-distinct groups accumulator while `state_fields` declared the
`List` state.

## What changes are included in this PR?

`groups_accumulator_supported` now returns false only for
`bit_xor(DISTINCT)`, matching `accumulator` and `state_fields`.
`bit_and` and `bit_or` are idempotent, so they keep the vectorized path.

## What is the testing strategy for this PR?

Three `aggregate.slt` queries: the two shapes `SingleDistinctToGroupBy`
does not rewrite (a non-distinct aggregate alongside, a `FILTER`) fail
on `main`; a `bit_and`/`bit_or` `DISTINCT` row pins the narrower
predicate.

## Are there any user-facing changes?

`bit_xor(DISTINCT)` with `GROUP BY` now works. No API change.

---------

Co-authored-by: Jay Zhan <jayzhan211@gmail.com>
## Which issue does this PR close?

- Part of apache#21048 and apache#24487. Both issues stay open.

## Rationale for this change

The three extended test suites run only in the merge queue, on release
branches, and by manual dispatch. Their `cargo test` commands and
environment variables exist only inside `extended.yml`. A developer who
wants to reproduce a merge-queue failure must copy them by hand. This PR
defines each command once in `xtask`, so local runs and GitHub Actions
use the same definition.

## What changes are included in this PR?

- `cargo xtask ci step test` gets three variants: `extended`,
`hash-collisions`, and `sqlite`. Each variant reproduces the current CI
invocation and sets only the environment that its suite needs. The
`sqlite` variant sets no `RUST_BACKTRACE`, because its CI job skips the
builder setup on purpose.
- `extended.yml` calls the three commands. Triggers, job IDs, job names,
runners, containers, the clean working tree check, and `cargo clean` do
not change.
- `xtask/README.md` documents the commands, their environment,
prerequisites, and the parts of a CI job that a command does not
reproduce.

`--explain` prints the underlying command without running the suite:

```sh
cargo xtask ci step test extended --explain
```

## What is the testing strategy for this PR?

- Snapshot tests in `xtask/src/ci_steps.rs` cover the exact command,
working directory, and environment of each variant, plus rejection of an
unknown variant.
- `check_asf_yaml_status_checks.py` passes. All required check names are
unchanged.
- Each new command ran the real suite locally through `xtask` on macOS.
The `extended`, `hash-collisions`, and `sqlite` suites all passed with a
clean working tree.

The extended jobs skip ordinary pull request updates, so green PR checks
do not exercise these commands. The merge queue does.

## Are there any user-facing changes?

No. The GitHub CI behavior is the same. Developers get three new local
commands.

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

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…e#24988)

## 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 apache#123` indicates that this PR will close issue apache#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.

Please explain the problem you are trying to solve in terms of the
user-visible
behavior, rather than the implementation.

For example, "The code in `foo.rs` doesn't handle nulls" is a symptom of
the
implementation. "COUNT(DISTINCT) returns wrong results when the column
contains
nulls" is the user-visible problem.
-->

For UDFs using `Numeric` signature with more than one argument
(currently mod & pmod from datafusion-spark), they cannot handle inputs
`Null, Int` whereas they accept `Int, Null`. Fixing the coercion logic
to ensure both are accepted.

## 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.
-->

Modify numeric type coercion handling to ignore null types

## What is the testing strategy for this PR?

<!--
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

Briefly describe how this PR is tested, and point to the specific tests
you added. For example: 'This new feature is covered by the
`sqllogictest` cases added in `foo.slt`'.

If this PR does not add tests, explain why. For example, if the change
is already covered by existing tests, please mention it.

You should also check the `codecov` bot reply on this PR to confirm the
changed code is exercised.
-->

Added unit & SLT 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.
-->

No
## Which issue does this PR close?

- Closes apache#25071

## Rationale for this change

With `enable_unions_to_filter` enabled, `UNION DISTINCT` branches
containing different computed projections below their filters can be
incorrectly treated as equivalent. This produces wrong result values and
row counts without an error.

## What changes are included in this PR?

`unions_to_filter` now skips the rewrite when a projection appears below
a branch filter. Alias nodes remain safe to strip. A regression test
covers branches computing `a + 100` and `a + 200` below their filters.

## What is the testing strategy for this PR?

- `cargo +1.97.0-x86_64-pc-windows-gnullvm test --locked -p
datafusion-optimizer unions_to_filter --lib` (9 passed)
- The standalone reproducer returns `[1100, 1200]` with the optimizer
setting both disabled and enabled after the fix.
- `git diff --check`

## Are there any user-facing changes?

This prevents incorrect query results when the opt-in `unions_to_filter`
optimizer rule is enabled.
## Which issue does this PR close?

- Part of apache#19241.
- Stacked on [apache#24102](apache#24102).

## Rationale for this change

Arrow represents every `Utf8View` and `BinaryView` value with a 16-byte
view. When a value is at most 12 bytes long, the complete value is
stored directly in that view:

```text
32-bit length | up to 12 value bytes, zero-padded
```

Equal short values therefore have the same 128-bit view. DataFusion can
look up that view directly, without reading another buffer or using
Arrow's general value comparison.

This PR uses that faster path when every non-null value in the `IN` list
is at most 12 bytes long. The byte-view adapter treats each inline view
as a `Decimal128` key and passes it to the shared primitive selector
from [apache#24283](apache#24283), the same
selector used by apache#24102:

- Lists with up to four non-null values use the direct-comparison filter
from apache#23014.
- Lists with 5 or more use the shared 128-bit hash-set filter.

`Decimal128` is only a 16-byte container here; no decimal operations are
performed.

A longer input value cannot match a short list value because its encoded
length is different, so it can be rejected without reading its backing
bytes. If the list itself contains a value longer than 12 bytes,
DataFusion keeps using the general filter.

Null list entries do not affect this choice, but are still recorded for
SQL null behavior. After unwrapping any dictionary, the input and list
must use the same view type: `Utf8View` is not mixed with `BinaryView`,
and regular `Utf8` and `Binary` keep their existing paths.

## What changes are included in this PR?

- Adds the short-value path for `Utf8View` and `BinaryView`.
- Passes the 128-bit keys to the shared primitive selector instead of
making a separate filter choice.
- Keeps the general filter for longer list values or mismatched types.
- Preserves slices, dictionaries, nulls, `IN`, and `NOT IN`.

## Are these changes tested?

Tests cover both view types and both faster paths; the 4/5-value and
12/13-byte boundaries; long inputs and lists that require the general
filter; exact-type routing; slices and dictionaries; input and list
nulls; and `IN` and `NOT IN`.

## Are there any user-facing changes?

No. SQL results and public APIs are unchanged.

## Automated benchmark snapshot

[Automated
run](apache#24088 (comment))
on an aarch64 Neoverse V2 runner, comparing
[apache#24102](apache#24102) with this PR
at exact commit `00dd083e`. The benchmark evaluates 8,192-row batches
after filter construction. Lower is better.

All 15 reported rows improved, with a 35.9% geometric-mean time
reduction.

| Benchmark | Before | After | Change |
|---|---:|---:|---:|
| `utf8view/short_8b/list=4/match=0%` | 18.7 us | 11.6 us | -38.0%
(1.61x faster) |
| `utf8view/short_8b/list=4/match=50%` | 39.3 us | 11.6 us | -70.5%
(3.39x faster) |
| `utf8view/short_8b/list=16/match=0%` | 18.9 us | 14.1 us | -25.4%
(1.34x faster) |
| `utf8view/short_8b/list=16/match=50%` | 39.6 us | 30.1 us | -24.0%
(1.32x faster) |
| `utf8view/short_8b/list=64/match=0%` | 18.6 us | 13.4 us | -28.0%
(1.39x faster) |
| `utf8view/short_8b/list=64/match=50%` | 38.5 us | 28.4 us | -26.2%
(1.36x faster) |
| `utf8view/short_8b/list=256/match=0%` | 18.5 us | 13.4 us | -27.6%
(1.38x faster) |
| `utf8view/short_8b/list=256/match=50%` | 38.3 us | 25.7 us | -32.9%
(1.49x faster) |
| `utf8view/len_12b/list=16/match=0%` | 18.6 us | 15.4 us | -17.2%
(1.21x faster) |
| `utf8view/len_12b/list=16/match=50%` | 40.0 us | 18.3 us | -54.2%
(2.19x faster) |
| `utf8view/len_12b/list=64/match=0%` | 18.7 us | 13.7 us | -26.7%
(1.36x faster) |
| `utf8view/len_12b/list=64/match=50%` | 39.6 us | 25.9 us | -34.6%
(1.53x faster) |
| `nulls/utf8view/short_8b/list=16/match=50%/nulls=20%` | 38.7 us | 25.8
us | -33.3% (1.50x faster) |
| `nulls/utf8view/short_8b/list=16/match=50%/nulls=20%/NOT_IN` | 38.5 us
| 24.7 us | -35.8% (1.56x faster) |
| `nulls/utf8view/short_8b/list=16/match=50%/nulls=50%` | 29.2 us | 17.8
us | -39.0% (1.64x faster) |

---------

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
Closes apache#24462

55.1.0 has now been released. This PR brings in the changelog and
version number to `main`.

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

Closes apache#5332.

## Rationale for this change

Selecting a column that doesn't exist lists every field in the schema.
On a 200 column table that's about 2.8k characters, and the useful part
of the message - the name that wasn't found and the "Did you mean"
suggestion - ends up scrolled off the top.

```
> SELECT not_a_column FROM wide;
Error: Schema error: No field named not_a_column.
Valid fields are wide.col_0, wide.col_1, ... wide.col_199.
```

Filed in 2023, still reproduces.

## What changes are included in this PR?

Cap the list at 20 fields and summarise the rest:

```
Valid fields are wide.col_0, ... wide.col_19 and 180 others.
```

2.8k characters down to 356. Schemas at or under 20 fields print the
same as before, so the existing message assertions in dfschema.rs,
column.rs, expr_rewriter and the dataframe tests are untouched - they're
all well under that.

The issue suggested either dropping the list like Postgres does or
truncating it. I kept it and bounded it, since the list is useful on
narrow schemas and closest_valid_field already handles the common typo.
Happy to switch to the Postgres behaviour instead if you'd rather.

## Are these changes tested?

Four unit tests in datafusion/common/src/error.rs: a narrow schema,
exactly 20 fields, 21 fields (checks it says "1 other" not "1 others"),
and 200 fields.

cargo test -p datafusion-common: 608 passed. datafusion-expr --lib: 258
passed. cargo fmt clean.

Two things in my checkout that aren't from this change and reproduce on
unmodified main: the arrow_test_data doctest fails because the testing/
submodule isn't initialised, and clippy reports an unused import of
crate::config::TableParquetOptions.

## Are there any user-facing changes?

The wording of SchemaError::FieldNotFound when a schema has more than 20
fields. No API change.

---------

Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
## 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 apache#123` indicates that this PR will close issue apache#123.
-->

Part of apache#24727

## 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.

Please explain the problem you are trying to solve in terms of the
user-visible
behavior, rather than the implementation.

For example, "The code in `foo.rs` doesn't handle nulls" is a symptom of
the
implementation. "COUNT(DISTINCT) returns wrong results when the column
contains
nulls" is the user-visible problem.
-->

Reduce binary code size by reducing monomorphized code.

## 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.
-->

Extracted non-generic default method body implementations of
`ScalarUDFImpl`:
- `coerce_types`
- `schema_name`
- `return_field_from_args`
- `output_ordering`

Measurements:
`cargo llvm-lines --release -p datafusion-expr --lib | head -3`

Before (1d9a982):
```
  Lines                  Copies               Function name
  -----                  ------               -------------
  1247760                26213                (TOTAL)
```
After (7278ffd4fe7f):
```
  Lines                  Copies               Function name
  -----                  ------               -------------
  1247097                26207                (TOTAL)
```

`cargo build --profile release-nonlto --bin datafusion-cli && stat -f%z
../shared-cargo-target/release-nonlto/datafusion-cli`

Before (1d9a982):
```
186946400
```
After (7278ffd4fe7f):
```
186574320
```

So 663 fewer LLVM lines, 372 080 fewer bytes (non-lto build of
datafusion-cli)

## What is the testing strategy for this PR?

Just code-shuffling, no behaviour change.

<!--
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

Briefly describe how this PR is tested, and point to the specific tests
you added. For example: 'This new feature is covered by the
`sqllogictest` cases added in `foo.slt`'.

If this PR does not add tests, explain why. For example, if the change
is already covered by existing tests, please mention it.

You should also check the `codecov` bot reply on this PR to confirm the
changed code is exercised.
-->

## Are there any user-facing changes?

Slightly binary size, and maybe faster compilation.

<!--
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>
…Stream (apache#25158)

## Which issue does this PR close?

- Closes apache#24980
## Rationale for this change

`SingleHashAggregateStream` ignores the distinct soft limit pushed into
`AggregateExec`. As a result, single-stage `SELECT DISTINCT ... LIMIT n`
queries consume all input even after enough distinct groups have been
collected.

This change stops input consumption once the in-memory hash table
contains at least the requested number of distinct groups. Any existing
spills are merged before producing output, and the downstream limit
operator enforces the exact output row count.

If spilling has already occurred, the optimization is skipped to keep
the spill and replay path simple. In that case, the stream consumes the
remaining input and follows the existing spill merge path.

## What changes are included in this PR?

* Add a distinct soft-limit check to `SingleHashAggregateStream` after
processing each input batch.
- Stop consuming input when the soft limit is reached
  before spilling.
* Reuse the input-exhausted transition when the soft limit is reached,
preserving spill merging and output preparation.
* Document how the optimization applies to single-stage
  distinct aggregation.
- Update the `AggregateExec::limit_options` documentation to list
`SingleHash` as supporting distinct soft limits.
- Add an end-to-end SQL test that verifies:
    - the query is planned with a single-stage
    `AggregateExec`;
    - the distinct soft limit is pushed into the
    aggregate;
    - the aggregate stops consuming its input after
    reaching the soft limit;
    - the query returns the correct number of rows.
## Are these changes tested?

Added unit tests covering:

* Reaching the soft limit without spilling.
* Reaching the soft limit after spilling, preserving spilled groups and
deduplicating overlapping groups.
* Rejecting further input consumption after the soft limit is reached in
the spill case.

Following test commands have been executed and passed

- `cargo test --profile=ci --test sqllogictests`
- `cargo test -p datafusion`
- `cargo test -p datafusion-cli`
  
## Are there any user-facing changes?

Single-stage `DISTINCT` queries with a limit can stop consuming input
earlier, reducing unnecessary work. Query semantics are unchanged.
…#25236)

## Which issue does this PR close?

- Closes apache#25235.

## Rationale for this change

Calling schema_name to string is expensive

## What changes are included in this PR?

Uses a hashset of names to prevent reformatting the name

```
logical_unnest_plus_200_columns
                        time:   [1.0161 ms 1.0183 ms 1.0205 ms]
                        change: [−79.252% −79.058% −78.900%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe

logical_unnest_plus_1000_columns
                        time:   [14.751 ms 14.799 ms 14.849 ms]
                        change: [−86.220% −86.145% −86.079%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  6 (6.00%) high mild
  2 (2.00%) high severe

logical_unnest_in_200_exprs
                        time:   [3.1697 ms 3.1815 ms 3.1953 ms]
                        change: [−71.260% −71.088% −70.910%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) high mild
  3 (3.00%) high severe
```

## What is the testing strategy for this PR?

- Added benchmarks
- Added tests directed to `DedupedProjection`
- Added a sql logic test for a case @xudong963 identified in my initial
fix

## Are there any user-facing changes?

None
## Which issue does this PR close?

- Closes apache#24970.

## Rationale for this change

`INSERT` currently aligns source expressions with target columns by
storage `DataType` only. If both fields use the same storage type but
the target is an Arrow extension type, the cast is skipped and the DML
projection loses the target extension metadata. A table sink can then
receive a schema that does not describe the target logical type.

## What changes are included in this PR?

After storage-type coercion, compare the resulting field metadata with
the target table field. When they differ, use the existing field-aware
`Cast` representation to enforce the target metadata. Existing casts are
replaced rather than nested.

The regression uses an unannotated `FixedSizeBinary(16)` source and an
`arrow.uuid` target so the behavior is independent of any particular
downstream consumer. Existing parameterized UUID INSERT snapshots are
updated to show the target field-aware cast.

## What is the testing strategy for this PR?

- Added `plan_insert_preserves_target_extension_metadata`.
- Ran all 575 `datafusion-sql` integration tests.
- Ran `cargo clippy -p datafusion-sql --all-targets --all-features -- -D
warnings`.
- Ran `cargo fmt --all -- --check`.

## Are there any user-facing changes?

Yes. SQL `INSERT` plans now preserve target Arrow field metadata,
including extension metadata. There are no public API changes.
## Which issue does this PR close?

Related to apache#18083. Full support for NULL partition values remains
covered by that issue.

## Rationale for this change

Partitioned writes read partition values without checking their
validity. A NULL integer partition key can be written under `p=0`, so
reading the output turns NULL into zero and silently changes the data.

For example:

```sql
CREATE TABLE src(p INT, v INT) AS VALUES (NULL, 1), (0, 2);
COPY src TO '/tmp/null_partition/' STORED AS PARQUET PARTITIONED BY (p);
```

Both rows can end up in the zero partition. This PR rejects the write
with `NULL values are not supported for partition column 'p'`.

## What changes are included in this PR?

- Check logical nulls before extracting partition keys, including NULL
dictionary values referenced by valid dictionary indices.
- Continue accepting nullable columns when the selected rows contain no
NULL values.
- Add focused unit tests and a `copy.slt` regression covering rejection
and a filtered successful write.

## What is the testing strategy for this PR?

- The rejection regressions fail without the production fix and pass
with it.
- Focused partition-key tests: 5 passed with `RUST_BACKTRACE=1`.
- `cargo clippy --all-targets --all-features -- -D warnings` passed.
- The extended workspace Rust suites passed after excluding four host
memory-measurement runners that also fail on current main in this
environment.
- The SQL logic harness passed all 513 files, including encrypted
Parquet coverage.
- `cargo fmt --all -- --check` and `git diff --check` passed.

## Are there any user-facing changes?

Partitioned writes containing NULL partition keys now return an
execution error. Callers can filter or replace these values before
writing. Validation happens per batch, so files written by earlier
batches can remain after an error.
## Which issue does this PR close?

Related to apache#24258. This covers runtime operands, floating-point
literals, and volatile expressions in compound IN-list rewrites. The
NULL-semantics changes in that PR remain separate.

## Rationale for this change

The optimizer performs set intersection and difference using expression
equality. Different expressions can evaluate to the same value, so these
rewrites can remove matching rows even when every column is
non-nullable:

```sql
CREATE TABLE in_list_values(x INT NOT NULL, a INT NOT NULL, b INT NOT NULL)
AS VALUES (1, 1, 1);

SELECT x FROM in_list_values
WHERE x IN (a, 2, 10, 11) AND x IN (b, 5, 12, 13);
```

The query should return `1`; the rewrite produces an empty intersection
and returns no rows. Structural comparison also distinguishes positive
and negative floating-point zero. Deduplicating volatile operands can
change how many times they are evaluated.

## What changes are included in this PR?

- Restrict intersection and difference rewrites to non-null,
non-floating literals.
- Guard compound rewrites against volatile inputs and list items.
- Preserve valid union rewrites for nonvolatile runtime expressions.
- Add unit regressions for runtime values, signed zero, mixed integer
coercion, and volatility, plus runtime-value cases in `predicates.slt`.

## What is the testing strategy for this PR?

- The new regressions fail without the production fix and pass with it.
- Focused optimizer tests: 6 passed.
- `cargo clippy --all-targets --all-features -- -D warnings` passed.
- The extended workspace Rust suites passed after excluding four host
memory-measurement runners that also fail on current main in this
environment.
- The SQL logic harness passed all 513 files, including encrypted
Parquet coverage.
- `cargo fmt --all -- --check` and `git diff --check` passed.

## Are there any user-facing changes?

Affected compound IN predicates retain matching rows and preserve
volatile expression evaluations. No public API changes.

## Downsides

Queries excluded by the new guards may perform more comparisons because
the optimizer retains their original predicates.
## Which issue does this PR close?

No linked issue. The regression below reproduces the problem on current
upstream.

## Rationale for this change

Grouped CORR uses raw sums whose subtraction loses precision when values
have a large common offset. It can return a negative correlation for a
column correlated with itself:

```sql
SELECT g, corr(x, x)
FROM (VALUES
  (1, 1000000000.0),
  (1, 1000000007.0),
  (1, 1000000015.0),
  (2, 1.0)
) AS t(g, x)
GROUP BY g;
```

Group 1 can return `-1` instead of `1`.

## What changes are included in this PR?

- Use paired Welford updates and centered moments for grouped
correlation.
- Merge partial states using weighted mean differences, applying weights
before multiplying deltas to avoid avoidable intermediate overflow.
- Match the scalar CORR state layout across update, merge, singleton
conversion, and preserving/draining emission.
- Add regressions for large offsets, multiple batch sizes,
scalar/grouped state interchange, and large-range merges, plus a grouped
self-correlation case in `aggregate.slt`.

## What is the testing strategy for this PR?

- The large-offset and scalar/grouped state compatibility regressions
fail without the production fix and pass with it.
- Focused correlation tests: 7 passed.
- `cargo clippy --all-targets --all-features -- -D warnings` passed.
- The extended workspace Rust suites passed after excluding four host
memory-measurement runners that also fail on current main in this
environment.
- The SQL logic harness passed all 513 files, including encrypted
Parquet coverage.
- `cargo fmt --all -- --check` and `git diff --check` passed.
- H2O groupby q09 returned the same 6,320,797 rows on every run. Across
20 release-mode runs, current main averaged 479.5 ms and this PR
averaged 373.7 ms. Excluding each process's first run, the median was
333.9 ms on main and 312.7 ms on this PR, so the stability fix showed no
regression in this environment.

## Are there any user-facing changes?

Grouped CORR produces stable results for the covered large-offset
inputs. Floating-point results can differ in their final bits. SQL
signatures and output types remain unchanged.

## Downsides

Centered updates add arithmetic, including per-row divisions. The
grouped intermediate state representation changes from raw sums to
centered moments, so partial states produced by the old implementation
cannot be mixed with the new representation.
## Which issue does this PR close?

Closes a planner gap where `ORDER BY ALL` only accepted raw column
projections and was silently ignored for set-operation outputs.

## Rationale for this change

`ORDER BY ALL` means sorting by every output column in select-list
order. Expanding it to the equivalent 1-based ordinal keys supports
computed expressions, aliases, aggregate outputs, wildcard-expanded
projections, and set-operation outputs through one planner path.

The ordinal expansion also sorts already-projected columns rather than
evaluating computed expressions again. Physical execution remains on
DataFusion's existing vectorized `SortExec`; this adds no row-wise
conversion or custom physical operator.

## What changes are included?

- expand `OrderByKind::All` to ordinal `OrderByExpr`s from the output
width
- provide output width for non-`SELECT` set expressions instead of
dropping `ORDER BY ALL`
- add focused execution coverage for computed expressions, null-order
options, set operations, and aggregate output

## Are these changes tested?

- `cargo +1.95.0 test -p datafusion-sqllogictest --test sqllogictests --
order_by_all.slt --test-threads 1`
- `cargo +1.95.0 test -p datafusion-sql --test sql_integration --
--test-threads 8` (591 passed)
- `cargo +1.95.0 clippy -p datafusion-sql --all-targets -- -D warnings`
- `cargo +1.95.0 fmt --all -- --check`

Snowflake dialect parsing support is proposed independently in
apache/datafusion-sqlparser-rs#2502; this planner change is generic to
every dialect that already emits `OrderByKind::All`.
## Which issue does this PR close?

- Closes apache#23920

## Rationale for this change

just more uses of the new property and comment on some non strictly
order preserving for why not

## What changes are included in this PR?

marked if something is order preserving or not, for those who are not
I've added a comment why not, since some expressions might be confusing
why not

## Are these changes tested?
no

## Are there any user-facing changes?
not api ones
## Which issue does this PR close?

- Part of apache#21048. The issue stays open for the other checklist items.

## Rationale for this change

`dev/rust_lint.sh` is the local mirror of the CI lint jobs, but it does
not run the Markdown link check. CI runs
`ci/scripts/markdown_link_check.sh` in `dev.yml`. A developer can push a
broken internal link after a clean local lint run and then see the
failure only in CI. This PR adds the existing checker to the local
suite.

## What changes are included in this PR?

- `dev/rust_lint.sh` runs `ci/scripts/markdown_link_check.sh` as a
read-only step, after the workflow install check and before the Rust
documentation build. The `--write` and `--allow-dirty` flags never reach
it.
- The runner loads `LYCHEE_VERSION` from
`ci/scripts/utils/tool_versions.sh` and installs that version when
`lychee` is missing. An installed `lychee` is used as is, which is the
runner's existing policy for other tools.
- `ci/scripts/markdown_link_check.sh` becomes executable, because the
runner invokes each registered script directly. The script body,
`lychee.toml`, the file selection, and the GitHub workflow do not
change.
- `docs/source/contributor-guide/testing.md` documents the new behavior
and keeps the standalone instructions.

## What is the testing strategy for this PR?

- A disposable fixture with stubbed steps and tools: the checker runs
once with no arguments in check mode and in both write modes, a missing
`lychee` triggers exactly the pinned install command, a present `lychee`
triggers no install, and a checker failure stops the suite before the
later steps.
- A disposable clone with an injected broken internal link: the
standalone checker and `./dev/rust_lint.sh` both fail with the same exit
code and name the file. After the fix, the full suite passes.
- The real checker and the full `./dev/rust_lint.sh` pass on this branch
with `lychee` 0.23.0.

## Are there any user-facing changes?

No. Developers get the link check in the local lint suite. CI is
unchanged.

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

Closes apache#25239. Follows up on apache#21907 and [Arrow
apache#6485](apache/arrow-rs#6485).

## Rationale for this change

An absent Parquet `null_count` is unknown. Treating it as zero can
discard NULL rows during `NULLS FIRST` TopK and `IS NULL` pruning, and
let metadata-only `COUNT(column)` return an incorrect result.

## What changes are included in this PR?

Preserve missing null counts in the shared row-group statistics adapter
and file statistics. Remove the per-caller compatibility flag so static
pruning, runtime pruning, and fully matched proofs use the same
interpretation. Add an upgrade guide covering affected writers, plan
changes, and migration.

## What is the testing strategy for this PR?

Regressions cover missing and explicit-zero counts, static pruning,
file-statistics precision, `COUNT`, and TopK with ASC/DESC, NULLS
FIRST/LAST, and dynamic pruning enabled/disabled. The affected cases
fail without the fix. Extended workspace tests, strict
all-target/all-feature Clippy, and the full lint suite pass.

## Are there any user-facing changes?

Correct results for Parquet files with missing null counts. Affected
files can lose `IS NULL` pruning, metadata-only `COUNT(column)`, and
`NULLS FIRST` TopK pruning. Sort pushdown can also retain a full
`SortExec` for `ORDER BY` on nullable columns, even when files are
sorted and non-overlapping.

This includes older files written with parquet-rs before 53.1.0, used by
DataFusion releases before 42.1.0. The DataFusion 56 upgrade guide
explains how to identify and rewrite affected files. Explicit counts
retain their existing behavior. No public API changes.

---------

Signed-off-by: peterxcli <peterxcli@gmail.com>
## Which issue does this PR close?

- N/A

## Rationale for this change

Periodic update to latest stable Rust toolchain.

## What changes are included in this PR?

* Bump pinned toolchain
* Bump `depcheck` sub-workspace toolchain
* Update a few references in docs
* Remove `from_iter_instead_of_collect` from workspace clippy allow list
(lint was removed in 1.98)
* Resolve new clippy warnings that appear with clippy 1.98

## What is the testing strategy for this PR?

Compiles cleanly, all clippy / lint checks pass with no new warnings.

## Are there any user-facing changes?

No.
…chain (apache#25286)

## 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 apache#123` indicates that this PR will close issue apache#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.

Please explain the problem you are trying to solve in terms of the
user-visible
behavior, rather than the implementation.

For example, "The code in `foo.rs` doesn't handle nulls" is a symptom of
the
implementation. "COUNT(DISTINCT) returns wrong results when the column
contains
nulls" is the user-visible problem.
-->
`datafusion::physical_plan::joins::chain` is a public module with no
public member.

See
https://docs.rs/datafusion/latest/datafusion/physical_plan/joins/chain/index.html

I think it was made public by mistake, this PR revert this module to
private.

## 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.
-->

## What is the testing strategy for this PR?

<!--
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

Briefly describe how this PR is tested, and point to the specific tests
you added. For example: 'This new feature is covered by the
`sqllogictest` cases added in `foo.slt`'.

If this PR does not add tests, explain why. For example, if the change
is already covered by existing tests, please mention it.

You should also check the `codecov` bot reply on this PR to confirm the
changed code is exercised.
-->

## 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 apache#123` indicates that this PR will close issue apache#123.
-->

- Closes apache#24318 

## 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.

Please explain the problem you are trying to solve in terms of the
user-visible
behavior, rather than the implementation.

For example, "The code in `foo.rs` doesn't handle nulls" is a symptom of
the
implementation. "COUNT(DISTINCT) returns wrong results when the column
contains
nulls" is the user-visible problem.
-->
See issue

## 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.
-->

## What is the testing strategy for this PR?

<!--
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

Briefly describe how this PR is tested, and point to the specific tests
you added. For example: 'This new feature is covered by the
`sqllogictest` cases added in `foo.slt`'.

If this PR does not add tests, explain why. For example, if the change
is already covered by existing tests, please mention it.

You should also check the `codecov` bot reply on this PR to confirm the
changed code is exercised.
-->
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.
-->
No.
## Which issue does this PR close?

- Part of apache#318.
- Umbrella PR: apache#23738.
- All required ASOF feature layers (apache#23828 through apache#23832) are merged.

## Rationale for this change

This is the final core benchmark layer of the ASOF JOIN stack. It uses
the
standard SQL benchmark framework so the workloads share the existing
runner,
result format, and Criterion mode.

## What changes are included in this PR?

- Add an `asof_join` SQL benchmark suite, runnable with
  `./bench.sh run asof_join` or `benchmark_runner`.
- Add seven workloads covering relative input sizes, available ordering,
equality-group cardinality and skew, match direction, and payload width.
- Describe each workload and its explicit ASOF match semantics in the
query.
- Generate pre-sorted Parquet inputs under `DATA_DIR/asof_join` with
`./bench.sh data asof_join`. The benchmark load hook only registers them
with
`WITH ORDER`, keeping data generation and input sorting outside the
measured
  query.
- Assert that every workload plans to `AsOfJoinExec`.

## Are these changes tested?

Yes:

- `cargo fmt --all`
- `./ci/scripts/doc_prettier_check.sh --write --allow-dirty`
- `cargo clippy --all-targets --all-features -- -D warnings`
- `cargo test -p datafusion-benchmarks --lib --bins`
- `DATA_DIR=/tmp/asof_join CARGO_COMMAND='cargo run' ./bench.sh data
asof_join`
- `DATA_DIR=/tmp/asof_join CARGO_COMMAND='cargo run' ./bench.sh run
asof_join 7`
- `cargo run -p datafusion-benchmarks --bin benchmark_runner --
asof_join --iterations 1 --partitions 4 --path /tmp/asof_join`
- `cargo run -p datafusion-benchmarks --bin benchmark_runner --
asof_join --query 7 --partitions 4 --path /tmp/asof_join --criterion`

The pre-sorted workload's physical plan contains `AsOfJoinExec` without
an
input `SortExec`. These smoke runs validate the suite and are not
presented as
performance claims.

## Are there any user-facing changes?

This adds ASOF workloads to the repository benchmark tooling. It does
not
change query semantics or runtime behavior.

This is the final core item tracked by apache#23738. It does not depend on the
optional floating-point follow-up apache#24375.
…pache#25193)

- ATM, the Parquet file schema type coercion applies view transforms for
example only on top-level fields, but not on nested fields.
- For some Parquet schemas, where we request a view transform for a
nested field, this is translated to an unmodified schema passed to the
reader. Then, when we try to apply predicates on the actual data on that
nested field, the actual predicate execution needs a cast, because the
schemas are different - the predicate refers to a string view, but the
actual data schema refers to a string

## Which issue does this PR close?

- Closes apache#25192 

## Rationale for this change

- Rationale is explained in apache#25192 
- Also, I don't see any reason (explicit comments) why this function
would not work on deeply nested schemas

## What changes are included in this PR?

- Modification of the `apply_file_schema_type_coercions` function to
work on nested fields
- Respective tests for the functionality

## What is the testing strategy for this PR?

- All tests pass
- Newly added unit tests pass

## Are there any user-facing changes?

- Unsure ? Probably not ? The documentation in the function does NOT
explicitly say the current behavior.
## Which issue does this PR close?

- Closes apache#23022.

## Rationale for this change

Predicate subqueries such as `EXISTS`, `IN`, and `NOT IN` are valid
scalar expressions in a `SELECT` list, but DataFusion currently only
decorrelates them when they appear in filters. Projection queries
therefore reach physical planning with an unsupported logical subquery
expression.

This continues the work from the now-closed stale apache#23039 and covers
multiple and correlated projection subqueries as well as SQL null
semantics.

## What changes are included in this PR?

- decorrelate `EXISTS`, `NOT EXISTS`, `IN`, and `NOT IN` expressions
inside projections into mark joins
- materialize projected `IN`/`NOT IN` values with SQL three-valued logic
by tracking matches, nulls, and empty subqueries
- preserve projection output names and avoid duplicate columns in
correlated subquery projections

## What is the testing strategy for this PR?

Optimizer plan tests cover projected `IN` rewriting. New SQLLogicTest
cases cover uncorrelated and correlated `EXISTS`/`IN`, multiple
subqueries in one projection, empty inputs, null inputs, and `NOT IN`
three-valued logic.

Locally validated with:
- `cargo test -p datafusion-optimizer decorrelate_predicate_subquery`
(53 passed)
- `cargo test -p datafusion-sqllogictest --test sqllogictests --
subquery_projection`
- `cargo clippy -p datafusion-optimizer --all-targets --all-features --
-D warnings`
- `cargo fmt --all -- --check`

## Are there any user-facing changes?

Yes. Predicate subqueries can now be evaluated as projected scalar
expressions. There are no public API changes.
## Which issue does this PR close?

Fixes the [security audit
failure](https://github.com/apache/datafusion/actions/runs/34914826729/job/104210077720)
caused by
[RUSTSEC-2026-0285](https://rustsec.org/advisories/RUSTSEC-2026-0285.html).

## Rationale for this change

The locked rustls 0.23.39 accepts TLS 1.3 handshake messages across
encryption level boundaries and now fails the security audit. Rustls
0.23.45 fixes the vulnerability.

## What changes are included in this PR?

Update rustls to 0.23.45 in Cargo.lock, together with its required
aws-lc-rs, aws-lc-sys, and rustls-webpki dependency updates.

## What is the testing strategy for this PR?

The existing security audit reproduces the vulnerability with the
original lockfile and passes with the updated lockfile:

```sh
cargo audit --ignore RUSTSEC-2026-0194 --ignore RUSTSEC-2026-0195
```

The workspace extended tests also pass:

```sh
RUST_BACKTRACE=1 cargo test --profile ci \
    --exclude datafusion-examples --exclude datafusion-benchmarks --exclude datafusion-cli \
    --workspace --lib --tests --bins \
    --features avro,json,backtrace,extended_tests,recursive_protection,parquet_encryption
```

Also passed `cargo fmt --all`, `cargo clippy --all-targets
--all-features -- -D warnings`, and `./dev/rust_lint.sh`.

## Are there any user-facing changes?

Builds using the checked-in lockfile use the patched TLS implementation.
No DataFusion API changes.
…ng (apache#25261)

## Which issue does this PR close?

- Closes apache#25260.

## Rationale for this change

A malformed `null_regex` panics the query task instead of returning an
error.
`CsvFormat::infer_schema_from_stream` compiled the pattern with

```rust
let regex = Regex::new(null_regex.as_str())
    .expect("Unable to parse CSV null regex.");
```

so any pattern the `regex` crate rejects aborted the task. It is
reachable
straight from SQL, through a `CREATE EXTERNAL TABLE` that leaves its
columns to
schema inference:

```sql
CREATE EXTERNAL TABLE t STORED AS CSV LOCATION 'data.csv'
OPTIONS ('format.has_header' 'true', 'format.null_regex' '(');
```

```
task 9 panicked with message "Unable to parse CSV null regex.: Syntax(
regex parse error:
    (
    ^
error: unclosed group
)"
```

An invalid regex is a bad option value, not an internal invariant, so it
should
come back as an error naming the pattern.

## What changes are included in this PR?

The regex is compiled once, before the per-chunk loop, and a failure is
propagated with `exec_datafusion_err!` rather than panicking. Hoisting
it also
stops the pattern being recompiled for every chunk of the inference
stream.

The error text matches the one used on the read side in apache#25254, so the
same bad
option reads the same whichever path hits it first.

## What is the testing strategy for this PR?

A `statement error Unable to parse CSV null regex` case in
`datafusion/sqllogictest/test_files/csv_files.slt`.

I checked it is not vacuous: with this change reverted, that case fails
with the
panic quoted above rather than an error, so the test reproduces the bug.

`cargo fmt --check`, `cargo clippy --all-targets` and the crate's unit
tests are
clean.

## Are there any user-facing changes?

An invalid `null_regex` now produces an error and leaves the session
usable,
where it previously panicked the task. No API changes.

Independent of apache#25254 — that one is the read path in `source.rs`, this
is the
inference path in `file_format.rs` — but they touch the same crate, so
whichever
lands second may want a trivial rebase.

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

None; found by sweeping the scalar functions with edge-case arguments.

## Rationale for this change

`array_resize` with a negative size raises an internal error, which
tells the
caller they hit a DataFusion bug and asks them to open a report:

```console
> SELECT array_resize(make_array(1,2,3), -1, 0);
Internal error: array_resize: failed to convert size to usize.
This issue was likely caused by a bug in DataFusion's code. Please help us to
resolve this by filing a bug report in our issue tracker: https://github.com/apache/datafusion/issues
```

The size is an argument to the query, so a negative value is the
caller's input
rather than a broken internal invariant. Sending someone to the issue
tracker
for their own argument is misleading, and it hides what was actually
wrong.

The behaviour was already meant to be an error. `array_resize.slt` has
expected
this call to fail since before this change, but with a bare `query
error`, so
the internal error satisfied it and went unnoticed.

## What changes are included in this PR?

Reject a negative size with an execution error naming the value, which
matches
how the neighbouring maximum-size check already reports bad input:

```console
> SELECT array_resize(make_array(1,2,3), -1, 0);
Execution error: array_resize: size must not be negative, got -1
```

Valid input is untouched: `0` still returns `[]`, `5` still grows to
`[1, 2, 3, 9, 9]`, and a NULL size still returns NULL.

## Are these changes tested?

Yes. The slt file gains the negative case for both `List` and
`LargeList`, plus
`i64::MIN` for the boundary, each pinned to the new message so a
regression back
to an internal error fails the suite.

```console
$ cargo test -p datafusion-sqllogictest --test sqllogictests -- array
Progress: 53/53 files completed (100%)

$ cargo test -p datafusion-functions-nested --lib resize
test result: ok. 4 passed; 0 failed
```

The pre-existing `query error` case for `-5` still passes, so the
contract that
a negative size fails is unchanged.

## Are there any user-facing changes?

The error for a negative size changes from an internal error to an
execution
error with a clear message. No valid call changes behaviour, and no API
changes.

---------

Signed-off-by: 1fanwang <1fannnw@gmail.com>
Co-authored-by: Neil Conway <neil.conway@gmail.com>
Co-authored-by: Jeffrey Vo <jeffrey.vo.australia@gmail.com>
…4979)

## 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 apache#123` indicates that this PR will close issue apache#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.

Please explain the problem you are trying to solve in terms of the
user-visible
behavior, rather than the implementation.

For example, "The code in `foo.rs` doesn't handle nulls" is a symptom of
the
implementation. "COUNT(DISTINCT) returns wrong results when the column
contains
nulls" is the user-visible problem.
-->

`PartialSortStream` concatenates each incoming batch with the buffered
incomplete prefix before looking for a completed prefix boundary.

When one prefix spans multiple batches, this repeatedly copies rows
accumulated from earlier batches. When a batch contains multiple
completed prefix groups, the completed region is also sorted using the
full ordering even though the prefix ordering is already satisfied.

This adds unnecessary copying and sorting work, especially for wide
batches and workloads containing multiple prefix groups per batch.

## 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.
-->

- Keep the unfinished trailing prefix as a list of `RecordBatch` slices
instead of concatenating it with every incoming batch.
- Detect completed prefix groups within each batch and compare prefix
expression results directly across batch boundaries.
- Sort completed groups only by the remaining suffix ordering.
- Concatenate a single completed prefix at most once.
- For multiple completed prefixes, evaluate suffix expressions once per
source batch and materialize the final output with one interleave
operation.
- Preserve fetch handling, input release, empty-batch handling, and
zero-column batch semantics.

## What is the testing strategy for this PR?

<!--
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

Briefly describe how this PR is tested, and point to the specific tests
you added. For example: 'This new feature is covered by the
`sqllogictest` cases added in `foo.slt`'.

If this PR does not add tests, explain why. For example, if the change
is already covered by existing tests, please mention it.

You should also check the `codecov` bot reply on this PR to confirm the
changed code is exercised.
-->

The implementation is covered by the existing `PartialSortExec` unit
tests and the additional SQL logic test cases in `group_by.slt`.

## 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.
-->

No. This is an internal performance improvement.

## Benchmark
```
group                                 main                                   optimized
-----                                 ----                                   ---------
partial_sort/rows_per_prefix/100      3.10     12.1±0.13ms        ? ?/sec    1.00      3.9±0.05ms        ? ?/sec
partial_sort/rows_per_prefix/1000     4.17     13.2±0.07ms        ? ?/sec    1.00      3.2±0.14ms        ? ?/sec
partial_sort/rows_per_prefix/10000    1.30      2.8±0.02ms        ? ?/sec    1.00      2.1±0.07ms        ? ?/sec
partial_sort/rows_per_prefix/20000    1.41      3.0±0.22ms        ? ?/sec    1.00      2.1±0.15ms        ? ?/sec
partial_sort/rows_per_prefix/5000     3.85     12.4±0.27ms        ? ?/sec    1.00      3.2±0.03ms        ? ?/sec
partial_sort/rows_per_prefix/8192     1.56      2.8±0.05ms        ? ?/sec    1.00  1780.8±34.70µs        ? ?/sec
```
@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / Security Evidence

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 1530 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / PR Risk Taxonomy

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

PR taxonomy review recommended (neutral)

Detected 7 PR taxonomy bucket(s): Security Evidence, Harness Drift, Install Manifest Integrity, CI/CD Recommendation, Cost/Token Risk, PR Review/Salvage Evidence, Agent Config Review.

Scanned 1530 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • Auth or permission changes may ship without security regression coverage
  • 20 security-sensitive path(s) changed

Paths:

  • .github/workflows/audit.yml
  • .github/workflows/breaking_changes_detector.yml
  • .github/workflows/codeql.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/dev.yml
  • .github/workflows/docs.yaml
  • .github/workflows/docs_pr.yaml
  • .github/workflows/extended.yml

Harness Drift

Harness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces.

Signals:

  • 1 harness-facing path(s) changed

Paths:

  • AGENTS.md

Install Manifest Integrity

Install manifests, plugin metadata, and shipped skills should stay synchronized with user-facing setup guidance.

Signals:

  • 1 install or manifest path(s) changed

Paths:

  • datafusion/wasmtest/datafusion-wasm-app/package-lock.json

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • Regression coverage may lag behind the diff
  • Data-layer changes may ship without integration coverage
  • Runtime config changes may ship without example or template updates
  • Async job or webhook changes may ship without reliability coverage
  • CLI changes may ship without shell or end-to-end coverage
  • CI workflow changes may ship without failure-mode evidence
  • 12 CI or workflow path(s) changed

Paths:

  • .github/workflows/audit.yml
  • .github/workflows/breaking_changes_detector.yml
  • .github/workflows/codeql.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/dev.yml
  • .github/workflows/docs.yaml
  • .github/workflows/docs_pr.yaml
  • .github/workflows/extended.yml

Cost/Token Risk

AI routing, usage, and token-budget changes should include budget or usage-limit evidence.

Signals:

  • 4 cost/token path(s) changed

Paths:

  • benchmarks/sql_benchmarks/predicate_eval/benchmarks/cost/q10.benchmark
  • benchmarks/sql_benchmarks/predicate_eval/benchmarks/cost/q11.benchmark
  • benchmarks/sql_benchmarks/predicate_eval/queries/cost/q10.sql
  • benchmarks/sql_benchmarks/predicate_eval/queries/cost/q11.sql

PR Review/Salvage Evidence

PR review, stale-closure, and triage automation should carry stale-closure, reviewer-thread, and reopen-flow evidence so useful closed work can still be salvaged.

Signals:

  • PR review or stale-closure automation may ship without salvage evidence
  • 2 PR review/salvage path(s) changed

Paths:

  • .github/pull_request_template.md
  • docs/source/contributor-guide/pr_review.md

Agent Config Review

Agent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration.

Signals:

  • 1 agent-config path(s) changed

Paths:

  • AGENTS.md

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / Reference Set Readiness

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

Reference set readiness gaps detected (neutral)

Reference evidence present for 2/7 areas (29%) across 1530 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Present benchmarks/README.md, benchmarks/bench.sh, benchmarks/benches/sql.rs
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Present .github/workflows/audit.yml, .github/workflows/codeql.yml, ci/scripts/security_audit.sh
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / Hosted Promotion Readiness

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 1530 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / PR Config Audit

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

No changed-config issues detected (success)

Scanned 12 config file(s) present at this commit across 12 changed config path(s) and found no issues in the supported security rules.

Changed config files:

  • .github/workflows/audit.yml
  • .github/workflows/breaking_changes_detector.yml
  • .github/workflows/codeql.yml
  • .github/workflows/dependencies.yml
  • .github/workflows/dev.yml
  • .github/workflows/docs.yaml
  • .github/workflows/docs_pr.yaml
  • .github/workflows/extended.yml
  • .github/workflows/large_files.yml
  • .github/workflows/release_version_labeler.yaml
  • .github/workflows/rust.yml
  • AGENTS.md

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 29, 2026

Copy link
Copy Markdown

ECC Tools / PR Harness Audit

Commit: 1e483db286cd6b9c6d5b0a04cf3fa41f665d1bae

Harness warnings detected (neutral)

Scanned 12 changed config file(s) and found 1 harness issue(s).

  • [medium] ECC manifest missing (AGENTS.md)

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@yiaany

yiaany commented Sep 29, 2026

Copy link
Copy Markdown
Owner Author

Closing this incorrectly targeted PR: the fork's main branch is stale. I will submit the one-line change against apache/datafusion main, where its diff is one line.

@yiaany yiaany closed this Sep 29, 2026
@yiaany
yiaany deleted the docs/preserve-release-snapshots branch September 29, 2026 17:27
@yiaany
yiaany restored the docs/preserve-release-snapshots branch September 29, 2026 17:28
@github-actions

Copy link
Copy Markdown

Thank you for opening this pull request!

Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch).

Details
     Cloning apache/main
    Building datafusion v55.1.0 (current)
       Built [  62.408s] (current)
     Parsing datafusion v55.1.0 (current)
      Parsed [   0.039s] (current)
    Building datafusion v55.0.0 (baseline)
       Built [  60.103s] (baseline)
     Parsing datafusion v55.0.0 (baseline)
      Parsed [   0.039s] (baseline)
    Checking datafusion v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.864s] 196 checks: 195 pass, 1 fail, 0 warn, 58 skip

--- failure method_requires_different_generic_type_params: method now requires a different number of generic type parameters ---

Description:
A method now requires a different number of generic type parameters than it used to. Uses of this method that supplied the previous number of generic types will be broken.
        ref: https://doc.rust-lang.org/reference/items/generics.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/method_requires_different_generic_type_params.ron

Failed in:
  datafusion::prelude::dataframe::DataFrame::from_columns takes 1 generic types instead of 0, in /home/runner/work/datafusion/datafusion/datafusion/core/src/dataframe/mod.rs:2732
  datafusion::dataframe::DataFrame::from_columns takes 1 generic types instead of 0, in /home/runner/work/datafusion/datafusion/datafusion/core/src/dataframe/mod.rs:2732
  datafusion::prelude::DataFrame::from_columns takes 1 generic types instead of 0, in /home/runner/work/datafusion/datafusion/datafusion/core/src/dataframe/mod.rs:2732

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [ 125.500s] datafusion
    Building datafusion-catalog v55.1.0 (current)
       Built [  43.029s] (current)
     Parsing datafusion-catalog v55.1.0 (current)
      Parsed [   0.027s] (current)
    Building datafusion-catalog v55.0.0 (baseline)
       Built [  41.618s] (baseline)
     Parsing datafusion-catalog v55.0.0 (baseline)
      Parsed [   0.027s] (baseline)
    Checking datafusion-catalog v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.140s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  86.063s] datafusion-catalog
    Building datafusion-catalog-listing v55.1.0 (current)
       Built [  46.104s] (current)
     Parsing datafusion-catalog-listing v55.1.0 (current)
      Parsed [   0.012s] (current)
    Building datafusion-catalog-listing v55.0.0 (baseline)
       Built [  42.670s] (baseline)
     Parsing datafusion-catalog-listing v55.0.0 (baseline)
      Parsed [   0.015s] (baseline)
    Checking datafusion-catalog-listing v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.101s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  89.984s] datafusion-catalog-listing
    Building datafusion-cli v55.1.0 (current)
       Built [ 102.531s] (current)
     Parsing datafusion-cli v55.1.0 (current)
      Parsed [   0.036s] (current)
    Building datafusion-cli v55.0.0 (baseline)
       Built [  96.064s] (baseline)
     Parsing datafusion-cli v55.0.0 (baseline)
      Parsed [   0.036s] (baseline)
    Checking datafusion-cli v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.161s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [ 201.569s] datafusion-cli
    Building datafusion-common v55.1.0 (current)
       Built [  34.533s] (current)
     Parsing datafusion-common v55.1.0 (current)
      Parsed [   0.069s] (current)
    Building datafusion-common v55.0.0 (baseline)
       Built [  34.749s] (baseline)
     Parsing datafusion-common v55.0.0 (baseline)
      Parsed [   0.069s] (baseline)
    Checking datafusion-common v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.909s] 196 checks: 195 pass, 1 fail, 0 warn, 58 skip

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ExecutionOptions.enable_nlj_coordinated_fallback in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:896
  field ExecutionOptions.soft_max_bytes_per_output_file in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:896

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  71.469s] datafusion-common
    Building datafusion-datasource v55.1.0 (current)
       Built [  46.014s] (current)
     Parsing datafusion-datasource v55.1.0 (current)
      Parsed [   0.035s] (current)
    Building datafusion-datasource v55.0.0 (baseline)
       Built [  43.624s] (baseline)
     Parsing datafusion-datasource v55.0.0 (baseline)
      Parsed [   0.037s] (baseline)
    Checking datafusion-datasource v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.347s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  91.210s] datafusion-datasource
    Building datafusion-datasource-arrow v55.1.0 (current)
       Built [  46.002s] (current)
     Parsing datafusion-datasource-arrow v55.1.0 (current)
      Parsed [   0.012s] (current)
    Building datafusion-datasource-arrow v55.0.0 (baseline)
       Built [  45.233s] (baseline)
     Parsing datafusion-datasource-arrow v55.0.0 (baseline)
      Parsed [   0.012s] (baseline)
    Checking datafusion-datasource-arrow v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.086s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  94.737s] datafusion-datasource-arrow
    Building datafusion-datasource-avro v55.1.0 (current)
       Built [  47.622s] (current)
     Parsing datafusion-datasource-avro v55.1.0 (current)
      Parsed [   0.013s] (current)
    Building datafusion-datasource-avro v55.0.0 (baseline)
       Built [  46.233s] (baseline)
     Parsing datafusion-datasource-avro v55.0.0 (baseline)
      Parsed [   0.011s] (baseline)
    Checking datafusion-datasource-avro v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.087s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  95.118s] datafusion-datasource-avro
    Building datafusion-datasource-csv v55.1.0 (current)
       Built [  46.206s] (current)
     Parsing datafusion-datasource-csv v55.1.0 (current)
      Parsed [   0.012s] (current)
    Building datafusion-datasource-csv v55.0.0 (baseline)
       Built [  43.925s] (baseline)
     Parsing datafusion-datasource-csv v55.0.0 (baseline)
      Parsed [   0.013s] (baseline)
    Checking datafusion-datasource-csv v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.122s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  91.312s] datafusion-datasource-csv
    Building datafusion-datasource-json v55.1.0 (current)
       Built [  46.761s] (current)
     Parsing datafusion-datasource-json v55.1.0 (current)
      Parsed [   0.014s] (current)
    Building datafusion-datasource-json v55.0.0 (baseline)
       Built [  45.497s] (baseline)
     Parsing datafusion-datasource-json v55.0.0 (baseline)
      Parsed [   0.014s] (baseline)
    Checking datafusion-datasource-json v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.104s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  93.444s] datafusion-datasource-json
    Building datafusion-datasource-parquet v55.1.0 (current)
       Built [  53.888s] (current)
     Parsing datafusion-datasource-parquet v55.1.0 (current)
      Parsed [   0.040s] (current)
    Building datafusion-datasource-parquet v55.0.0 (baseline)
       Built [  52.731s] (baseline)
     Parsing datafusion-datasource-parquet v55.0.0 (baseline)
      Parsed [   0.039s] (baseline)
    Checking datafusion-datasource-parquet v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.192s] 196 checks: 194 pass, 2 fail, 0 warn, 58 skip

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_missing.ron

Failed in:
  function datafusion_datasource_parquet::file_format::fetch_parquet_metadata, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:654
  function datafusion_datasource_parquet::fetch_parquet_metadata, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:654
  function datafusion_datasource_parquet::file_format::fetch_statistics, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:677
  function datafusion_datasource_parquet::fetch_statistics, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:677
  function datafusion_datasource_parquet::file_format::statistics_from_parquet_meta_calc, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:699
  function datafusion_datasource_parquet::statistics_from_parquet_meta_calc, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/file_format.rs:699

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/inherent_method_missing.ron

Failed in:
  ParquetSource::predicate, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/datasource-parquet/src/source.rs:395

     Summary semver requires new major version: 2 major and 0 minor checks failed
    Finished [ 108.217s] datafusion-datasource-parquet
    Building datafusion-execution v55.1.0 (current)
       Built [  32.928s] (current)
     Parsing datafusion-execution v55.1.0 (current)
      Parsed [   0.031s] (current)
    Building datafusion-execution v55.0.0 (baseline)
       Built [  32.415s] (baseline)
     Parsing datafusion-execution v55.0.0 (baseline)
      Parsed [   0.030s] (baseline)
    Checking datafusion-execution v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.336s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  66.859s] datafusion-execution
    Building datafusion-expr v55.1.0 (current)
       Built [  31.278s] (current)
     Parsing datafusion-expr v55.1.0 (current)
      Parsed [   0.088s] (current)
    Building datafusion-expr v55.0.0 (baseline)
       Built [  30.665s] (baseline)
     Parsing datafusion-expr v55.0.0 (baseline)
      Parsed [   0.087s] (baseline)
    Checking datafusion-expr v55.0.0 -> v55.1.0 (minor change)
     Checked [   1.571s] 196 checks: 193 pass, 2 fail, 1 warn, 58 skip

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_variant_added.ron

Failed in:
  variant LogicalPlan:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/plan.rs:304
  variant LogicalPlan:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/plan.rs:304
  variant DdlStatement:CreateExternalCatalog in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:54
  variant DdlStatement:DropCatalog in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:64
  variant DdlStatement:CreateExternalCatalog in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:54
  variant DdlStatement:DropCatalog in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:64

--- failure struct_marked_non_exhaustive: struct marked #[non_exhaustive] ---

Description:
A public struct has been marked #[non_exhaustive], which will prevent it from being constructed using a struct literal outside of its crate. It previously had no private fields, so a struct literal could be used to construct it outside its crate.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/struct_marked_non_exhaustive.ron

Failed in:
  struct MergeIntoOp in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/dml.rs:320
  struct MergeIntoOp in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/dml.rs:320
  struct MergeIntoOp in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/dml.rs:320
  struct MergeIntoOp in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/dml.rs:320

--- warning partial_ord_enum_variants_reordered: enum variants reordered in #[derive(PartialOrd)] enum ---

Description:
A public enum that derives PartialOrd had its variants reordered. #[derive(PartialOrd)] uses the enum variant order to set the enum's ordering behavior, so this change may break downstream code that relies on the previous order.
        ref: https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html#derivable
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/partial_ord_enum_variants_reordered.ron

Failed in:
  DdlStatement::CreateIndex moved from position 6 to 7, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:56
  DdlStatement::DropTable moved from position 7 to 8, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:58
  DdlStatement::DropView moved from position 8 to 9, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:60
  DdlStatement::DropCatalogSchema moved from position 9 to 10, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:62
  DdlStatement::CreateFunction moved from position 10 to 12, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:67
  DdlStatement::DropFunction moved from position 11 to 13, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:69
  DdlStatement::CreateIndex moved from position 6 to 7, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:56
  DdlStatement::DropTable moved from position 7 to 8, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:58
  DdlStatement::DropView moved from position 8 to 9, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:60
  DdlStatement::DropCatalogSchema moved from position 9 to 10, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:62
  DdlStatement::CreateFunction moved from position 10 to 12, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:67
  DdlStatement::DropFunction moved from position 11 to 13, in /home/runner/work/datafusion/datafusion/datafusion/expr/src/logical_plan/ddl.rs:69

     Summary semver requires new major version: 2 major and 0 minor checks failed
     Warning produced 1 major and 0 minor level warnings
    Finished [  65.076s] datafusion-expr
    Building datafusion-expr-common v55.1.0 (current)
       Built [  21.098s] (current)
     Parsing datafusion-expr-common v55.1.0 (current)
      Parsed [   0.021s] (current)
    Building datafusion-expr-common v55.0.0 (baseline)
       Built [  20.202s] (baseline)
     Parsing datafusion-expr-common v55.0.0 (baseline)
      Parsed [   0.021s] (baseline)
    Checking datafusion-expr-common v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.275s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  42.560s] datafusion-expr-common
    Building datafusion-ffi v55.1.0 (current)
       Built [  56.030s] (current)
     Parsing datafusion-ffi v55.1.0 (current)
      Parsed [   0.068s] (current)
    Building datafusion-ffi v55.0.0 (baseline)
       Built [  56.028s] (baseline)
     Parsing datafusion-ffi v55.0.0 (baseline)
      Parsed [   0.073s] (baseline)
    Checking datafusion-ffi v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.296s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [ 114.245s] datafusion-ffi
    Building datafusion-functions v55.1.0 (current)
       Built [  33.031s] (current)
     Parsing datafusion-functions v55.1.0 (current)
      Parsed [   0.093s] (current)
    Building datafusion-functions v55.0.0 (baseline)
       Built [  32.471s] (baseline)
     Parsing datafusion-functions v55.0.0 (baseline)
      Parsed [   0.096s] (baseline)
    Checking datafusion-functions v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.494s] 196 checks: 194 pass, 2 fail, 0 warn, 58 skip

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_missing.ron

Failed in:
  function datafusion_functions::regex::compile_and_cache_regex, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/functions/src/regex/mod.rs:131
  function datafusion_functions::regex::compile_regex, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/functions/src/regex/mod.rs:165

--- failure function_parameter_count_changed: pub fn parameter count changed ---

Description:
A publicly-visible function now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_parameter_count_changed.ron

Failed in:
  datafusion_functions::datetime::from_unixtime now takes 1 parameters instead of 0, in /home/runner/work/datafusion/datafusion/datafusion/functions/src/datetime/mod.rs:55

     Summary semver requires new major version: 2 major and 0 minor checks failed
    Finished [  67.683s] datafusion-functions
    Building datafusion-functions-aggregate v55.1.0 (current)
       Built [  32.806s] (current)
     Parsing datafusion-functions-aggregate v55.1.0 (current)
      Parsed [   0.049s] (current)
    Building datafusion-functions-aggregate v55.0.0 (baseline)
       Built [  31.912s] (baseline)
     Parsing datafusion-functions-aggregate v55.0.0 (baseline)
      Parsed [   0.051s] (baseline)
    Checking datafusion-functions-aggregate v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.218s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  66.169s] datafusion-functions-aggregate
    Building datafusion-functions-aggregate-common v55.1.0 (current)
       Built [  21.671s] (current)
     Parsing datafusion-functions-aggregate-common v55.1.0 (current)
      Parsed [   0.021s] (current)
    Building datafusion-functions-aggregate-common v55.0.0 (baseline)
       Built [  21.413s] (baseline)
     Parsing datafusion-functions-aggregate-common v55.0.0 (baseline)
      Parsed [   0.021s] (baseline)
    Checking datafusion-functions-aggregate-common v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.165s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  44.040s] datafusion-functions-aggregate-common
    Building datafusion-functions-nested v55.1.0 (current)
       Built [  37.483s] (current)
     Parsing datafusion-functions-nested v55.1.0 (current)
      Parsed [   0.042s] (current)
    Building datafusion-functions-nested v55.0.0 (baseline)
       Built [  38.446s] (baseline)
     Parsing datafusion-functions-nested v55.0.0 (baseline)
      Parsed [   0.045s] (baseline)
    Checking datafusion-functions-nested v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.282s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  77.392s] datafusion-functions-nested
    Building datafusion-functions-table v55.1.0 (current)
       Built [  42.895s] (current)
     Parsing datafusion-functions-table v55.1.0 (current)
      Parsed [   0.012s] (current)
    Building datafusion-functions-table v55.0.0 (baseline)
       Built [  41.167s] (baseline)
     Parsing datafusion-functions-table v55.0.0 (baseline)
      Parsed [   0.012s] (baseline)
    Checking datafusion-functions-table v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.092s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  85.317s] datafusion-functions-table
    Building datafusion-functions-window v55.1.0 (current)
       Built [  27.425s] (current)
     Parsing datafusion-functions-window v55.1.0 (current)
      Parsed [   0.014s] (current)
    Building datafusion-functions-window v55.0.0 (baseline)
       Built [  27.105s] (baseline)
     Parsing datafusion-functions-window v55.0.0 (baseline)
      Parsed [   0.015s] (baseline)
    Checking datafusion-functions-window v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.111s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  55.407s] datafusion-functions-window
    Building datafusion-optimizer v55.1.0 (current)
       Built [  28.215s] (current)
     Parsing datafusion-optimizer v55.1.0 (current)
      Parsed [   0.036s] (current)
    Building datafusion-optimizer v55.0.0 (baseline)
       Built [  27.862s] (baseline)
     Parsing datafusion-optimizer v55.0.0 (baseline)
      Parsed [   0.035s] (baseline)
    Checking datafusion-optimizer v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.200s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  57.176s] datafusion-optimizer
    Building datafusion-physical-expr v55.1.0 (current)
       Built [  30.850s] (current)
     Parsing datafusion-physical-expr v55.1.0 (current)
      Parsed [   0.056s] (current)
    Building datafusion-physical-expr v55.0.0 (baseline)
       Built [  30.069s] (baseline)
     Parsing datafusion-physical-expr v55.0.0 (baseline)
      Parsed [   0.056s] (baseline)
    Checking datafusion-physical-expr v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.474s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  62.404s] datafusion-physical-expr
    Building datafusion-physical-expr-adapter v55.1.0 (current)
       Built [  34.005s] (current)
     Parsing datafusion-physical-expr-adapter v55.1.0 (current)
      Parsed [   0.010s] (current)
    Building datafusion-physical-expr-adapter v55.0.0 (baseline)
       Built [  33.426s] (baseline)
     Parsing datafusion-physical-expr-adapter v55.0.0 (baseline)
      Parsed [   0.011s] (baseline)
    Checking datafusion-physical-expr-adapter v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.106s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  68.568s] datafusion-physical-expr-adapter
    Building datafusion-physical-expr-common v55.1.0 (current)
       Built [  26.001s] (current)
     Parsing datafusion-physical-expr-common v55.1.0 (current)
      Parsed [   0.024s] (current)
    Building datafusion-physical-expr-common v55.0.0 (baseline)
       Built [  25.929s] (baseline)
     Parsing datafusion-physical-expr-common v55.0.0 (baseline)
      Parsed [   0.025s] (baseline)
    Checking datafusion-physical-expr-common v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.305s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  53.045s] datafusion-physical-expr-common
    Building datafusion-physical-optimizer v55.1.0 (current)
       Built [  44.279s] (current)
     Parsing datafusion-physical-optimizer v55.1.0 (current)
      Parsed [   0.024s] (current)
    Building datafusion-physical-optimizer v55.0.0 (baseline)
       Built [  42.783s] (baseline)
     Parsing datafusion-physical-optimizer v55.0.0 (baseline)
      Parsed [   0.025s] (baseline)
    Checking datafusion-physical-optimizer v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.139s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  88.346s] datafusion-physical-optimizer
    Building datafusion-physical-plan v55.1.0 (current)
       Built [  41.507s] (current)
     Parsing datafusion-physical-plan v55.1.0 (current)
      Parsed [   0.186s] (current)
    Building datafusion-physical-plan v55.0.0 (baseline)
       Built [  40.509s] (baseline)
     Parsing datafusion-physical-plan v55.0.0 (baseline)
      Parsed [   0.168s] (baseline)
    Checking datafusion-physical-plan v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.970s] 196 checks: 192 pass, 4 fail, 0 warn, 58 skip

--- failure inherent_method_now_doc_hidden: inherent method #[doc(hidden)] added ---

Description:
A method or associated fn is now #[doc(hidden)], removing it from the crate's public API.
        ref: https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html#hidden
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/inherent_method_now_doc_hidden.ron

Failed in:
  HashTableLookupExpr::new in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/physical-plan/src/joins/hash_join/partitioned_hash_eval.rs:299

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/module_missing.ron

Failed in:
  mod datafusion_physical_plan::joins::chain, previously in file /home/runner/work/datafusion/datafusion/target/semver-checks/git-apache_main/f9e64e6a0a3da33dcd907ca18eb4c40ed46da86c/datafusion/physical-plan/src/joins/chain.rs:18

--- failure trait_method_added: pub trait method added ---

Description:
A non-sealed public trait added a new method without a default implementation, which breaks downstream implementations of the trait
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-item-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/trait_method_added.ron

Failed in:
  trait method datafusion_physical_plan::aggregates::group_values::multi_group_by::GroupColumn::values_preserving in file /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:117

--- failure trait_method_receiver_ref_became_mut: trait method receiver changed from immutable to mutable reference ---

Description:
A trait method's receiver changed from an immutable reference to a mutable one.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-item-signature
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/trait_method_receiver_ref_became_mut.ron

Failed in:
  datafusion_physical_plan::aggregates::group_values::multi_group_by::GroupColumn::vectorized_equal_to now takes &mut Self, not &Self, in /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs:90

     Summary semver requires new major version: 4 major and 0 minor checks failed
    Finished [  84.589s] datafusion-physical-plan
    Building datafusion-proto v55.1.0 (current)
       Built [  59.125s] (current)
     Parsing datafusion-proto v55.1.0 (current)
      Parsed [   0.020s] (current)
    Building datafusion-proto v55.0.0 (baseline)
       Built [  57.427s] (baseline)
     Parsing datafusion-proto v55.0.0 (baseline)
      Parsed [   0.019s] (baseline)
    Checking datafusion-proto v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.146s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [ 118.202s] datafusion-proto
    Building datafusion-proto-common v55.1.0 (current)
       Built [  23.401s] (current)
     Parsing datafusion-proto-common v55.1.0 (current)
      Parsed [   0.052s] (current)
    Building datafusion-proto-common v55.0.0 (baseline)
       Built [  23.050s] (baseline)
     Parsing datafusion-proto-common v55.0.0 (baseline)
      Parsed [   0.052s] (baseline)
    Checking datafusion-proto-common v55.0.0 -> v55.1.0 (minor change)
     Checked [   1.542s] 196 checks: 195 pass, 1 fail, 0 warn, 58 skip

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field CsvWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:635
  field CsvWriterOptions.timestamp_tz_format in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:638
  field CsvWriterOptions.terminator in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:641
  field CsvWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:635
  field CsvWriterOptions.timestamp_tz_format in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:638
  field CsvWriterOptions.terminator in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:641
  field CsvWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:635
  field CsvWriterOptions.timestamp_tz_format in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:638
  field CsvWriterOptions.terminator in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:641
  field JsonWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:587
  field JsonWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:587
  field JsonWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:587

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  49.049s] datafusion-proto-common
    Building datafusion-proto-models v55.1.0 (current)
       Built [  26.205s] (current)
     Parsing datafusion-proto-models v55.1.0 (current)
      Parsed [   0.145s] (current)
    Building datafusion-proto-models v55.0.0 (baseline)
       Built [  26.236s] (baseline)
     Parsing datafusion-proto-models v55.0.0 (baseline)
      Parsed [   0.147s] (baseline)
    Checking datafusion-proto-models v55.0.0 -> v55.1.0 (minor change)
     Checked [   2.628s] 196 checks: 194 pass, 2 fail, 0 warn, 58 skip

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field PhysicalBinaryExprNode.fail_on_overflow in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1841
  field PhysicalBinaryExprNode.fail_on_overflow in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1841
  field FileScanExecConf.preserve_order in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2019
  field FileScanExecConf.preserve_order in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2019
  field CsvWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:635
  field CsvWriterOptions.timestamp_tz_format in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:638
  field CsvWriterOptions.terminator in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:641
  field CsvWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:635
  field CsvWriterOptions.timestamp_tz_format in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:638
  field CsvWriterOptions.terminator in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:641
  field ParquetScanExecNode.sort_order_for_reorder in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2032
  field ParquetScanExecNode.reverse_row_groups in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2034
  field ParquetScanExecNode.metadata_size_hint in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2037
  field ParquetScanExecNode.sort_order_for_reorder in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2032
  field ParquetScanExecNode.reverse_row_groups in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2034
  field ParquetScanExecNode.metadata_size_hint in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2037
  field PhysicalRangePartitioning.sample_point in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2442
  field PhysicalRangePartitioning.partition_count in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2445
  field PhysicalRangePartitioning.sample_point in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2442
  field PhysicalRangePartitioning.partition_count in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2445
  field ParquetSink.sorting_columns in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1565
  field ParquetSink.sorting_columns in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1565
  field PhysicalScalarSubqueryExprNode.metadata in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2730
  field PhysicalScalarSubqueryExprNode.metadata in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2730
  field MergeIntoOpNode.target_qualifier in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:565
  field MergeIntoOpNode.target_qualifier in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:565
  field AnalyzeExecNode.has_metric_types in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2207
  field AnalyzeExecNode.metric_types in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2210
  field AnalyzeExecNode.has_metric_types in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2207
  field AnalyzeExecNode.metric_types in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:2210
  field JsonWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:587
  field JsonWriterOptions.compression_level in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:587

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_variant_added.ron

Failed in:
  variant PhysicalPlanType:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1465
  variant PhysicalPlanType:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:1465
  variant LogicalPlanType:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:83
  variant LogicalPlanType:AsOfJoin in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/prost.rs:83

     Summary semver requires new major version: 2 major and 0 minor checks failed
    Finished [  56.570s] datafusion-proto-models
    Building datafusion-pruning v55.1.0 (current)
       Built [  42.994s] (current)
     Parsing datafusion-pruning v55.1.0 (current)
      Parsed [   0.016s] (current)
    Building datafusion-pruning v55.0.0 (baseline)
       Built [  42.197s] (baseline)
     Parsing datafusion-pruning v55.0.0 (baseline)
      Parsed [   0.014s] (baseline)
    Checking datafusion-pruning v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.098s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  86.340s] datafusion-pruning
    Building datafusion-session v55.1.0 (current)
       Built [  41.569s] (current)
     Parsing datafusion-session v55.1.0 (current)
      Parsed [   0.012s] (current)
    Building datafusion-session v55.0.0 (baseline)
       Built [  40.316s] (baseline)
     Parsing datafusion-session v55.0.0 (baseline)
      Parsed [   0.012s] (baseline)
    Checking datafusion-session v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.218s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [  83.329s] datafusion-session
    Building datafusion-spark v55.1.0 (current)
       Built [  48.068s] (current)
     Parsing datafusion-spark v55.1.0 (current)
      Parsed [   0.070s] (current)
    Building datafusion-spark v55.0.0 (baseline)
       Built [  47.730s] (baseline)
     Parsing datafusion-spark v55.0.0 (baseline)
      Parsed [   0.073s] (baseline)
    Checking datafusion-spark v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.460s] 196 checks: 195 pass, 1 fail, 0 warn, 58 skip

--- failure function_parameter_count_changed: pub fn parameter count changed ---

Description:
A publicly-visible function now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/function_parameter_count_changed.ron

Failed in:
  datafusion_spark::function::math::modulus::spark_pmod now takes 3 parameters instead of 2, in /home/runner/work/datafusion/datafusion/datafusion/spark/src/function/math/modulus.rs:128

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  97.798s] datafusion-spark
    Building datafusion-sql v55.1.0 (current)
       Built [  46.333s] (current)
     Parsing datafusion-sql v55.1.0 (current)
      Parsed [   0.036s] (current)
    Building datafusion-sql v55.0.0 (baseline)
       Built [  45.782s] (baseline)
     Parsing datafusion-sql v55.0.0 (baseline)
      Parsed [   0.036s] (baseline)
    Checking datafusion-sql v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.317s] 196 checks: 195 pass, 1 fail, 0 warn, 58 skip

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/enum_variant_added.ron

Failed in:
  variant Statement:CreateExternalCatalog in /home/runner/work/datafusion/datafusion/datafusion/sql/src/parser.rs:415

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  93.809s] datafusion-sql
    Building datafusion-sqllogictest v55.1.0 (current)
       Built [ 109.386s] (current)
     Parsing datafusion-sqllogictest v55.1.0 (current)
      Parsed [   0.024s] (current)
    Building datafusion-sqllogictest v55.0.0 (baseline)
       Built [ 109.477s] (baseline)
     Parsing datafusion-sqllogictest v55.0.0 (baseline)
      Parsed [   0.163s] (baseline)
    Checking datafusion-sqllogictest v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.117s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [ 221.963s] datafusion-sqllogictest
    Building datafusion-substrait v55.1.0 (current)
       Built [ 325.692s] (current)
     Parsing datafusion-substrait v55.1.0 (current)
      Parsed [   0.020s] (current)
    Building datafusion-substrait v55.0.0 (baseline)
       Built [ 320.793s] (baseline)
     Parsing datafusion-substrait v55.0.0 (baseline)
      Parsed [   0.021s] (baseline)
    Checking datafusion-substrait v55.0.0 -> v55.1.0 (minor change)
     Checked [   0.290s] 196 checks: 196 pass, 58 skip
     Summary no semver update required
    Finished [ 648.843s] datafusion-substrait

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.