fix: stop pre-allocating and undercounting a hash table per COUNT(DISTINCT) group - #70
fix: stop pre-allocating and undercounting a hash table per COUNT(DISTINCT) group#70adriangb wants to merge 37 commits into
Conversation
96f0969 to
84f07da
Compare
|
Rebased from the DataFusion 55 fork branch ( Conflicts were confined to imports: All figures in the description were re-derived on the new base rather than carried over. The Tests: |
|
Note on the The suggestion was to construct Two reasons:
So the finding identified a real defect, and the fix here addresses it without giving up the warm-up where it earns its keep. |
|
Macroscope skipped reviewing this pull request. Per-review cost limit exceeded (workspace setting). This review would cost an estimated $16.75, which exceeds your per-review limit of $10.00. The top 3 files driving up this estimate:
Tip To get this pull request reviewed, you can:
|
…e#24805) ## 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#24641 . ## Rationale for this change `PiecewiseMergeJoinExec` and `SortMergeJoinExec` must return the same results as the mature join implementations they can be swapped for, across every batch boundary. Today that equivalence is checked ad hoc. Using the `# configMatrix:` directive from apache#24493, one `.slt` file can assert it directly: run the same queries once per join implementation and once per batch size, and require identical output. <!-- 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. --> ## 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. -->
…#23169) ## Which issue does this PR close? - Closes apache#22079 - Closes apache#24724 ## Rationale for this change The logical `Expr::Cast` and `Expr::TryCast` have a `FieldRef` target that was added in apache#18136 so that logical casts can express a cast to an extension type. In combination with a SQL type planner ( apache#20676 ) and an optimizer rule, this enabled casting to/from extension types with custom semantics to actually occur. The ability to do this was reverted by apache#20836 (which removed the original test) and I am not sure that ability ever made it into a release. When investigating this issue, it became clear the logical and physical cast behaviour had diverged with respect to the target field. ## What changes are included in this PR? This PR strips specific metadata keys (extension name and extension metadata) when propagating metadata from the source of a cast to the target (because doing so may result in an invalid destination field that consumers could reject), and propagates all metadata from the (logical) cast target field (e.g., so that a cast to an extension type represented by the cast target field will have a `to_field()` that communicates the extension type). For the physical cast, this behaviour is replicated exactly (I hope). Note that actually casting to an extension type can be implemented with an optimizer rule, planner, or by the mechanism I have in the works in apache#21071 . ## Are these changes tested? Yes ## Are there any user-facing changes? It was in practice not common to create a `Expr::Cast` with field metadata internally and thus I don't think users will see metadata changes from the inclusion of metadata from the target field. I would be surprised if stripping the extension name/metadata from the source was disruptive (it was more likely to have caused errors). Superceeds an earlier but similar attempt ( apache#22162 ). --------- Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org> Co-authored-by: Tim Saucer <timsaucer@gmail.com>
…on/wasmtest/datafusion-wasm-app (apache#24862) Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.28.1 to 4.28.8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/browserslist/browserslist/releases">browserslist's releases</a>.</em></p> <blockquote> <h2>4.28.8</h2> <ul> <li>Fixed <code>including kaios</code> in baseline queries (by <a href="https://github.com/Jaybhade"><code>@Jaybhade</code></a>).</li> </ul> <h2>4.28.7</h2> <ul> <li>Improved parsing performance.</li> <li>Fixed unbounded memory growth (by <a href="https://github.com/alanturing881"><code>@alanturing881</code></a>).</li> <li>Fixed prototype write issue (by <a href="https://github.com/alanturing881"><code>@alanturing881</code></a>).</li> </ul> <h2>4.28.6</h2> <ul> <li>Fixed Electron version queries (by <a href="https://github.com/spokodev"><code>@spokodev</code></a>).</li> </ul> <h2>4.28.5</h2> <ul> <li>Fixed <code>></code> and <code>>=</code> queries (by <a href="https://github.com/spokodev"><code>@spokodev</code></a>).</li> </ul> <h2>4.28.4</h2> <ul> <li>Fixed <code>SyntaxError</code> regression of 4.28.3.</li> </ul> <h2>4.28.3</h2> <ul> <li>Fixed baseline query case-insensitivity (by <a href="https://github.com/swwind"><code>@swwind</code></a>).</li> </ul> <h2>4.28.2</h2> <ul> <li>Fix prototype pollution (by <a href="https://github.com/chluo1997"><code>@chluo1997</code></a>).</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md">browserslist's changelog</a>.</em></p> <blockquote> <h2>4.28.8</h2> <ul> <li>Fixed <code>including kaios</code> in baseline queries (by <a href="https://github.com/Jaybhade"><code>@Jaybhade</code></a>).</li> </ul> <h2>4.28.7</h2> <ul> <li>Improved parsing performance.</li> <li>Fixed unbounded memory growth (by <a href="https://github.com/alanturing881"><code>@alanturing881</code></a>).</li> <li>Fixed prototype write issue (by <a href="https://github.com/alanturing881"><code>@alanturing881</code></a>).</li> </ul> <h2>4.28.6</h2> <ul> <li>Fixed Electron version queries (by <a href="https://github.com/spokodev"><code>@spokodev</code></a>).</li> </ul> <h2>4.28.5</h2> <ul> <li>Fixed <code>></code> and <code>>=</code> queries (by <a href="https://github.com/spokodev"><code>@spokodev</code></a>).</li> </ul> <h2>4.28.4</h2> <ul> <li>Fixed <code>SyntaxError</code> regression of 4.28.3.</li> </ul> <h2>4.28.3</h2> <ul> <li>Fixed baseline query case-insensitivity (by <a href="https://github.com/swwind"><code>@swwind</code></a>).</li> </ul> <h2>4.28.2</h2> <ul> <li>Fix prototype pollution (by <a href="https://github.com/chluo1997"><code>@chluo1997</code></a>).</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/browserslist/browserslist/commit/f2f2e6cfb01bb4942941d328737546f4e2ae41ad"><code>f2f2e6c</code></a> Release 4.28.8 version</li> <li><a href="https://github.com/browserslist/browserslist/commit/d0787c88fa29ba895fea51cfe921232c7b5d1377"><code>d0787c8</code></a> Update dependencies</li> <li><a href="https://github.com/browserslist/browserslist/commit/fcf8fa9857b30ccdf801a548f5d09d3c4ff0d43f"><code>fcf8fa9</code></a> Merge pull request <a href="https://redirect.github.com/browserslist/browserslist/issues/939">#939</a> from Jaybhade/fix/baseline-kaios-without-downstream</li> <li><a href="https://github.com/browserslist/browserslist/commit/57ecd64454e9252afdd6a7e76926e13dda48a38c"><code>57ecd64</code></a> fix: support "including kaios" without downstream</li> <li><a href="https://github.com/browserslist/browserslist/commit/093a0f67bb0becda55235d767b134df3197c54a1"><code>093a0f6</code></a> Update EM banner</li> <li><a href="https://github.com/browserslist/browserslist/commit/b637868045806d2fba4c24eb0060e4cc8b1db276"><code>b637868</code></a> Release 4.28.7 version</li> <li><a href="https://github.com/browserslist/browserslist/commit/313f4659b9f985ade89d1d6a54a860371c41cc46"><code>313f465</code></a> Update dependencies</li> <li><a href="https://github.com/browserslist/browserslist/commit/c935c5a206f8b13db8846818bc03643e147dcbdf"><code>c935c5a</code></a> Fix regexp performance</li> <li><a href="https://github.com/browserslist/browserslist/commit/d7e9e653cb53399065943f59f0b3063987b0a008"><code>d7e9e65</code></a> Rewrite structure parsing to make it always fast</li> <li><a href="https://github.com/browserslist/browserslist/commit/ec4a55efd76bdfa506ec7ce4fea1691559e9ca8f"><code>ec4a55e</code></a> Fix import order</li> <li>Additional commits viewable in <a href="https://github.com/browserslist/browserslist/compare/4.28.1...4.28.8">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new releaser for browserslist since your current version.</p> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/apache/datafusion/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…he#24840) Bumps the all-other-cargo-deps group with 7 updates: | Package | From | To | | --- | --- | --- | | [flate2](https://github.com/rust-lang/flate2-rs) | `1.1.9` | `1.1.10` | | [indexmap](https://github.com/indexmap-rs/indexmap) | `2.14.0` | `2.14.1` | | [log](https://github.com/rust-lang/log) | `0.4.33` | `0.4.34` | | [uuid](https://github.com/uuid-rs/uuid) | `1.24.1` | `1.26.0` | | [crc32fast](https://github.com/srijs/rust-crc32fast) | `1.5.0` | `1.5.1` | | [twox-hash](https://github.com/shepmaster/twox-hash) | `2.1.3` | `2.1.4` | | [syn](https://github.com/dtolnay/syn) | `3.0.3` | `3.0.4` | Updates `flate2` from 1.1.9 to 1.1.10 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/flate2-rs/releases">flate2's releases</a>.</em></p> <blockquote> <h2>1.1.10</h2> <h2>What's Changed</h2> <ul> <li>feat: reuse zlib's decoder buffer by <a href="https://github.com/Vaiz"><code>@Vaiz</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/532">rust-lang/flate2-rs#532</a></li> <li>feat: add reset method for read::GzDecoder and buffered::GzDecoder by <a href="https://github.com/Vaiz"><code>@Vaiz</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/534">rust-lang/flate2-rs#534</a></li> <li>Drop cloudflare-zlib by <a href="https://github.com/kornelski"><code>@kornelski</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/539">rust-lang/flate2-rs#539</a></li> <li>Add a wrapper for the <code>Crc</code> struct by <a href="https://github.com/MikkelPaulson"><code>@MikkelPaulson</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/540">rust-lang/flate2-rs#540</a></li> <li>Bump miniz_oxide to 0.9 by <a href="https://github.com/oscargus"><code>@oscargus</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/543">rust-lang/flate2-rs#543</a></li> <li>Upgrade miniz_oxide and add unit tests of the different flush kinds by <a href="https://github.com/fintelia"><code>@fintelia</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/498">rust-lang/flate2-rs#498</a></li> <li>Fix infinite loop in writing gzip header/footer by <a href="https://github.com/Shnatsel"><code>@Shnatsel</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/547">rust-lang/flate2-rs#547</a></li> <li>test: generate corrupt gzip fixture at runtime by <a href="https://github.com/nanookclaw"><code>@nanookclaw</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/550">rust-lang/flate2-rs#550</a></li> <li>Reject oversized gzip extra fields by <a href="https://github.com/Byron"><code>@Byron</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/553">rust-lang/flate2-rs#553</a></li> <li>Reject incomplete deflate streams at EOF by <a href="https://github.com/Guflly"><code>@Guflly</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/556">rust-lang/flate2-rs#556</a></li> <li>Include <code>README.md</code> in a private module by <a href="https://github.com/bushrat011899"><code>@bushrat011899</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/562">rust-lang/flate2-rs#562</a></li> <li>Add <code>no_std</code> support using nightly <code>alloc_io</code> by <a href="https://github.com/bushrat011899"><code>@bushrat011899</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/559">rust-lang/flate2-rs#559</a></li> <li>Update <code>get_mut()</code> documentation to make clear how 'inner` can be used by <a href="https://github.com/Byron"><code>@Byron</code></a> in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/558">rust-lang/flate2-rs#558</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Vaiz"><code>@Vaiz</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/532">rust-lang/flate2-rs#532</a></li> <li><a href="https://github.com/MikkelPaulson"><code>@MikkelPaulson</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/540">rust-lang/flate2-rs#540</a></li> <li><a href="https://github.com/oscargus"><code>@oscargus</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/543">rust-lang/flate2-rs#543</a></li> <li><a href="https://github.com/nanookclaw"><code>@nanookclaw</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/550">rust-lang/flate2-rs#550</a></li> <li><a href="https://github.com/Guflly"><code>@Guflly</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/556">rust-lang/flate2-rs#556</a></li> <li><a href="https://github.com/bushrat011899"><code>@bushrat011899</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/flate2-rs/pull/562">rust-lang/flate2-rs#562</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/flate2-rs/compare/1.1.9...1.1.10">https://github.com/rust-lang/flate2-rs/compare/1.1.9...1.1.10</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/flate2-rs/commit/ed93d4fc60eaf876c6aded741bf992d524551930"><code>ed93d4f</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/flate2-rs/issues/558">#558</a> from rust-lang/lib-doc-update</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/fb5228dcd7ca7f4ffb2240e6aec8547b85064c9a"><code>fb5228d</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/flate2-rs/issues/559">#559</a> from bushrat011899/no_std</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/6ed3ba32e321bd6865df6d4ec96d2550c11e50f0"><code>6ed3ba3</code></a> Add executable <code>no_std</code> example</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/faed8a04671a608efda8ae3520844889210ada95"><code>faed8a0</code></a> Expand CI to test <code>no_std</code> compatibility and correctness</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/2ba8e7e6663bb173782c2c96d1203bed098aadf3"><code>2ba8e7e</code></a> Add unstable <code>no_std</code> support behind <code>flate2_unstable_nightly_alloc_io</code></li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/3fe11268ccbb777e22a8352aa95307af72fa8ee9"><code>3fe1126</code></a> Centralize usage of <code>std</code> for <code>error</code> and <code>io</code></li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/98e313a26ff137b0d79eb55f192911c80862d6d5"><code>98e313a</code></a> Add <code>GzHeader::mtime_as_duration</code></li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/064296528d679f3aef0ca11b8ca0e2cad21b283d"><code>0642965</code></a> Switch to <code>core</code> implicit prelude and only use <code>std</code> where required</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/454a63ce8ac5891d938ecf372a537e17e5cae586"><code>454a63c</code></a> Remove left-over <code>dbg!</code> statement</li> <li><a href="https://github.com/rust-lang/flate2-rs/commit/2a490b7df96326c34a8ea75b2930eab4851cac1e"><code>2a490b7</code></a> Add <code>runtime_detection</code> feature</li> <li>Additional commits viewable in <a href="https://github.com/rust-lang/flate2-rs/compare/1.1.9...1.1.10">compare view</a></li> </ul> </details> <br /> Updates `indexmap` from 2.14.0 to 2.14.1 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md">indexmap's changelog</a>.</em></p> <blockquote> <h2>2.14.1 (2026-08-28)</h2> <ul> <li>Simplify comparisons where <code>Equivalent</code> isn't needed (<code>Q = K</code>).</li> <li>Unify index assertions for bounds checks.</li> <li>Fix (or <code>expect</code>) clippy lints.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/indexmap-rs/indexmap/commit/fdf7e1738b3b53869bdc15d666f9b81961041825"><code>fdf7e17</code></a> Merge pull request <a href="https://redirect.github.com/indexmap-rs/indexmap/issues/449">#449</a> from cuviper/release-2.14.1</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/ada540e17cc7d8f38359f7d83c225e38f367c86b"><code>ada540e</code></a> Release 2.14.1</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/af93b43ecd62d28deb59a6ac23f98bd115475eaf"><code>af93b43</code></a> expect clippy::redundant_slicing in tests</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/c95da18c97d2742fe8731f36e81c1d04f0620c6a"><code>c95da18</code></a> fix clippy::derivable_impls</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/21963654e41f86f396a2ba6d9582ccd8eb7df52c"><code>2196365</code></a> fix clippy::useless_vec (and more) in tests</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/1c2be7b00c5bb61f654210355d1e9f0d9be03956"><code>1c2be7b</code></a> use inherent usize::MAX</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/64f4a06684dd4ed06dc6629dd8bbefc59394b2c9"><code>64f4a06</code></a> fix clippy::int_plus_one</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/41760c52bbfdd6c7cb43331246c813506d825a49"><code>41760c5</code></a> fix clippy::map_entry</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/be7ffd0d154c06f76152b6884ee44f88eebe68aa"><code>be7ffd0</code></a> expect clippy::unnecessary_get_then_check in benches</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/bb35663f7593b37976ed6271c09f747559d646fe"><code>bb35663</code></a> expect clippy::reversed_empty_ranges in tests</li> <li>Additional commits viewable in <a href="https://github.com/indexmap-rs/indexmap/compare/2.14.0...2.14.1">compare view</a></li> </ul> </details> <br /> Updates `log` from 0.4.33 to 0.4.34 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/releases">log's releases</a>.</em></p> <blockquote> <h2>0.4.34</h2> <h2>What's Changed</h2> <ul> <li>doc: Add context-logger utility to README by <a href="https://github.com/alekseysidorov"><code>@alekseysidorov</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/735">rust-lang/log#735</a></li> <li>Add alloc support for boxed loggers by <a href="https://github.com/malezjaa"><code>@malezjaa</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/737">rust-lang/log#737</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/alekseysidorov"><code>@alekseysidorov</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/735">rust-lang/log#735</a></li> <li><a href="https://github.com/malezjaa"><code>@malezjaa</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/737">rust-lang/log#737</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.33...0.4.34">https://github.com/rust-lang/log/compare/0.4.33...0.4.34</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rust-lang/log/blob/master/CHANGELOG.md">log's changelog</a>.</em></p> <blockquote> <h2>[0.4.34] - 2026-08-22</h2> <h2>What's Changed</h2> <ul> <li>doc: Add context-logger utility to README by <a href="https://github.com/alekseysidorov"><code>@alekseysidorov</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/735">rust-lang/log#735</a></li> <li>Add alloc support for boxed loggers by <a href="https://github.com/malezjaa"><code>@malezjaa</code></a> in <a href="https://redirect.github.com/rust-lang/log/pull/737">rust-lang/log#737</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/alekseysidorov"><code>@alekseysidorov</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/735">rust-lang/log#735</a></li> <li><a href="https://github.com/malezjaa"><code>@malezjaa</code></a> made their first contribution in <a href="https://redirect.github.com/rust-lang/log/pull/737">rust-lang/log#737</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/rust-lang/log/compare/0.4.33...0.4.34">https://github.com/rust-lang/log/compare/0.4.33...0.4.34</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rust-lang/log/commit/8034743dd9d7f7583bd9a670271483d176130911"><code>8034743</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/738">#738</a> from rust-lang/cargo/0.4.34</li> <li><a href="https://github.com/rust-lang/log/commit/7d1e24e3506d4ffa1badf6c9ea357779877adaf0"><code>7d1e24e</code></a> prepare for 0.4.34 release</li> <li><a href="https://github.com/rust-lang/log/commit/3b939b6714616dc32193c12019861c7c518c5edb"><code>3b939b6</code></a> Merge pull request <a href="https://redirect.github.com/rust-lang/log/issues/737">#737</a> from malezjaa/master</li> <li><a href="https://github.com/rust-lang/log/commit/b88266cfed8b287f8c35b2015808b09b056f61af"><code>b88266c</code></a> Add alloc support for boxed loggers</li> <li><a href="https://github.com/rust-lang/log/commit/037d7a58f6ad184abb3afc4db81d37c43a5696ec"><code>037d7a5</code></a> doc: Add context-logger utility to README</li> <li>See full diff in <a href="https://github.com/rust-lang/log/compare/0.4.33...0.4.34">compare view</a></li> </ul> </details> <br /> Updates `uuid` from 1.24.1 to 1.26.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uuid-rs/uuid/releases">uuid's releases</a>.</em></p> <blockquote> <h2>v1.26.0</h2> <h2>What's Changed</h2> <ul> <li>Add ContextV7::with_additional_precision_bits by <a href="https://github.com/ChrisJr404"><code>@ChrisJr404</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/904">uuid-rs/uuid#904</a></li> <li>Prepare for 1.26.0 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/905">uuid-rs/uuid#905</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0">https://github.com/uuid-rs/uuid/compare/1.25.0...v1.26.0</a></p> <h2>1.25.0</h2> <h2>What's Changed</h2> <ul> <li>Add a serde::bytes module that encodes a Uuid as a byte string by <a href="https://github.com/ChrisJr404"><code>@ChrisJr404</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/902">uuid-rs/uuid#902</a></li> <li>Prepare for 1.25.0 release by <a href="https://github.com/KodrAus"><code>@KodrAus</code></a> in <a href="https://redirect.github.com/uuid-rs/uuid/pull/903">uuid-rs/uuid#903</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/ChrisJr404"><code>@ChrisJr404</code></a> made their first contribution in <a href="https://redirect.github.com/uuid-rs/uuid/pull/902">uuid-rs/uuid#902</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uuid-rs/uuid/compare/v1.24.1...1.25.0">https://github.com/uuid-rs/uuid/compare/v1.24.1...1.25.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/uuid-rs/uuid/commit/cdc96a87bddc38d0eb8f894c764e151d2299b4b3"><code>cdc96a8</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/905">#905</a> from uuid-rs/cargo/v1.26.0</li> <li><a href="https://github.com/uuid-rs/uuid/commit/34e4f49c0d50c12f1b3021baf98b8fb91f6407bb"><code>34e4f49</code></a> don't test macros under miri</li> <li><a href="https://github.com/uuid-rs/uuid/commit/d9e7242b37755d844d19fa74559a88e1c46c5206"><code>d9e7242</code></a> update nightly used for miri</li> <li><a href="https://github.com/uuid-rs/uuid/commit/ec16819865b89aa3c52456c8afd0ce9a90f0fcdb"><code>ec16819</code></a> prepare for 1.26.0 release</li> <li><a href="https://github.com/uuid-rs/uuid/commit/162cd208a4521138f1d8ce05b63342ba7ba5c4e6"><code>162cd20</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/904">#904</a> from ChrisJr404/v7-additional-precision-bits</li> <li><a href="https://github.com/uuid-rs/uuid/commit/97eceffa708f87969792af604291d3e4984dfc90"><code>97eceff</code></a> Add ContextV7::with_additional_precision_bits for microsecond clocks</li> <li><a href="https://github.com/uuid-rs/uuid/commit/302e0bf6dc5abf949c06973a37f1f3a093cc2699"><code>302e0bf</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/903">#903</a> from uuid-rs/cargo/1.25.0</li> <li><a href="https://github.com/uuid-rs/uuid/commit/b7ccde885d770d013f413a2685ebe7f38932e1d0"><code>b7ccde8</code></a> prepare for 1.25.0 release</li> <li><a href="https://github.com/uuid-rs/uuid/commit/c62dffbc038034ff045f3009f2536362e313bf34"><code>c62dffb</code></a> Merge pull request <a href="https://redirect.github.com/uuid-rs/uuid/issues/902">#902</a> from ChrisJr404/serde-bytes-module</li> <li><a href="https://github.com/uuid-rs/uuid/commit/8c198b24b1aa55948c0fa4b3433c1954be19c8c8"><code>8c198b2</code></a> Add a serde::bytes module that encodes as a byte string</li> <li>See full diff in <a href="https://github.com/uuid-rs/uuid/compare/v1.24.1...v1.26.0">compare view</a></li> </ul> </details> <br /> Updates `crc32fast` from 1.5.0 to 1.5.1 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/srijs/rust-crc32fast/commit/a150f65ce810793293d5c9dd815f4510eb6d8e4c"><code>a150f65</code></a> release 1.5.1</li> <li><a href="https://github.com/srijs/rust-crc32fast/commit/f066e8d618506d12b92cc46286b07929d4dd704e"><code>f066e8d</code></a> perf(simd): widen x86 folds, add ARM 3-way, and speed up small inputs (<a href="https://redirect.github.com/srijs/rust-crc32fast/issues/56">#56</a>)</li> <li><a href="https://github.com/srijs/rust-crc32fast/commit/d5c123d00d5a0236b92acc56f984a5a8a5c7baf5"><code>d5c123d</code></a> consolidate dword load in baseline implementation (<a href="https://redirect.github.com/srijs/rust-crc32fast/issues/55">#55</a>)</li> <li><a href="https://github.com/srijs/rust-crc32fast/commit/50e2046cbb5d4f1844931302b9cd9636694d88ec"><code>50e2046</code></a> downgrade msrv ci run to just cargo build</li> <li>See full diff in <a href="https://github.com/srijs/rust-crc32fast/compare/v1.5.0...v1.5.1">compare view</a></li> </ul> </details> <br /> Updates `twox-hash` from 2.1.3 to 2.1.4 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/shepmaster/twox-hash/blob/main/CHANGELOG.md">twox-hash's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/shepmaster/twox-hash/tree/v2.1.4">2.1.4</a> - 2026-08-27</h2> <h3>Changed</h3> <ul> <li>Documentation added about the stability of the hashing algorithms.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/shepmaster/twox-hash/commit/6f866bffe73900c63df2650be4eed41e3ed9b500"><code>6f866bf</code></a> Release version 2.1.4</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/bcfd930faa13eecefcb2ea5f2f9590226a5f2380"><code>bcfd930</code></a> Update the changelog</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/188f698293fb319b8fdb0ceba004411bb5fdd2ca"><code>188f698</code></a> Merge pull request <a href="https://redirect.github.com/shepmaster/twox-hash/issues/125">#125</a> from shepmaster/32-bit-consistency</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/e37e1efe56004aa73850153d22fdf57d4ea7c005"><code>e37e1ef</code></a> Document the stability of the algorithms and caveats</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/a08cde9f58c7bd1836383e631e647bcd93d0e63d"><code>a08cde9</code></a> Run the tests on a 32-bit platform (via Miri)</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/9cba5445a3f8033e4fb1d64f85344c0955f2200c"><code>9cba544</code></a> Adjust test to compile when usize is 32-bit</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/6f8020e3bb1a356bd944601860c0a0d140c97066"><code>6f8020e</code></a> Merge pull request <a href="https://redirect.github.com/shepmaster/twox-hash/issues/126">#126</a> from shepmaster/maint</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/a001afbde265f4770fd4eb31ab243224c55ac311"><code>a001afb</code></a> Upgrade GHA to actions/checkout@v7</li> <li><a href="https://github.com/shepmaster/twox-hash/commit/4c480b6acef2d851bc8fdc7c7d80b626bb7dda1e"><code>4c480b6</code></a> Apply some extra Clippy lints</li> <li>See full diff in <a href="https://github.com/shepmaster/twox-hash/compare/v2.1.3...v2.1.4">compare view</a></li> </ul> </details> <br /> Updates `syn` from 3.0.3 to 3.0.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/syn/releases">syn's releases</a>.</em></p> <blockquote> <h2>3.0.4</h2> <ul> <li>Allow <code>safe fn</code> in <code>impl Parse for ForeignItemFn</code> (<a href="https://redirect.github.com/dtolnay/syn/issues/2078">#2078</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dtolnay/syn/commit/b5d62a6e43a29418e118b7bcb48e211cefc0154f"><code>b5d62a6</code></a> Release 3.0.4</li> <li><a href="https://github.com/dtolnay/syn/commit/abf019cbcba61164c626a1bc4ea6f04653c02a5c"><code>abf019c</code></a> Merge pull request <a href="https://redirect.github.com/dtolnay/syn/issues/2078">#2078</a> from dtolnay/foreginitemfn</li> <li><a href="https://github.com/dtolnay/syn/commit/d454333f5bb73f2e0e235bdefff50809342f1485"><code>d454333</code></a> Allow safe fn in impl Parse for ForeignItemFn</li> <li><a href="https://github.com/dtolnay/syn/commit/8011b1c512dbe87c6b09627790735ecdaa65c0db"><code>8011b1c</code></a> Update test suite to nightly-2026-08-18</li> <li><a href="https://github.com/dtolnay/syn/commit/56a8d83b8f313b4a111fc44f7f223a574d918af5"><code>56a8d83</code></a> Raise rayon thread size for tests</li> <li><a href="https://github.com/dtolnay/syn/commit/f2c5c50200c1f056adc422e231819c8e4374bdfa"><code>f2c5c50</code></a> Ignore assert_is_empty pedantic clippy lint</li> <li><a href="https://github.com/dtolnay/syn/commit/0eba76daa24b574fc0d93e91cf575584228d2ed4"><code>0eba76d</code></a> Update test suite to nightly-2026-08-05</li> <li><a href="https://github.com/dtolnay/syn/commit/baaebce9776c4963f093334aae5d8899d1a056f6"><code>baaebce</code></a> Update test suite to nightly-2026-07-25</li> <li><a href="https://github.com/dtolnay/syn/commit/b886a38eb4ef97f40b5592d7d048f56f6a6b45f1"><code>b886a38</code></a> Update test suite to nightly-2026-07-24</li> <li><a href="https://github.com/dtolnay/syn/commit/3c41416b4ca7b07d6c3d7b71189e277369679858"><code>3c41416</code></a> Update test suite to nightly-2026-07-23</li> <li>See full diff in <a href="https://github.com/dtolnay/syn/compare/3.0.3...3.0.4">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…e#24845) Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.86.5 to 2.87.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/taiki-e/install-action/releases">taiki-e/install-action's releases</a>.</em></p> <blockquote> <h2>2.87.1</h2> <ul> <li> <p>Update <code>uv@latest</code> to 0.12.7.</p> </li> <li> <p>Update <code>typos@latest</code> to 1.49.1.</p> </li> <li> <p>Update <code>syft@latest</code> to 1.51.1.</p> </li> <li> <p>Update <code>prek@latest</code> to 0.5.0.</p> </li> <li> <p>Update <code>d2@latest</code> to 0.8.2.</p> </li> <li> <p>Update <code>cargo-zigbuild@latest</code> to 0.23.3.</p> </li> <li> <p>Update <code>cargo-rdme@latest</code> to 2.2.2.</p> </li> <li> <p>Update <code>biome@latest</code> to 2.5.11.</p> </li> </ul> <h2>2.87.0</h2> <ul> <li> <p>Support <code>kache</code>. (<a href="https://redirect.github.com/taiki-e/install-action/pull/1980">#1980</a>, thanks <a href="https://github.com/ChrisJr404"><code>@ChrisJr404</code></a>)</p> </li> <li> <p>Update <code>vacuum@latest</code> to 0.30.1.</p> </li> <li> <p>Update <code>uv@latest</code> to 0.12.6.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.8.14.</p> </li> <li> <p>Update <code>editorconfig-checker@latest</code> to 3.11.2.</p> </li> </ul> <h2>2.86.8</h2> <ul> <li> <p>Update <code>wasmtime@latest</code> to 48.0.1.</p> </li> <li> <p>Update <code>wasm-tools@latest</code> to 1.258.0.</p> </li> <li> <p>Update <code>oxfmt@latest</code> to 1.80.0.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.8.12.</p> </li> <li> <p>Update <code>kingfisher@latest</code> to 2.0.0.</p> </li> <li> <p>Update <code>cargo-zigbuild@latest</code> to 0.23.2.</p> </li> </ul> <h2>2.86.7</h2> <ul> <li> <p>Update <code>tombi@latest</code> to 1.4.1.</p> </li> <li> <p>Update <code>rafn@latest</code> to 0.1.5.</p> </li> <li> <p>Update <code>cargo-binstall@latest</code> to 1.22.0.</p> </li> </ul> <h2>2.86.6</h2> <ul> <li>Update <code>dprint@latest</code> to 0.56.1.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md">taiki-e/install-action's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <p>All notable changes to this project will be documented in this file.</p> <p>This project adheres to <a href="https://semver.org">Semantic Versioning</a>.</p> <!-- raw HTML omitted --> <h2>[Unreleased]</h2> <h2>[2.87.2] - 2026-08-30</h2> <ul> <li> <p>Update <code>typos@latest</code> to 1.50.0.</p> </li> <li> <p>Update <code>tombi@latest</code> to 1.5.0.</p> </li> <li> <p>Update <code>shfmt@latest</code> to 3.14.0.</p> </li> </ul> <h2>[2.87.1] - 2026-08-29</h2> <ul> <li> <p>Update <code>uv@latest</code> to 0.12.7.</p> </li> <li> <p>Update <code>typos@latest</code> to 1.49.1.</p> </li> <li> <p>Update <code>syft@latest</code> to 1.51.1.</p> </li> <li> <p>Update <code>prek@latest</code> to 0.5.0.</p> </li> <li> <p>Update <code>d2@latest</code> to 0.8.2.</p> </li> <li> <p>Update <code>cargo-zigbuild@latest</code> to 0.23.3.</p> </li> <li> <p>Update <code>cargo-rdme@latest</code> to 2.2.2.</p> </li> <li> <p>Update <code>biome@latest</code> to 2.5.11.</p> </li> </ul> <h2>[2.87.0] - 2026-08-27</h2> <ul> <li> <p>Support <code>kache</code>. (<a href="https://redirect.github.com/taiki-e/install-action/pull/1980">#1980</a>, thanks <a href="https://github.com/ChrisJr404"><code>@ChrisJr404</code></a>)</p> </li> <li> <p>Update <code>vacuum@latest</code> to 0.30.1.</p> </li> <li> <p>Update <code>uv@latest</code> to 0.12.6.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.8.14.</p> </li> <li> <p>Update <code>editorconfig-checker@latest</code> to 3.11.2.</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/taiki-e/install-action/commit/742a3317eac7bd62f91cd888b4eead5e784ba833"><code>742a331</code></a> Release 2.87.1</li> <li><a href="https://github.com/taiki-e/install-action/commit/c5b69cd73ba573d80324cdcd0b052ca509084b22"><code>c5b69cd</code></a> Update <code>uv@latest</code> to 0.12.7</li> <li><a href="https://github.com/taiki-e/install-action/commit/85e6400c85d74d612698536feafd9e20f40aa257"><code>85e6400</code></a> Update <code>typos@latest</code> to 1.49.1</li> <li><a href="https://github.com/taiki-e/install-action/commit/91f3a12371baac5722df4e5c6d42937d16656ffe"><code>91f3a12</code></a> Update tombi manifest</li> <li><a href="https://github.com/taiki-e/install-action/commit/160f8b13c099dc3c9067e0658c0da7ac925a00ff"><code>160f8b1</code></a> Update <code>syft@latest</code> to 1.51.1</li> <li><a href="https://github.com/taiki-e/install-action/commit/aa48d3e72e94215619c754df53a143cdaabefc8b"><code>aa48d3e</code></a> Update shfmt manifest</li> <li><a href="https://github.com/taiki-e/install-action/commit/06671d277ce58cccc6fe7f9d6509e0327c53f4f3"><code>06671d2</code></a> Update <code>prek@latest</code> to 0.5.0</li> <li><a href="https://github.com/taiki-e/install-action/commit/8060a83f169920516f09e1cf1c58677cec39b6c7"><code>8060a83</code></a> Update <code>d2@latest</code> to 0.8.2</li> <li><a href="https://github.com/taiki-e/install-action/commit/74cae3c341a52a9e510e2f660ed813b801bff6dd"><code>74cae3c</code></a> Update <code>cargo-zigbuild@latest</code> to 0.23.3</li> <li><a href="https://github.com/taiki-e/install-action/commit/a65402f15d24476e19123aafa105daa804db68c0"><code>a65402f</code></a> Update <code>cargo-rdme@latest</code> to 2.2.2</li> <li>Additional commits viewable in <a href="https://github.com/taiki-e/install-action/compare/ba47c86ac325773530516bb756137ac718732518...742a3317eac7bd62f91cd888b4eead5e784ba833">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…updates (apache#24844) Bumps the codeql-actions group with 2 updates in the / directory: [github/codeql-action/init](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action). Updates `github/codeql-action/init` from 4.37.8 to 4.37.9 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/releases">github/codeql-action/init's releases</a>.</em></p> <blockquote> <h2>v4.37.9</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/init's changelog</a>.</em></p> <blockquote> <h1>CodeQL Action Changelog</h1> <p>See the <a href="https://github.com/github/codeql-action/releases">releases page</a> for the relevant changes to the CodeQL CLI and language packs.</p> <h2>[UNRELEASED]</h2> <p>No user facing changes.</p> <h2>4.37.9 - 26 Aug 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li> </ul> <h2>4.37.8 - 21 Aug 2026</h2> <p>No user facing changes.</p> <h2>4.37.7 - 13 Aug 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li> </ul> <h2>4.37.6 - 04 Aug 2026</h2> <ul> <li>Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to <code>.github/codeql-config.yml</code> to align it with the suggested path that is used elsewhere. <a href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li> </ul> <h2>4.37.5 - 03 Aug 2026</h2> <ul> <li>Fixed a bug where a network error while streaming the download of the CodeQL bundle could terminate the <code>init</code> Action instead of falling back to downloading the bundle before extracting it. <a href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li> </ul> <h2>4.37.4 - 29 Jul 2026</h2> <ul> <li>This version of the CodeQL Action adds support for the <code>tools</code> input for the <code>codeql-action/init</code> step to be specified using a <code>github-codeql-tools</code> <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository property</a>. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to <code>toolcache</code> to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for <code>tools</code> in the workflow definition always takes precedence unless the value of the repository property starts with <code>!</code>. <a href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li> </ul> <h2>4.37.3 - 22 Jul 2026</h2> <p>No user facing changes.</p> <h2>4.37.2 - 21 Jul 2026</h2> <ul> <li>The new address format for the <code>config-file</code> input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the <code>remote=</code> prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. <a href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li> <li>The CodeQL Action can now make use of <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured private registries</a> in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. <a href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li> </ul> <h2>4.37.1 - 16 Jul 2026</h2> <ul> <li><em>Upcoming breaking change</em>: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li> </ul> <h2>4.37.0 - 08 Jul 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/github/codeql-action/commit/cdf488f595d80d6e07e03d4674febd5ab45fa938"><code>cdf488f</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4107">#4107</a> from github/update-v4.37.9-920ba7cd1</li> <li><a href="https://github.com/github/codeql-action/commit/7243f38558d187dde99730d224bb47aa26a95306"><code>7243f38</code></a> Update changelog for v4.37.9</li> <li><a href="https://github.com/github/codeql-action/commit/920ba7cd1596037e042122c00381eb16b397d68e"><code>920ba7c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4106">#4106</a> from github/update-bundle/codeql-bundle-v2.26.4</li> <li><a href="https://github.com/github/codeql-action/commit/ecfa6e16817b8f490bc9a59baa391baf4fa3e3c2"><code>ecfa6e1</code></a> Add changelog note</li> <li><a href="https://github.com/github/codeql-action/commit/adcdf4a70d247343cf9c29e0f7a6658b51c3a2b1"><code>adcdf4a</code></a> Update default bundle to codeql-bundle-v2.26.4</li> <li><a href="https://github.com/github/codeql-action/commit/486fec2a3ea2626afcd8c7e9208b4f515078dd7e"><code>486fec2</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4099">#4099</a> from github/update-supported-enterprise-server-versions</li> <li><a href="https://github.com/github/codeql-action/commit/134624c67b20869c2aaa36dafa726375b78a5d76"><code>134624c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4101">#4101</a> from github/dependabot/npm_and_yarn/npm-minor-457d82...</li> <li><a href="https://github.com/github/codeql-action/commit/ff43db8f982a368288f117354fb8d046e937124c"><code>ff43db8</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4103">#4103</a> from github/mergeback/v4.37.8-to-main-db488dde</li> <li><a href="https://github.com/github/codeql-action/commit/4605e03a74cf891614c4d76f82384a16c1c11816"><code>4605e03</code></a> Rebuild</li> <li><a href="https://github.com/github/codeql-action/commit/099c869cad6bf3b88657154d4ae47ffed27e632d"><code>099c869</code></a> Update changelog and version after v4.37.8</li> <li>Additional commits viewable in <a href="https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938">compare view</a></li> </ul> </details> <br /> Updates `github/codeql-action/analyze` from 4.37.8 to 4.37.9 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/releases">github/codeql-action/analyze's releases</a>.</em></p> <blockquote> <h2>v4.37.9</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action/analyze's changelog</a>.</em></p> <blockquote> <h1>CodeQL Action Changelog</h1> <p>See the <a href="https://github.com/github/codeql-action/releases">releases page</a> for the relevant changes to the CodeQL CLI and language packs.</p> <h2>[UNRELEASED]</h2> <p>No user facing changes.</p> <h2>4.37.9 - 26 Aug 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.4">2.26.4</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4106">#4106</a></li> </ul> <h2>4.37.8 - 21 Aug 2026</h2> <p>No user facing changes.</p> <h2>4.37.7 - 13 Aug 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3">2.26.3</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4085">#4085</a></li> </ul> <h2>4.37.6 - 04 Aug 2026</h2> <ul> <li>Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to <code>.github/codeql-config.yml</code> to align it with the suggested path that is used elsewhere. <a href="https://redirect.github.com/github/codeql-action/pull/4070">#4070</a></li> </ul> <h2>4.37.5 - 03 Aug 2026</h2> <ul> <li>Fixed a bug where a network error while streaming the download of the CodeQL bundle could terminate the <code>init</code> Action instead of falling back to downloading the bundle before extracting it. <a href="https://redirect.github.com/github/codeql-action/pull/4061">#4061</a></li> </ul> <h2>4.37.4 - 29 Jul 2026</h2> <ul> <li>This version of the CodeQL Action adds support for the <code>tools</code> input for the <code>codeql-action/init</code> step to be specified using a <code>github-codeql-tools</code> <a href="https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization">repository property</a>. This feature will gradually be rolled out following the release of this version. Once rolled out, this allows for the CodeQL CLI version that is used in GitHub-managed workflows, such as Default Setup, to be set to a custom value. For example, customers who run into issues with rate limits when a new CodeQL CLI version is released can set the value to <code>toolcache</code> to always use the CodeQL CLI version that is available in the runner toolcache. For Advanced Setup workflows, the value provided for <code>tools</code> in the workflow definition always takes precedence unless the value of the repository property starts with <code>!</code>. <a href="https://redirect.github.com/github/codeql-action/pull/4037">#4037</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2">2.26.2</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4051">#4051</a></li> </ul> <h2>4.37.3 - 22 Jul 2026</h2> <p>No user facing changes.</p> <h2>4.37.2 - 21 Jul 2026</h2> <ul> <li>The new address format for the <code>config-file</code> input that was introduced in CodeQL Action 4.37.0 is now enabled by default. In addition to the format described there, the <code>remote=</code> prefix can now be used to explicitly indicate that the input refers to a remote file. All previous input formats continue to be accepted as well. <a href="https://redirect.github.com/github/codeql-action/pull/4023">#4023</a></li> <li>The CodeQL Action can now make use of <a href="https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries">configured private registries</a> in Default Setup to retrieve CodeQL configuration files from remote repositories that require authentication. This will allow customers to store their CodeQL configuration in a single repository that can then be referenced by Default Setup workflows in other repositories. We expect to roll this and other, related changes out to everyone in July. <a href="https://redirect.github.com/github/codeql-action/pull/4007">#4007</a></li> </ul> <h2>4.37.1 - 16 Jul 2026</h2> <ul> <li><em>Upcoming breaking change</em>: Add a deprecation warning for customers using CodeQL version 2.20.6 and earlier. These versions of CodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise Server 3.16, and will be unsupported by the next minor release of the CodeQL Action. <a href="https://redirect.github.com/github/codeql-action/pull/3956">#3956</a></li> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1">2.26.1</a>. <a href="https://redirect.github.com/github/codeql-action/pull/4019">#4019</a></li> </ul> <h2>4.37.0 - 08 Jul 2026</h2> <ul> <li>Update default CodeQL bundle version to <a href="https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0">2.26.0</a>. <a href="https://redirect.github.com/github/codeql-action/pull/3995">#3995</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/github/codeql-action/commit/cdf488f595d80d6e07e03d4674febd5ab45fa938"><code>cdf488f</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4107">#4107</a> from github/update-v4.37.9-920ba7cd1</li> <li><a href="https://github.com/github/codeql-action/commit/7243f38558d187dde99730d224bb47aa26a95306"><code>7243f38</code></a> Update changelog for v4.37.9</li> <li><a href="https://github.com/github/codeql-action/commit/920ba7cd1596037e042122c00381eb16b397d68e"><code>920ba7c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4106">#4106</a> from github/update-bundle/codeql-bundle-v2.26.4</li> <li><a href="https://github.com/github/codeql-action/commit/ecfa6e16817b8f490bc9a59baa391baf4fa3e3c2"><code>ecfa6e1</code></a> Add changelog note</li> <li><a href="https://github.com/github/codeql-action/commit/adcdf4a70d247343cf9c29e0f7a6658b51c3a2b1"><code>adcdf4a</code></a> Update default bundle to codeql-bundle-v2.26.4</li> <li><a href="https://github.com/github/codeql-action/commit/486fec2a3ea2626afcd8c7e9208b4f515078dd7e"><code>486fec2</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4099">#4099</a> from github/update-supported-enterprise-server-versions</li> <li><a href="https://github.com/github/codeql-action/commit/134624c67b20869c2aaa36dafa726375b78a5d76"><code>134624c</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4101">#4101</a> from github/dependabot/npm_and_yarn/npm-minor-457d82...</li> <li><a href="https://github.com/github/codeql-action/commit/ff43db8f982a368288f117354fb8d046e937124c"><code>ff43db8</code></a> Merge pull request <a href="https://redirect.github.com/github/codeql-action/issues/4103">#4103</a> from github/mergeback/v4.37.8-to-main-db488dde</li> <li><a href="https://github.com/github/codeql-action/commit/4605e03a74cf891614c4d76f82384a16c1c11816"><code>4605e03</code></a> Rebuild</li> <li><a href="https://github.com/github/codeql-action/commit/099c869cad6bf3b88657154d4ae47ffed27e632d"><code>099c869</code></a> Update changelog and version after v4.37.8</li> <li>Additional commits viewable in <a href="https://github.com/github/codeql-action/compare/db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28...cdf488f595d80d6e07e03d4674febd5ab45fa938">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [blake2](https://github.com/RustCrypto/hashes) from 0.10.6 to 0.11.0. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/RustCrypto/hashes/commit/fa3084083d946ac12436567d5a59c0935d5db1fa"><code>fa30840</code></a> blake2 v0.11.0 (<a href="https://redirect.github.com/RustCrypto/hashes/issues/911">#911</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/f6c786d72ed4d37a32dcd32daa2e7277dd4683e1"><code>f6c786d</code></a> ci: bump the all-deps group across 1 directory with 3 updates (<a href="https://redirect.github.com/RustCrypto/hashes/issues/896">#896</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/7c32a0da089fe53c1294486161766d9338342f7b"><code>7c32a0d</code></a> jh: add long-input regression tests (<a href="https://redirect.github.com/RustCrypto/hashes/issues/894">#894</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/b1f64e48b5bd800c2584f96f99dd9f10d923d178"><code>b1f64e4</code></a> blake2: remove SIMD support (<a href="https://redirect.github.com/RustCrypto/hashes/issues/898">#898</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/f72fa5f94f2aaac28cb1e1a3b20f77d129d8e4f7"><code>f72fa5f</code></a> sha1: add changelog entry for v0.10.7 (<a href="https://redirect.github.com/RustCrypto/hashes/issues/899">#899</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/7fcd22600a70e7e22232409891d228027e22cf98"><code>7fcd226</code></a> md5: tweak "library name" section in readme (<a href="https://redirect.github.com/RustCrypto/hashes/issues/890">#890</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/01f6276d0b116f55f5262ca4633e19a232d07607"><code>01f6276</code></a> ci: bump actions/cache from 5 to 6 (<a href="https://redirect.github.com/RustCrypto/hashes/issues/892">#892</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/e499ef4be18015a1b5e1255ef8c5aef05822e885"><code>e499ef4</code></a> jh: implement SerializableState (<a href="https://redirect.github.com/RustCrypto/hashes/issues/889">#889</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/2b239235d8d43ed810284bab72199d67c14ac2d8"><code>2b23923</code></a> Release bash-hash v0.1.1 (<a href="https://redirect.github.com/RustCrypto/hashes/issues/887">#887</a>)</li> <li><a href="https://github.com/RustCrypto/hashes/commit/947dfc52da2663ca6984dd70b98bc43a96839fc3"><code>947dfc5</code></a> bash-hash: fix package metadata and README links (<a href="https://redirect.github.com/RustCrypto/hashes/issues/886">#886</a>)</li> <li>Additional commits viewable in <a href="https://github.com/RustCrypto/hashes/compare/blake2-v0.10.6...blake2-v0.11.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…datafusion-wasm-app with 2 updates (apache#24839) Bumps the all-npm-deps group in /datafusion/wasmtest/datafusion-wasm-app with 2 updates: [webpack](https://github.com/webpack/webpack) and [webpack-cli](https://github.com/webpack/webpack-cli). Updates `webpack` from 5.109.2 to 5.110.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/webpack/webpack/releases">webpack's releases</a>.</em></p> <blockquote> <h2>v5.110.1</h2> <h3>Patch Changes</h3> <ul> <li> <p>Fix a capture-group-less <code>snapshot.managedPaths</code> RegExp; speed up cache writes. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21843">#21843</a>)</p> </li> <li> <p>Throw <code>SyntaxError</code>, or <code>WebAssembly.CompileError</code>, from an unparsable module. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21847">#21847</a>)</p> </li> <li> <p>Accept the <code>optimization.minimize: true</code> shorthand set by a plugin in <code>apply()</code>. (by <a href="https://github.com/AgentEnder"><code>@AgentEnder</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21845">#21845</a>)</p> </li> </ul> <h2>v5.110.0</h2> <h3>Minor Changes</h3> <ul> <li> <p>Wrap concatenated modules in lazy <code>__webpack_require__.cw</code> accessors and inline <code>require()</code>, keeping a wrapped body's names and side effects intact. (by <a href="https://github.com/hai-x"><code>@hai-x</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21519">#21519</a>)</p> </li> <li> <p>Add performance hints reporting what a build costs: duplicate packages and modules, circular dependencies, broad contexts, large modules and chunks, hotspots, <code>eval</code>, missing PURE annotations, polyfills, redundant dynamic imports, OS-dependent rules, cache effectiveness, how chunks load, what splitting refused, why an optimization was skipped, and rules, defines, externals, aliases and barrel reexports nothing uses. An oversized asset names its largest modules, and an entrypoint carrying the runtime recommends <code>optimization.runtimeChunk</code>. Enable every check not set individually with <code>performance.all</code>, report hints in stats only with <code>performance.hints: "stats"</code>, and get them in a stable order that leaves the build hashes unchanged. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> <li> <p>Add the <code>descriptionRelativePath</code> module rule condition. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21705">#21705</a>)</p> </li> <li> <p>Add OS-independent <code>glob</code> matching to module rules. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21771">#21771</a>)</p> </li> <li> <p>Report inner-graph, AMD and bare <code>module</code> bailouts in <code>optimizationBailout</code>. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21740">#21740</a>)</p> </li> <li> <p>Allow marking externals as side-effect-free with a <code>sideEffects</code> flag. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21712">#21712</a>)</p> </li> <li> <p>Give externals the original request of a context module element. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21780">#21780</a>)</p> </li> <li> <p>Add the <code>externalsPresets.nodeModules</code> preset with an <code>allowlist</code> option to externalize installed packages, replacing the <code>webpack-node-externals</code> plugin. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21569">#21569</a>)</p> </li> <li> <p>Add <code>output.library.umdAmdContainer</code> for an AMD-style loader branch in UMD. (by <a href="https://github.com/hai-x"><code>@hai-x</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21770">#21770</a>)</p> </li> <li> <p>Resolve <code>@Custom-Media</code> values that are <code>true</code> / <code>false</code> or name another custom media. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21624">#21624</a>)</p> </li> <li> <p>Add the <code>__webpack_css_server_styles__</code> module variable to read the CSS collected while rendering without a DOM, and keep that CSS in the order the styles were applied. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21576">#21576</a>)</p> </li> <li> <p>Patch the HTML <code><head></code> in place on hot update instead of forcing a full reload, including when a <code><script></code> that never executed is removed. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21624">#21624</a>)</p> </li> <li> <p>Scope counter names in CSS modules; fix the <code>counter()</code> counter-style and <code>animation</code> timeline keywords. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21600">#21600</a>)</p> </li> <li> <p>Derive <code>import defer</code> / <code>import source</code> from the target and fix the source phase. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21810">#21810</a>)</p> </li> <li> <p>Emit analyzable ESM urls for chunks, assets, styles, workers and wasm. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21788">#21788</a>)</p> </li> <li> <p>Tree shake CommonJS: <code>module.exports</code> object literals, exports destructured from a <code>require()</code> binding, unused method requires, and unused side-effect-free <code>require()</code> calls and reexports. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> <li> <p>Resolve relative entry <code>baseUri</code> values and bake one side of a hash cycle. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21750">#21750</a>)</p> </li> <li> <p>Minify CSS further, only where the document is unchanged: shorthands and box longhands, <code>font-weight</code>, <code><position></code> and <code>font-stretch</code> keywords, colors (polar, Lab and <code>hsl()</code> converted to hex), numbers, times, zero units, <code>calc()</code> and every math function the spec names folded over constants, selector lists, An+B, keyframe selectors, media-feature ranges, <code>unicode-range</code>, <code>transition</code> layers, <code>display</code>, transforms, gradients, font families, identical repeated declarations, and rules an identical later one makes dead. Abilities are read off the target browsers, <code>vendorPrefixes</code> adds and drops vendor prefixes for them, and <code>rewriteCustomProperties</code> shortens custom property values. Minification never changes whether a declaration parses, and beautifying keeps every rule. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> <li> <p>Safely minify CSS (with source maps) and HTML assets when <code>optimization.minimize</code> is enabled, unless a minimizer is already configured for them, making only transformations an engine cannot tell apart. Every rewrite is named as an option, so it can be switched off. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/webpack/webpack/blob/main/CHANGELOG.md">webpack's changelog</a>.</em></p> <blockquote> <h2>5.110.1</h2> <h3>Patch Changes</h3> <ul> <li> <p>Fix a capture-group-less <code>snapshot.managedPaths</code> RegExp; speed up cache writes. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21843">#21843</a>)</p> </li> <li> <p>Throw <code>SyntaxError</code>, or <code>WebAssembly.CompileError</code>, from an unparsable module. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21847">#21847</a>)</p> </li> <li> <p>Accept the <code>optimization.minimize: true</code> shorthand set by a plugin in <code>apply()</code>. (by <a href="https://github.com/AgentEnder"><code>@AgentEnder</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21845">#21845</a>)</p> </li> </ul> <h2>5.110.0</h2> <h3>Minor Changes</h3> <ul> <li> <p>Wrap concatenated modules in lazy <code>__webpack_require__.cw</code> accessors and inline <code>require()</code>, keeping a wrapped body's names and side effects intact. (by <a href="https://github.com/hai-x"><code>@hai-x</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21519">#21519</a>)</p> </li> <li> <p>Add performance hints reporting what a build costs: duplicate packages and modules, circular dependencies, broad contexts, large modules and chunks, hotspots, <code>eval</code>, missing PURE annotations, polyfills, redundant dynamic imports, OS-dependent rules, cache effectiveness, how chunks load, what splitting refused, why an optimization was skipped, and rules, defines, externals, aliases and barrel reexports nothing uses. An oversized asset names its largest modules, and an entrypoint carrying the runtime recommends <code>optimization.runtimeChunk</code>. Enable every check not set individually with <code>performance.all</code>, report hints in stats only with <code>performance.hints: "stats"</code>, and get them in a stable order that leaves the build hashes unchanged. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> <li> <p>Add the <code>descriptionRelativePath</code> module rule condition. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21705">#21705</a>)</p> </li> <li> <p>Add OS-independent <code>glob</code> matching to module rules. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21771">#21771</a>)</p> </li> <li> <p>Report inner-graph, AMD and bare <code>module</code> bailouts in <code>optimizationBailout</code>. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21740">#21740</a>)</p> </li> <li> <p>Allow marking externals as side-effect-free with a <code>sideEffects</code> flag. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21712">#21712</a>)</p> </li> <li> <p>Give externals the original request of a context module element. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21780">#21780</a>)</p> </li> <li> <p>Add the <code>externalsPresets.nodeModules</code> preset with an <code>allowlist</code> option to externalize installed packages, replacing the <code>webpack-node-externals</code> plugin. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21569">#21569</a>)</p> </li> <li> <p>Add <code>output.library.umdAmdContainer</code> for an AMD-style loader branch in UMD. (by <a href="https://github.com/hai-x"><code>@hai-x</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21770">#21770</a>)</p> </li> <li> <p>Resolve <code>@Custom-Media</code> values that are <code>true</code> / <code>false</code> or name another custom media. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21624">#21624</a>)</p> </li> <li> <p>Add the <code>__webpack_css_server_styles__</code> module variable to read the CSS collected while rendering without a DOM, and keep that CSS in the order the styles were applied. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21576">#21576</a>)</p> </li> <li> <p>Patch the HTML <code><head></code> in place on hot update instead of forcing a full reload, including when a <code><script></code> that never executed is removed. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21624">#21624</a>)</p> </li> <li> <p>Scope counter names in CSS modules; fix the <code>counter()</code> counter-style and <code>animation</code> timeline keywords. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21600">#21600</a>)</p> </li> <li> <p>Derive <code>import defer</code> / <code>import source</code> from the target and fix the source phase. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21810">#21810</a>)</p> </li> <li> <p>Emit analyzable ESM urls for chunks, assets, styles, workers and wasm. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21788">#21788</a>)</p> </li> <li> <p>Tree shake CommonJS: <code>module.exports</code> object literals, exports destructured from a <code>require()</code> binding, unused method requires, and unused side-effect-free <code>require()</code> calls and reexports. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> <li> <p>Resolve relative entry <code>baseUri</code> values and bake one side of a hash cycle. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21750">#21750</a>)</p> </li> <li> <p>Minify CSS further, only where the document is unchanged: shorthands and box longhands, <code>font-weight</code>, <code><position></code> and <code>font-stretch</code> keywords, colors (polar, Lab and <code>hsl()</code> converted to hex), numbers, times, zero units, <code>calc()</code> and every math function the spec names folded over constants, selector lists, An+B, keyframe selectors, media-feature ranges, <code>unicode-range</code>, <code>transition</code> layers, <code>display</code>, transforms, gradients, font families, identical repeated declarations, and rules an identical later one makes dead. Abilities are read off the target browsers, <code>vendorPrefixes</code> adds and drops vendor prefixes for them, and <code>rewriteCustomProperties</code> shortens custom property values. Minification never changes whether a declaration parses, and beautifying keeps every rule. (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack/pull/21841">#21841</a>)</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/webpack/webpack/commit/0b2952e15bb1aa9a198acbbfdcb9a0dc1aabb5af"><code>0b2952e</code></a> chore(release): new release (<a href="https://redirect.github.com/webpack/webpack/issues/21846">#21846</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/2a1fda482086a8d10383554da7a47944c74e2755"><code>2a1fda4</code></a> fix: throw a SyntaxError from a module that failed to parse (<a href="https://redirect.github.com/webpack/webpack/issues/21847">#21847</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/281efa6d141274fe5ede946fa49fe81a94b010ce"><code>281efa6</code></a> test(css): cover a loader-added BOM in the css pipeline (<a href="https://redirect.github.com/webpack/webpack/issues/21848">#21848</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/36ded2cbb1d490282675f69c05bafc5e57bef3ed"><code>36ded2c</code></a> fix: accept the optimization.minimize true shorthand after normalization (<a href="https://redirect.github.com/webpack/webpack/issues/21">#21</a>...</li> <li><a href="https://github.com/webpack/webpack/commit/c15022531a28f2e41c93ac896d3a2c36e3e79116"><code>c150225</code></a> fix(cache): accept a managedPaths RegExp without a capture group, and speed u...</li> <li><a href="https://github.com/webpack/webpack/commit/3a7c0e6e27f90f9c5e407c18506a5034aabcf27d"><code>3a7c0e6</code></a> chore(release): new release (<a href="https://redirect.github.com/webpack/webpack/issues/21545">#21545</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/75891c89c212ec5e5ebbb3d13fba67192ddba678"><code>75891c8</code></a> chore(changesets): union same-subject entries (<a href="https://redirect.github.com/webpack/webpack/issues/21841">#21841</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/6b96de733ff1957f599c0c702273c66618027c68"><code>6b96de7</code></a> feat(config): emit no development source map for library builds (<a href="https://redirect.github.com/webpack/webpack/issues/21839">#21839</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/ff0c83234322f051b7f509a7176243356f9b9346"><code>ff0c832</code></a> feat(css,html): reach embedded source from cssMinify and htmlMinify (<a href="https://redirect.github.com/webpack/webpack/issues/21838">#21838</a>)</li> <li><a href="https://github.com/webpack/webpack/commit/06bedfbd2a8b0c63078b6e1789b5f769174acfb6"><code>06bedfb</code></a> chore(deps): bump test/wpt in the dependencies group (<a href="https://redirect.github.com/webpack/webpack/issues/21836">#21836</a>)</li> <li>Additional commits viewable in <a href="https://github.com/webpack/webpack/compare/v5.109.2...v5.110.1">compare view</a></li> </ul> </details> <br /> Updates `webpack-cli` from 7.2.2 to 7.2.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/webpack/webpack-cli/releases">webpack-cli's releases</a>.</em></p> <blockquote> <h2>webpack-cli@7.2.3</h2> <h3>Patch Changes</h3> <ul> <li> <p>fix: resolve the <code>webpack-dev-server</code> type from its default export, so the types work with both v5 and v6 (by <a href="https://github.com/bjohansebas"><code>@bjohansebas</code></a> in <a href="https://redirect.github.com/webpack/webpack-cli/pull/4834">#4834</a>)</p> </li> <li> <p>feat: allow <code>toml@5</code> as a peer dependency for TOML configuration files (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack-cli/pull/4837">#4837</a>)</p> </li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/webpack/webpack-cli/blob/main/CHANGELOG.md">webpack-cli's changelog</a>.</em></p> <blockquote> <h2>7.2.3</h2> <h3>Patch Changes</h3> <ul> <li> <p>fix: resolve the <code>webpack-dev-server</code> type from its default export, so the types work with both v5 and v6 (by <a href="https://github.com/bjohansebas"><code>@bjohansebas</code></a> in <a href="https://redirect.github.com/webpack/webpack-cli/pull/4834">#4834</a>)</p> </li> <li> <p>feat: allow <code>toml@5</code> as a peer dependency for TOML configuration files (by <a href="https://github.com/alexander-akait"><code>@alexander-akait</code></a> in <a href="https://redirect.github.com/webpack/webpack-cli/pull/4837">#4837</a>)</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/webpack/webpack-cli/commit/7d40e4efdd2d8e8af2b0d7c9f612a8b51b41e3fb"><code>7d40e4e</code></a> chore(release): new release (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4839">#4839</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/1f6593a8c04b70883620dce821b9f71fbc074387"><code>1f6593a</code></a> ci: use the input names changesets/action v2 expects (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4838">#4838</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/99cfc4f2497950814a8186e0fadc03b10e277204"><code>99cfc4f</code></a> build(deps): update dependencies (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4837">#4837</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/11be63414a8ed6f87174392137b1546b72e4aacf"><code>11be634</code></a> feat(create-webpack-app): stop asking about HTML and CSS (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4836">#4836</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/a2418aa721bd4d1773a9863cd90af818c6cb052b"><code>a2418aa</code></a> feat(create-webpack-app): use webpack's native CSS and HTML support in init t...</li> <li><a href="https://github.com/webpack/webpack-cli/commit/3664b9d8239834f63124783307dd3e93953d6dd9"><code>3664b9d</code></a> chore: update webpack-dev-server to v6 and test against v5 and v6 (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4834">#4834</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/ce1a2195e4781ba3307157eb8a3694e8a497c977"><code>ce1a219</code></a> ci: node 26 (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4763">#4763</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/0cfc07773446b110c235e8206ab4e088f74721cd"><code>0cfc077</code></a> chore(deps): bump changesets/action in the dependencies group (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4831">#4831</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/ef262ebfdf13cd0b56b68db743a937c6a75e575f"><code>ef262eb</code></a> chore(deps): bump changesets/action in the dependencies group (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4830">#4830</a>)</li> <li><a href="https://github.com/webpack/webpack-cli/commit/d90f5abbe1d1e5d0de1dc03f82cb22ce151f6476"><code>d90f5ab</code></a> chore: add gitignore to ignore autogenerated build & fix codecov option (<a href="https://redirect.github.com/webpack/webpack-cli/issues/4828">#4828</a>)</li> <li>Additional commits viewable in <a href="https://github.com/webpack/webpack-cli/compare/webpack-cli@7.2.2...webpack-cli@7.2.3">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…hen OOM (apache#24785) ## 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#22710 ## 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 apache#24486 for the rationale. That discussion covers the issue and three potential solutions: error, early-emit, and spill. This PR implements the early-emit behavior agreed on there. ## 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. --> Key changes: In datafusion/physical-plan/src/aggregates/partial_reduce_stream.rs - top comment explains the high-level ideas - To understand the implementation, start from `poll_next()` and follow along ## Are these changes tested? <!-- We typically require tests for all PRs in order to: 1. Prevent the code from being accidentally broken by subsequent changes 2. Serve as another way to document the expected behavior of the code If tests are not included in your PR, please explain why (for example, are they covered by existing tests)? --> UTs (note partial-reduce aggregation can't be planned from SQL, so we can't do sqllogictests here) ## 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
…pache#23615) ## Which issue does this PR close? - Closes apache#14943. Revives apache#21870, which was closed by the stale bot. The direction was agreed in that thread, and `sql_planner` was benchmarked there ([results](apache#21870 (comment)), no measurable change). ## Rationale for this change `SimplifyExpressions` disables canonicalization for `LogicalPlan::Join` (see apache#8780), so the AND/OR dedup in `expr_contains_inner` cannot recognize duplicates that differ only by commutative operand order (`A = B` vs `B = A`). Simplifying inside a join filter, the delta-rs MERGE case reported in apache#14943, keeps the duplicate across simplifier cycles because nothing normalizes operand order first. The issue thread pointed at the fix: CSE already dedups `A = B` / `B = A` via `NormalizeEq`, so this routes the simplifier's leaf comparison through the same trait. ## What changes are included in this PR? `expr_contains_inner` compares leaves with `Expr::normalize_eq` instead of `==`. `NormalizeEq` handles `+`, `*`, `&`, `|`, `^`, `=`, and `!=` commutatively and falls back to structural `==` for everything else. Non-commutative rules and the existing `!needle.is_volatile()` guard are unchanged. A regression test covers the `AND`, `OR`, and 3-conjunct nested forms. `delete_xor_in_complex_expr` uses `normalize_eq` as well. `expr_contains` guards the `BitwiseXor` rules, which then hand deletion off to that helper. Leaving it structural let the guard fire on operands the helper could not delete, so the rule rebuilt its input and still reported `Transformed::yes`, spinning the simplifier to its cycle limit without changing the result. XOR is the only `expr_contains` caller shaped that way. The other eight return `*left`/`*right` directly, so a normalized match there is always a real change. `NormalizeEq for Expr` also now compares scalar/aggregate/window functions by full identity rather than `name()` alone. It previously treated two distinct functions that share a display name as equal, so routing the dedup through it collapsed `regex_udf(x) AND regex_udf(x)` (two different UDFs, same name) into one predicate. Registry-parsed SQL reuses one instance per name and is unaffected. This only stops merging genuinely distinct same-named functions, which programmatically built plans (delta-rs MERGE, the apache#14943 reporter) can produce. ## Are these changes tested? Each fix has a regression that fails without it. `test_simplify_swapped_operands_in_and_or_no_canonicalize` fails on `main` (the duplicate passes through unchanged) and passes with the fix; the `simplify_expr.slt` cases cover the join path end to end. `test_simplify_swapped_operands_in_xor_no_canonicalize` pins the cycle behavior: with `delete_xor_in_complex_expr` left structural it returns the input unchanged after `cycles=3`, and with the fix it folds to `0` in `cycles=2`. The existing `test_parameterized_scalar_udf` guards the function-identity fix. `datafusion-optimizer`, `datafusion-common`, `datafusion-expr`, and the full `sqllogictest` suite pass. `cargo fmt`/`clippy -D warnings` are clean. `sql_planner` shows no measurable change. ## Are there any user-facing changes? No public API changes. AND/OR and XOR chains containing commutative-equivalent duplicates now collapse even when the simplifier's canonicalizer is disabled (currently the `LogicalPlan::Join` path). Canonicalize-on paths produce the same output as before. --------- Signed-off-by: 1fanwang <1fannnw@gmail.com> Signed-off-by: Stefan Wang <1fannnw@gmail.com> 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. --> - Related apache#24854 . ## Rationale for this change Reenable test for slt join matrix test, after apache#21585 merged <!-- 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. --> ## 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. -->
…oercion (apache#24565) ## Which issue does this PR close? - Closes apache#24564. ## Rationale for this change Adds missing support for coercing REE arrays and extracting range windows from REE arrays. ## What changes are included in this PR? Added case statements for supporting REE arrays ## Are these changes tested? Yes a unit test is included. ## Are there any user-facing changes? No
…anup (apache#24874) ## Which issue does this PR close? Related to: - apache#23974 ## Rationale for this change Cleanup the code and remove state ## What changes are included in this PR? changed `FinalHashAggregateStream` to async generator and remove unneeded code due to that The first commit in this PR is `FinalHashAggregateStream` ## Are these changes tested? existing tests ## Are there any user-facing changes? nope
…ecks (apache#24800) ## Which issue does this PR close? - Closes #. ## Rationale for this change Physical planning asks "is this ordering already satisfied?" constantly — sort removal, `EnforceSorting`, `EnforceDistribution`, and the requirement checks for windows, joins and aggregates all call into `EquivalenceProperties::ordering_satisfy`, `ordering_satisfy_requirement` and `extract_common_sort_prefix`. Each of those calls deep-clones the entire `EquivalenceProperties` — every equivalence class, every equivalent ordering, and the normalized ordering cache — before doing anything else, even when it never modifies the copy. The clone exists for a real reason: as the check walks a multi-key ordering left to right, it registers each satisfied key as a constant so the next key is evaluated within that key's tie group. That mutates state, so it needs its own copy. But two cases pay for it and get nothing back: 1. **A single-key check never mutates anything.** There is no "next key" to set up for, so the whole clone is wasted. This is the most common shape of these calls. 2. **The last key of *any* check registers constants nobody reads.** After the final key is verified, the code still calls `add_satisfied_key_constants`, which rebuilds the ordering cache and re-runs ordering discovery — and then the object is dropped. ## What changes are included in this PR? Two changes in `EquivalenceProperties`, to `ordering_satisfy_requirement` and `common_sort_prefix_length` (the latter backs `ordering_satisfy`, `extract_common_sort_prefix` and `reorder`): - **Clone on first write instead of up front.** The loop borrows `self` and clones only when it actually needs to register a constant. Single-key checks never clone at all. - **Skip the registration after the last key.** Nothing reads it. Plus a new criterion benchmark, `equivalence_properties`, covering these entry points. This only changes *when* the copy is made — the results of these functions are unchanged. ## Metrics Apple M4 Pro, rustc 1.97.0, criterion. All changes significant at p = 0.00. Properties under test: 3 equivalent orderings (`[c0,c1,c2,c3]`, `[c4,c5]`, `[c6]`) and a varying number of equivalence classes. **At 8 equivalence classes:** | benchmark | before | after | change | |---|---:|---:|---| | `ordering_satisfy` — 1 key | 2.72 µs | 0.41 µs | **−84.9%** | | `ordering_satisfy` — 1 key, unsatisfied | 1.47 µs | 0.41 µs | **−72.5%** | | `ordering_satisfy_requirement` — 1 key | 2.70 µs | 0.36 µs | **−86.3%** | | `ordering_satisfy_requirement` — 4 keys | 7.15 µs | 6.07 µs | −13.8% | | `ordering_satisfy` — 4 keys | 6.99 µs | 6.20 µs | −11.6% | | `extract_common_sort_prefix` — 4 keys | 7.22 µs | 6.38 µs | −9.2% | **How it scales** (`ordering_satisfy`, 1 key): | equivalence classes | before | after | change | |---:|---:|---:|---| | 2 | 2.44 µs | 0.43 µs | −82.5% | | 8 | 2.72 µs | 0.41 µs | −84.9% | | 32 | 4.63 µs | 0.41 µs | **−90.8%** | Reading the tables: for an *N*-key check the work goes from `1 clone + N registrations` to `(N > 1 ? 1 : 0) clones + (N − 1) registrations`. - **1-key checks** drop both the clone and the registration. Note the "after" column is flat at ~0.41 µs regardless of how many equivalence classes exist — with the clone gone, the check no longer scales with the size of the equivalence group at all. The "before" column does, which is why the win grows from −82% to −91%. - **Multi-key checks** still clone once and save one of *N* registrations. Since a registration rebuilds the ordering cache and re-runs ordering discovery, that single saved call is worth 9–14% here, rising to −37.8% for `4_keys` at 32 classes. ### Reproducing The benchmark is included in this PR, so reverting just the one source file gives you the baseline: ```bash # baseline: this PR's parent version of the file, with the new benchmark kept git checkout HEAD^ -- datafusion/physical-expr/src/equivalence/properties/mod.rs cargo bench -p datafusion-physical-expr --bench equivalence_properties -- --save-baseline before # with the change git checkout HEAD -- datafusion/physical-expr/src/equivalence/properties/mod.rs cargo bench -p datafusion-physical-expr --bench equivalence_properties -- --baseline before ``` The second run prints criterion's own `change: [...] (p = ...)` line per benchmark. ## Are these changes tested? No new correctness tests: this does not change what any of these functions return, so existing coverage is the right check. Covered by the `equivalence` unit tests in `datafusion/physical-expr` and, for plan-shape regressions, by sqllogictest — these functions decide whether a `SortExec` can be removed, so a behavior change would surface as a diff in an `EXPLAIN` plan. Full workspace suite (`--features avro,json,backtrace,extended_tests,recursive_protection,parquet_encryption`): 10,981 passed, 0 failed, and all 505 sqllogictest files pass. `./dev/rust_lint.sh` is clean. ## Are there any user-facing changes? No. No public API or behavior changes — planning is just faster.
## Which issue does this PR close? - Closes apache#24871. ## Rationale for this change Three links in the docs point at pages on our own site that return 404, so a reader following them from the readings list or the GSoC project ideas page lands on an error. ## What changes are included in this PR? - `concepts-readings-events.md`: `blog/2026/03/20/multi-layer-pruning/` becomes `blog/2026/03/20/limit-pruning/`, and `blog/2026/02/02/case-expression/` becomes `blog/2026/02/02/datafusion_case/`. Those are the slugs the two posts were actually published under. - `gsoc/gsoc_project_ideas_2025.md`: `contributor-guide/gsoc_application_guidelines.html` becomes `contributor-guide/gsoc/gsoc_application_guidelines_2025.html`, matching the file the GSoC `index.rst` toctree includes. ## What is the testing strategy for this PR? No tests; this is three URL strings in markdown. Each old URL was requested and returns 404, each new one returns 200. ## Are there any user-facing changes? Docs only. Three links that were broken now resolve. Disclosure: this was written with AI assistance (Claude, via Claude Code). I verified every URL by request rather than inferring it, and the issue lists the three further dead links I deliberately did not touch because the right replacement is your call.
## Which issue does this PR close? N/A - trivial documentation fix. ## Rationale for this change `datafusion/sqllogictest/README.md` misspells "sqlite" as "sqllite" in the instructions for regenerating expected answers. The script it references is `regenerate_sqlite_files.sh`, so the surrounding prose should match. ## What changes are included in this PR? One-word spelling correction in `datafusion/sqllogictest/README.md`. ## Are these changes tested? No code changes; documentation only. ## Are there any user-facing changes? No.
This is a *very* minor update to the Cargo.lock file to resolve a warning when running `cargo audit` as in our CI suite. v0.10.0 was yanked from crates.io so this bumps to 0.10.2.
## Which issue does this PR close? - Closes apache#22220. ## Rationale for this change `array_position` accepts an optional one-based start position. Passing `-9223372036854775808` currently aborts evaluation with: ```text datafusion/functions-nested/src/position.rs:210:21: attempt to subtract with overflow ``` It now returns the normal execution error `start_from out of bounds: -9223372036854775808`. ## What changes are included in this PR? The one-based-to-zero-based conversion now uses checked subtraction in both optimized and generic execution paths. ## What is the testing strategy for this PR? SQL regressions exercise a scalar start position, a column start position with a scalar needle, and column start and needle values. <details> <summary>Raw results</summary> ```console $ git checkout upstream/main -- datafusion/functions-nested/src/position.rs $ cargo test -p datafusion-sqllogictest --test sqllogictests -- array_position thread 'tokio-rt-worker' panicked at datafusion/functions-nested/src/position.rs:210:21: attempt to subtract with overflow Error: Execution("1 failures") $ git checkout HEAD -- datafusion/functions-nested/src/position.rs $ cargo test -p datafusion-sqllogictest --test sqllogictests -- array_position Running with 12 test threads (available parallelism: 12) Progress: 1/1 files completed (100%) $ 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 passed=10997 ignored=8 ``` </details> ## Are there any user-facing changes? Yes. An invalid minimum `Int64` start position returns an execution error instead of panicking. --------- Signed-off-by: 1fanwang <1fannnw@gmail.com>
…mtest/datafusion-wasm-app (apache#24882) Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to 3.1.7. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fastify/fast-uri/releases">fast-uri's releases</a>.</em></p> <blockquote> <h2>v3.1.7</h2> <h2>⚠️ Security Warning</h2> <p>This is a security release that fixes the following high-severity security advisories:</p> <ul> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-qw65-cvwx-89v3">GHSA-qw65-cvwx-89v3</a> — authority injection via an unvalidated port in <code>serialize()</code></li> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-58mr-gqgx-xq4g">GHSA-58mr-gqgx-xq4g</a> — host confusion via unbalanced or misplaced IP-literal brackets</li> </ul> <p>Users of the v3.x release line should upgrade to v3.1.7.</p> <p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7">https://github.com/fastify/fast-uri/compare/v3.1.6...v3.1.7</a></p> <h2>v3.1.6</h2> <h2>⚠️ Security Warning</h2> <p>This release addresses the following high-severity security advisories:</p> <ul> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-5jgf-p345-68v8">GHSA-5jgf-p345-68v8</a> — host confusion via skipped IDN canonicalization on scheme-relative references</li> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-fph4-wmhf-6fwf">GHSA-fph4-wmhf-6fwf</a> — server-side request forgery via repeated hostname percent-decoding</li> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-f65p-4m7j-42xc">GHSA-f65p-4m7j-42xc</a> — server-side request forgery via malformed IPv6 normalization</li> <li><a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-jqff-g426-hqxp">GHSA-jqff-g426-hqxp</a> — host confusion via percent-encoded scheme normalization</li> </ul> <p>Users of the v3.x release line should upgrade to v3.1.6.</p> <p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6">https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.6</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fastify/fast-uri/commit/412e40abd4eb8beabfb952d80abf949a2baf27a3"><code>412e40a</code></a> Bumped v3.1.7</li> <li><a href="https://github.com/fastify/fast-uri/commit/9f4c943e4d2133e8d78e0941203879216255bb01"><code>9f4c943</code></a> fix: backport port and IP-literal validation to v3.x (<a href="https://redirect.github.com/fastify/fast-uri/issues/216">#216</a>)</li> <li><a href="https://github.com/fastify/fast-uri/commit/1eb3ce436fe050807caba79f886ab894f485a588"><code>1eb3ce4</code></a> fix: treat unterminated bracket hosts as reg-names again (<a href="https://redirect.github.com/fastify/fast-uri/issues/214">#214</a>)</li> <li><a href="https://github.com/fastify/fast-uri/commit/6f970b2951fd896aa0f3a7ff28eeb6640c137d33"><code>6f970b2</code></a> Bumped v3.1.6</li> <li><a href="https://github.com/fastify/fast-uri/commit/d941579a84273ec7e96bde596b1f7a8be447df2a"><code>d941579</code></a> fix: never run IDN canonicalization on bracketed IP literals</li> <li><a href="https://github.com/fastify/fast-uri/commit/c0f0279cf370cb89ee56b04bbcde2a7afbe81aba"><code>c0f0279</code></a> test: adapt decoded-scheme handler assertion to 3.x (no mailto scheme)</li> <li><a href="https://github.com/fastify/fast-uri/commit/37f3417c82994279656854f83ce938acd81c3862"><code>37f3417</code></a> Merge commit from fork</li> <li><a href="https://github.com/fastify/fast-uri/commit/607bfbe953f28a14c2e06ae64aff38c81ca2937f"><code>607bfbe</code></a> Merge commit from fork</li> <li><a href="https://github.com/fastify/fast-uri/commit/ae92a4c5d8c4b6c9e447f048d5fcbde7eebd5514"><code>ae92a4c</code></a> Merge commit from fork</li> <li><a href="https://github.com/fastify/fast-uri/commit/444ecdad447db2cc23c4d422acc6f0daa6fa8eef"><code>444ecda</code></a> Merge commit from fork</li> <li>Additional commits viewable in <a href="https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.7">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/apache/datafusion/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Which issue does this PR close? - No issue has been filed. ## Rationale for this change Anonymous nested projections that reuse the same output name can return wrong results. For example, each `i + 1 AS i` layer must be evaluated independently, but the projection optimizer could drop one layer when two consecutive projection expression vectors were structurally equal. Structural equality does not imply that a projection is safe to elide: repeated computations such as `i + 1 AS i` have the same expression shape but must still be evaluated twice. ## What changes are included in this PR? - Remove the structural-equality fast path that directly elided one of two consecutive projections. - Keep the existing iterative whole-chain merge, so deep projection chains still collapse within one optimizer rule invocation. - Continue using the normal projection rewrite path, which composes repeated expressions and preserves aliases and field metadata. - Add focused regressions for repeated non-idempotent projections, one-pass collapse of a 12-level chain, and metadata-bearing aliases. - Add an execution-level SQLLogicTest with six anonymous `i + 1 AS i` layers under both `max_passes = 1` and the default optimizer configuration. ## What is the testing strategy for this PR? The focused unit tests verify that: - two structurally equal `i + 1 AS i` projections retain both additions; - a 12-level chain preserves all 12 additions and collapses to one `Projection` with `max_passes = 1`; - a metadata-bearing `Alias(Column)` is merged without losing field metadata. The SQLLogicTest executes a six-level anonymous projection chain against a temporary table with both one optimizer pass and the default pass count. Verified with: ```text cargo fmt --all --check cargo test -p datafusion-optimizer optimize_projections # 58 passed; 0 failed cargo test -p datafusion-optimizer --test optimizer_integration # 26 passed; 0 failed cargo test --profile ci -p datafusion-sqllogictest --test sqllogictests -- projection.slt # 1/1 files completed; 0 failures cargo clippy -p datafusion-optimizer --all-targets --all-features -- -D warnings # passed git diff --check # passed ``` ## Are there any user-facing changes? Yes. Deep anonymous nested projections that reuse an output name now preserve every projection expression and return the correct result. There are no public API or configuration changes. --------- Signed-off-by: discord9 <discord9@163.com> Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>
## Which issue does this PR close? - Closes apache#17910. ## Rationale for this change For multiple grouping sets, Substrait orders aggregate output as grouping expressions, measures, then grouping-set ID. DataFusion puts its internal `__grouping_id` before measures. The consumer applied `RelCommon.emit` to DataFusion's order, so a mapping such as `[0, 1, 2]` returned `__grouping_id` where the plan requested its first measure. See the [Substrait AggregateRel output mapping specification](https://substrait.io/relations/logical_relations/#aggregate-operation). ## What changes are included in this PR? - Reorder consumer output to Substrait's direct order before applying emit mappings. - Emit a producer mapping back to DataFusion's aggregate order. - Deduplicate producer grouping expressions used by grouping references. - Test both issue reproducer and two-measure roundtrip. ## Are these changes tested? - `cargo test -p datafusion-substrait --features protoc` - `cargo clippy --all-targets --all-features -- -D warnings` ## Are there any user-facing changes? Substrait plans with multiple grouping sets now return emitted columns in specified order. No public API change.
…4732) ## Which issue does this PR close? Related to apache#6899 — adds benchmark coverage for the WindowTopN operators. ## Rationale for this change The existing `h2o --subgroup window` Top-N sweep (q13–q29) registers `x` with no declared ordering, so `output_ordering()` is `None`. Any plan that depends on the input being sorted is unreachable from those queries, however the data happens to be laid out on disk. This adds a `window_sorted` subgroup that publishes the same sweep over a `WITH ORDER` table, so ordering-dependent plans can be measured. ## What changes are included in this PR? A `window_sorted` h2o subgroup: 16 queries covering ROW_NUMBER / RANK / DENSE_RANK × 100 / 1K / 10K / 100K partitions, plus heavy-ties variants. - Two `load` directives: the existing `load_window_${SIZE}_${FORMAT}.sql` creates `x`, then a new script writes a sorted copy via `COPY (... ORDER BY pk, ob DESC)` and registers it `WITH ORDER (pk ASC, ob DESC)`. Reusing the existing loader keeps both the `--size` and `--format` axes working with no duplication. `load` is untimed, so the sort stays out of the measurement. - `WITH ORDER` can only name columns, so the partition key (`id3 % N`) and the tie expression are materialized as `pk` and `ob`. - Asserts guard the three ways this could silently measure nothing: both config flags took effect, the sorted copy holds every source row, and `ob` has the cardinality the query name claims. - `expect_plan PartitionedTopKExec` is deliberately the shared substring, so the same file validates the heap operator and any streaming variant that replaces it. No Rust changes; benchmark files only. ## Are these changes tested? `benchmark_runner h2o --subgroup window_sorted` runs all 16 queries green. Row counts are exact: 2 per partition for the distinct-ORDER-BY shapes, and 1,010,812 (RANK) / 2,020,722 (DENSE_RANK) for the tie shapes — the top-1 and top-2 of 10 distinct values over 10M rows. ## Are there any user-facing changes? No.
…ssions (apache#24720) ## Which issue does this PR close? - Closes apache#24678. ## Rationale for this change A column alias denotes one value per row, and `WHERE p` may only return rows for which `p` held for that row. Today the leaf-expression extraction passes break both: ```sql SELECT s, s['a'] AS field FROM (SELECT named_struct('a', random()) AS s FROM generate_series(1, 3)); ``` | `s['a']` | `field` | |---|---| | 0.5159112071865757 | 0.4514238291986653 | | 0.0029104680074608646 | 0.28979983332288195 | | 0.48542729227457915 | 0.04499392663566881 | `field` is defined as `s['a']` but differs from it on every row, because the plan is ``` Projection: named_struct(Utf8("a"), random()) AS s, random() AS field ``` The `Filter` form is worse — it returns rows that fail their own predicate: ```sql SELECT bool_and(s['a'] > 0.5) FROM (SELECT s FROM (SELECT named_struct('a', random()) AS s FROM generate_series(1, 1000)) WHERE s['a'] > 0.5); -- false; the predicate tested a different draw than the one in the returned `s` ``` Setting `datafusion.optimizer.enable_leaf_expression_pushdown = false` returns the correct answer in both cases, so the rewrite alone changes the meaning of the query. **Root cause.** `build_extraction_projection_impl` merges an extraction into the input projection by resolving column references through `build_projection_replace_map`, i.e. by inlining each referenced column's *defining* expression. Inlining a volatile definition produces a second, independent evaluation. There was no volatility check in the file. This is the same invariant `FileScanConfig::try_swapping_with_projection` already enforces for the physical projection-pushdown path via `would_duplicate_costly_exprs` (apache#23220) — the logical extraction path was missing it. ## What changes are included in this PR? - `volatile_output_columns()` — a projection's output columns whose definition is volatile. - `would_duplicate_volatile()` — true when an extraction references one of them. - The guard is applied at the three places that can merge into an input projection: `extract_from_plan` (pass 1: Filter/Sort/Limit/Aggregate/Join), `split_and_push_projection` (pass 2), and `try_push_into_inputs` (multi-input/Union routing). Each already had a "leave the plan alone" return path. The guard is targeted rather than blanket: for `ORDER BY s['a']` the extraction still happens, stacked above the volatile projection instead of merged into it, so the optimization is kept and the result is correct. ### Relationship to apache#23691 @fornwall wondered on the issue whether apache#23691 already covers this. I checked out that branch and ran both shapes against it: `SELECT s, s['a']` is incidentally fixed there, but `WHERE s['a'] > 0.5` still duplicates `random()` and still returns rows failing the predicate. apache#23691 guards `KeepInPlace` *compute cost* in `split_and_push_projection` only; volatility is a separate concern (one duplication is already wrong, regardless of cost or placement) and pass 1 is a different code path. The two changes look independent to me and I believe they compose, but I'd appreciate a second opinion on that from whoever reviews apache#23691. ## Are these changes tested? Yes. - `datafusion/sqllogictest/test_files/projection_pushdown.slt` — a new section beside the existing apache#23220 volatile section: two `EXPLAIN`s pinning `random()` to a single occurrence, and two deterministic `bool_and(...)` correctness queries. All four fail on `main` and pass here. - Two rule-level snapshot tests in `extract_leaf_expressions.rs` covering the pass-2 projection merge and the pass-1 `Filter` extraction, using a new test-only `PlacementTestUDF::with_volatility()`. `cargo test -p datafusion-optimizer` (796), `cargo test -p datafusion --lib --tests` (2049) and the full 504-file sqllogictest suite all pass; `cargo fmt --all` and `cargo clippy --all-targets --all-features -- -D warnings` are clean. ## Are there any user-facing changes? Queries that were silently returning wrong results now return correct ones. No API change. In the affected shapes the extraction is skipped, which can cost a small amount of column pruning — only when the referenced column is defined by a volatile expression. --- <sub>Per the ASF generative-tooling policy and DataFusion's AI-assisted contribution guidance: this patch was prepared with AI assistance. The core idea is the one described above — the merge path inlines a referenced column's defining expression, which duplicates a volatile definition — and the open question about how this composes with apache#23691 is flagged deliberately rather than glossed over.</sub>
…24630) (apache#24633) ## 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#24630. ## Rationale for this change Improve the `DataFrame::from_columns` API and give users more flexibility when constructing a `DataFrame` from columns. <!-- 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. --> ## What changes are included in this PR? - Generalize `DataFrame::from_columns` to accept `IntoIterator` of columns. - This allows users to pass both `arrays` and `Vecs` of columns. - Update tests to cover both input forms. <!-- There is no need to duplicate the description in the issue here, but it is sometimes worth providing a summary of the individual changes in this PR. --> ## Are these changes tested? Yes. Tests cover both `array` and `Vec` inputs and verify the resulting schema, data types, row count, and values. <!-- We typically require tests for all PRs in order to: 1. Prevent the code from being accidentally broken by subsequent changes 2. Serve as another way to document the expected behavior of the code If tests are not included in your PR, please explain why (for example, are they covered by existing tests)? --> ## Are there any user-facing changes? Yes. This is a breaking API change. `DataFrame::from_columns` now accepts an `IntoIterator` of columns instead of specifically accepting a `Vec`. Existing `Vec` usage continues to work, while users can also pass `arrays` and other compatible iterators. Users relying on the exact non-generic function signature may need to update their code to account for the new generic API. <!-- 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 address? - Part of apache#21231. ## Rationale for this change `CaseBody::project` discovers input columns by downcasting expression-tree nodes to DataFusion's concrete `Column` or `LambdaVariable`. A third-party column-like `PhysicalExpr` can evaluate an input column without exposing either node. The projection then omits that dependency and CASE evaluates the expression against a batch with the wrong schema. ## What changes are included in this PR? CASE projection now falls back to the original input batch when it encounters an unknown leaf expression. Built-in `ScalarFunctionExpr` leaves remain eligible for projection because they receive the row count and do not read input columns through the batch. The projection decision is centralized in `ProjectedCaseBody::projection_for`, with the invariant documented next to the representation. The regression coverage exercises searched CASE, base-expression CASE, and the single-WHEN expression path with a custom column-like expression. It also checks that a nullary `random()` scalar function keeps the projection fast path. This is a conservative correctness fix for the custom-leaf case. The broader dependency-reporting design discussed in apache#21231 remains separate work. ## Are these changes tested? - `cargo fmt --all -- --check` - `cargo clippy -p datafusion-physical-expr --all-targets --all-features -- -D warnings` - `cargo test -p datafusion-physical-expr expressions::case::tests` - `cargo test -p datafusion-physical-expr` ## Are there any user-facing changes? Custom physical expressions can now be evaluated correctly inside searched and base-expression CASE expressions. There is no public API change. --------- Signed-off-by: Hasnaat Hussain <hasnaat.hussain.2@gmail.com>
## Which issue does this PR close? N/A ## Rationale for this change after emit all, the memory is still being held in count distinct causing OOM issues ## What changes are included in this PR? release memory in emit all and added tests ## What is the testing strategy for this PR? integration test ## Are there any user-facing changes? no ---- Founded while running: - apache#24881
## Which issue does this PR close? - Closes apache#13027. ## Rationale for this change I noticed that this issue had an earlier PR from almost two years ago. That implementation was closed because it used broad identifier cleanup, and maintainers were concerned it could introduce subtle bugs. Since then, DataFusion has added much of the machinery needed for the approaches recommended in that review. This solution uses that newer machinery and combines both approaches. It removes the qualifier when the derived table does not need an alias, and rewrites the reference to the derived alias when the dialect requires one. ## What changes are included in this PR? This PR detects when a projection enters a new derived-table scope and prevents its outer expressions from referring to an inner table alias that is no longer visible. For dialects that do not require a derived-table alias, the invalid inner qualifier is removed. For dialects such as MySQL that require an alias, the outer reference is rewritten to the generated derived-table alias. Explicitly named subquery scopes remain unchanged. ## What is the testing strategy for this PR? The SQL unparser round-trip tests cover the issue's original query with both the generic and MySQL dialects. They also cover filtered and distinct derived inputs, and update existing limit and nested-projection cases to assert valid outer references. The required formatting, Clippy, and extended workspace test suite all pass, including all 505 SQL logic test files. ## Are there any user-facing changes? Yes. SQL produced by the unparser no longer contains qualifiers that refer to tables outside their visible scope. Dialects that require derived-table aliases now qualify the outer reference with the generated alias. There are no public API changes. --------- Co-authored-by: blinding-pixels <281499151+blinding-pixels@users.noreply.github.com>
…ons (apache#24918) ## Which issue does this PR close? Follow-up to apache#24888, which broke the `cargo test hash collisions` CI job on main. ## Rationale for this change The memory limit test added in apache#24888 fails when built with `force_hash_collisions`. Every key hashes to the same value there, so the hash repartition sends all 64 groups to one final stage. That single table needs 5.3 MB against the test's 4 MB pool, and it has nothing reserved yet, so there is nothing to spill. It fails no matter how well the accumulator releases memory, which is what the test is actually about. I tried a few ways to keep it running under the feature first: - **Bigger limit for the collision build.** Below 5.3 MB it dies on that one state batch; at 6 MB and up nothing spills, so the unfixed accumulator passes too and the test asserts nothing. Nothing in between. - **Single partition, no repartition at all.** Same wall. With 64 groups the whole distinct state lives in 64 rows, so total state and one batch are the same 5.3 MB. Also 82s instead of 0.18s. - **More groups, to spread the state over more batches.** With every key in one hash bucket, interning goes quadratic: 4096 groups did not finish in 400s. - **More rows (800k), to make total state exceed one batch.** Fails even with the fix. They all hit the same thing: under forced collisions the total state and a single batch are the same size, and the pool would have to sit above one and below the other. ## What changes are included in this PR? The test and its helpers move into a module gated on `not(feature = "force_hash_collisions")`. ## What is the testing strategy for this PR? `cargo test -p datafusion --features force_hash_collisions --test core_integration count_distinct_releases` runs 0 tests. Without the feature it still runs and passes. ## Are there any user-facing changes? No. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
) ## Which issue does this PR close? - Part of apache#24459. ## Rationale for this change `NestedLoopJoinExec` included time spent polling its build-side and probe-side inputs in `build_time` and `join_time`. Because child operators report their own compute time, this double-counted child work in plan-level `elapsed_compute` metrics. ## What changes are included in this PR? - Time build-side bookkeeping and materialization only after each left input batch is ready. - Start probe-side timing only after the right input returns a ready result. - Apply the same accounting to the memory-limited spill and replay paths. - Add regressions for standard and spill execution that verify child polling is excluded while join-owned work remains timed. ## Are these changes tested? Yes. - `cargo test -p datafusion-physical-plan joins::nested_loop_join::tests --all-features` - `cargo test -p datafusion-physical-plan --all-features` - `cargo clippy --all-targets --all-features -- -D warnings` - `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` The four new timing regressions were also ablated by restoring the previous outer timer scopes; each failed because the injected child delay was included. ## Are there any user-facing changes? `NestedLoopJoinExec` metrics now exclude child input polling. Query results and public APIs are unchanged.
…apache#24763) ## Which issue does this PR close? No separate issue. I found this while reading `simplify_predicates`. ## Rationale for this change `WHERE s = 'a' AND 'a' = s` returns no rows, where one row is expected: ```sql > CREATE TABLE t(s VARCHAR) AS VALUES ('a'), ('b'); > SELECT * FROM t WHERE s = 'a' AND 'a' = s; 0 row(s) fetched. ``` Either half on its own returns `a`, and the same query against an INT column returns the row. On `main` (4d3e79e), `EXPLAIN VERBOSE` shows the filter turning into a constant between two rules: ``` logical_plan after simplify_expressions Filter: t.s = Utf8View("a") AND Utf8View("a") = t.s logical_plan after push_down_filter Filter: Boolean(false) logical_plan after eliminate_filter EmptyRelation: rows=0 ``` `PushDownFilter` splits the conjuncts and calls `simplify_predicates`. It accepts both `<col> <op> <literal>` and `<literal> <op> <col>`, but `simplify_column_predicates` compares whole `Expr`s. `t.s = Utf8View("a")` and `Utf8View("a") = t.s` aren't structurally equal, so the two equalities read as a contradiction and the conjunction becomes `false`. The INT version survives because the `Canonicalizer` reorders it first. It can't do that here: it runs once at `expr_simplifier.rs:203`, ahead of the const-evaluation loop, so it sees `CAST(Utf8("a") AS Utf8View)` rather than a `Literal` and its `(Literal, Column)` arm doesn't match. The cast folds to a literal afterwards. Canonicalization is skipped entirely for `Join` (`simplify_exprs.rs:130`), so `simplify_predicates` can't assume canonical input either way. The same gap costs a strict bound. Given `a >= 5` and `5 < a`, `find_most_restrictive_predicate` breaks the tie on `op == Gt`, doesn't count `Lt` with the literal on the left as strict, keeps `a >= 5`, and lets `a = 5` through. ## What changes are included in this PR? `simplify_predicates` now normalizes the literal to the right with `op.swap()`, at the point where it already distinguishes the two orientations. `simplify_column_predicates` can then match on the operator alone. No signature changes. ## Are these changes tested? Two unit tests in `simplify_predicates.rs` and four cases in `simplify_predicates.slt`. All six fail before the fix. With only `simplify_predicates.rs` reverted the SLT reports `EmptyRelation: rows=0` where `Filter: test_data.str_col = Utf8View("apple")` is expected, and the `apple` row goes missing. `datafusion-optimizer` is green (765 lib, 26 integration, 5 doc) and clippy with `-D warnings` is clean. The full `sqllogictests` run passes except `window_limits.slt`, which fails identically on an unmodified `main`. `SELECT * FROM t WHERE s = 'a' AND 'b' = s` stays `EmptyRelation: rows=0` before and after, and that's pinned in the SLT. ## Are there any user-facing changes? Affected queries return the right rows instead of none. Predicates reaching `simplify_predicates` with the literal on the left now come back with it on the right, so a plan can show `a > 5` where it used to show `5 < a`. Nothing in the test suite depended on that, but the function is public. Equalities whose literals are equal in value but differ in `ScalarValue` representation still collapse to `false`. On `main`, `[a = 5i32, a = 5i64]` in the same orientation already returns `Boolean(false)`, so that predates this change and isn't orientation related. This PR was written with AI assistance.
…wBytesViewMap Both maps tracked their hash table footprint in a `map_size` field that was only ever incremented by `HashTableAllocExt::insert_accounted`, which charges `capacity * size_of::<Entry>()` on growth and nothing else. That undercounts in two ways. `ArrowBytesViewMap::new` seeded `map_size` with `capacity() * size_of::<Entry<V>>()`, which ignores the control bytes and the trailing group that hashbrown allocates alongside the entry array, so the reported size was roughly half the real allocation. `ArrowBytesMap::new` seeded `map_size` with 0 despite pre-allocating a table for 128 entries. Since `insert_accounted` only charges when the table grows, any map holding fewer entries than the pre-allocated capacity reported its hash table as free forever. Drop the field and ask hashbrown for the exact figure with `HashTable::allocation_size`, which covers entries, control bytes and the trailing group. It is a constant time layout calculation, so `size()` stays cheap, and it cannot drift out of sync with the table the way an incrementally maintained counter can.
`ArrowBytesMap` and `ArrowBytesViewMap` always pre-allocated their hash table, and `ArrowBytesMap` also pre-allocated an 8 KiB value buffer. That is the right trade for the single map that backs a `GROUP BY` on one string column, which goes on to hold every group value in the query. It is the wrong trade for `BytesDistinctCountAccumulator` and `BytesViewDistinctCountAccumulator`, because `GroupsAccumulatorAdapter` creates one accumulator per group: a grouped `COUNT(DISTINCT)` over a high cardinality key holds hundreds of thousands of them at once, and most see only a handful of values, so the pre-allocation dwarfs the data. Split the constructors. `new` no longer allocates anything, and `with_capacity` keeps the previous behavior for the callers that want it. The capacity is stored so `take` re-creates the map the way it was built. The `GroupValuesBytes` and `GroupValuesBytesView` call sites move to `with_capacity`; the two distinct-count accumulators stay on `new`. The `arrow_bytes_map` benchmark also moves to `with_capacity`: its `long_low_cardinality` case is defined by the distinct values fitting inside the pre-allocated buffer.
Keep the comment about what `HashTable::allocation_size` covers next to the value it describes, and say what the test helper's lower bound is derived from.
`GroupValuesBytes::clear_shrink` and `GroupValuesBytesView::clear_shrink` reset their map with `take()`, which restores the capacity the map was configured with so the emptied map stays warm. That is what the emit path wants, but `clear_shrink` exists to hand memory back before spilling and before the spilled batch is sorted, so it left roughly 16 KiB (string and binary) and 34 KiB (view) reserved instead of releasing it. Add `clear_and_release` to `ArrowBytesMap` and `ArrowBytesViewMap`, which empties the map and drops its allocations while remembering the configured capacities so a later `take()` still warms the map up, and call it from the two `clear_shrink` implementations. The pre-allocation stays at construction, where the hot single column string `GROUP BY` path earns it.
A grouped `COUNT(DISTINCT <string>)` gets one accumulator per group, and each of those owns a hash set of the distinct values it has seen. Those sets were created pre-allocated, so the query's memory use tracked the number of groups rather than the amount of data. Add two `memory_limit` tests that turn that into a binary observable, one for `Utf8` and one for `Utf8View`, over a new scenario of 4,000 groups holding 2 distinct values each. Measured against this branch's base commit with spilling disabled and `target_partitions` pinned to 1: | value column | budget needed before | budget needed after | | ------------ | -------------------- | ------------------- | | `Utf8` | ~35.5 MB | ~1.9 MB | | `Utf8View` | ~123 MB | ~2.7 MB | The tests run at 8 MB and 16 MB respectively, so each sits at least 4x above what the branch needs and at least 4x below what the base needs. Both fail on the base commit with `Resources exhausted` and pass here.
The two grouped `COUNT(DISTINCT <string>)` memory limit tests only reach the per group accumulators while `single_distinct_aggregation_to_group_by` declines to rewrite the query. They leant on `count(*)` for that, which the rule rejects only because `count` is missing from the `sum`/`min`/`max` allow list. apache#24859 proposes adding `count` to that list, which would rewrite the query, remove the accumulators, and leave both tests passing at any memory limit while still looking like they test something. Aggregate `avg(payload)` over a new `Int64` column instead. `avg` cannot be added to that list: the rule re-aggregates its own partial results over the deduplicated inner group by, and averaging per group averages of different sizes gives the wrong answer. That is why ClickBench Q9 keeps its distinct aggregate under apache#24859. Verified from the physical plan with apache#24859 cherry-picked on top of this branch: the `avg` query still plans as `aggr=[count(DISTINCT t.value), avg(t.payload)]`, while the `count(*)` query becomes `aggr=[count(alias1), sum(alias2)]` over an inner `GROUP BY group_key, value`, and drops from needing ~1.9 MB to ~0.9 MB. Re-swept both thresholds against the base commit. `Utf8` needs ~35.5 MB before and ~1.9 MB after; `Utf8View` needs ~123 MB before and ~2.5 MB after, so the 8 MB and 16 MB limits keep at least 4x margin on each side and are unchanged.
`ArrowBytesMap::new` starts its value buffer empty and `ArrowBytesMap::with_capacity` starts it at `INITIAL_BUFFER_CAPACITY`. `Vec` then doubles from wherever its first allocation landed, so the two sit on different ladders and can hold the same values at capacities differing by up to 2x, in either direction depending on the value lengths. Measured on 500,000 distinct 28 byte values, the lazily grown map reported 52,494,344 bytes against 45,154,312 for a pre-allocated one, 16% more for identical contents. That matters because the ungrouped `COUNT(DISTINCT <string>)` accumulator is the caller that had a use for the warm up: it builds one map and grows it to hold every distinct value in the input. Rounding every buffer growth up to a power of two puts both constructors on one ladder, so a lazily allocated map is never larger than a pre-allocated one holding the same values. Growth stays geometric, so appending is still amortized constant time. `ArrowBytesViewMap` has no such buffer and is unaffected. Two new tests cover the ungrouped path, which had none: `ungrouped_utf8_accumulator_is_never_worse_than_a_pre_allocated_set` and its `Utf8View` counterpart drive an accumulator to 0 through 500,000 distinct values and assert it is strictly cheaper than a pre-allocated set at per group cardinalities and exactly equal at ungrouped ones. The `Utf8` one fails without this change, at 1,000 distinct values, with the lazy set reporting 110,408 bytes against 96,072. Two map level tests pin the ladder itself.
b9e6252 to
f31fc51
Compare
|
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 |
|
Superseded by the upstream pull request: apache#24857 This copy existed only to run the change through review here before sending it upstream. That is done, so closing this one. The branch is unchanged and still backs the upstream pull request. |
A grouped
COUNT(DISTINCT <string>)over 4,000 groups holding 2 short strings each needs a 36 MB memory budget. It needs 2.0 MB after this change.Every group gets its own hash table, and each table is allocated at warm-up size before the group holds anything, so the memory the query needs tracks the number of groups rather than the amount of data. The query also reports less memory than it holds, so a memory limit does not stop it at the right point.
Reproduction
This needs only
datafusion-cli. There is no patch, no custom allocator and no data file.sis aUtf8Viewcolumn, so this exercisesArrowBytesViewMap. The 8,000 rows arrive in one batch, so the aggregate builds all 4,000 accumulators before it can emit or spill.Current
mainat20d1c56761fails:This branch returns the rows:
Those 4,000 accumulators hold 8,000 short strings, which is about 100 KB of data. The base asks the pool for 111.1 MB to hold it. This branch runs the same query inside
-m 3M. Both builds return the same rows, and the base does so at-m 200M. Each run takes well under a second, and the outcome repeats exactly over three runs on each side.How much it improves
The minimum memory limit at which that query completes, bisected on each side:
Utf8Utf8Viewclickbench_extendedatDATAFUSION_RUNTIME_MEMORY_LIMIT: 4G, pool peak over six runs:Q2 is the only query in any benchmark suite that puts a grouped
COUNT(DISTINCT)on a non-integer column.Q0 costs more, and it is the one disclosed cost of this PR. Those extra bytes are memory Q0 always held and the pool could not see, not new allocation; appendix A has the three-build decomposition that separates the two. Latency does not move anywhere, which is what an allocation-sizing change should do.
Which issue does this PR close?
No existing issue. I found this when I investigated a production out of memory. I can file an issue if you want it in the changelog.
Rationale for this change
Pre-allocating is right for the one long-lived map behind a
GROUP BYon a string column. It is wrong for the distinct-count accumulators, becauseGroupsAccumulatorAdaptercreates one accumulator per group and most groups hold a handful of values. There the warm-up dwarfs the data.Both maps also under-report the table they hold.
ArrowBytesViewMapleft the control bytes out.ArrowBytesMapcharged the table only when it grew, so a map that stayed inside its pre-allocation reported its table as free forever. A memory limit acted on a number that was too small.clear_shrinkis the third part. The aggregate stream calls it to hand memory back before it spills and before a downstream sort. It restored the warm-up capacity instead of releasing it, so nothing came back.What changes are included in this PR?
newon both maps allocates nothing. A newwith_capacitykeeps the previous pre-allocating behavior.GroupValuesBytesandGroupValuesBytesViewusewith_capacity, and the two distinct-count accumulators usenew. A map remembers how it was built, sotakewarms it back up the way it started.size()reportsHashTable::allocation_size(), the real hashbrown allocation including the control bytes, in place of the old estimate.clear_and_releasedrops every allocation the map holds, andclear_shrinkcalls it.benches/arrow_bytes_map.rsmoves towith_capacityso it keeps measuring the pre-allocating constructor.What is the testing strategy for this PR?
Two tests in
datafusion/core/tests/memory_limit/mod.rs,group_by_count_distinct_utf8andgroup_by_count_distinct_utf8_view, turn the headline claim into a pass or a fail rather than a number. They run the reproduction query over 4,000 groups with spilling disabled andtarget_partitionspinned to 1, so completing means the query fits the budget rather than spills out of it. The limits are 8 MB and 16 MB, at least 4x clear of both cliffs in the table above. Both tests fail on the merge base and pass here, over five consecutive runs. Theavg(payload)in the query is load bearing; appendix C says why.Unit tests cover what the memory-limit tests cannot see: that
newallocates nothing, thatwith_capacityreports a table size bracketed by an independently derived lower bound, thattakepreserves the configured capacity, thatclear_shrinkdrops the reported size to near zero, and that a lazily grown buffer never exceeds a pre-allocated one holding the same values.Run locally on the rebased head, all passing:
datafusion-physical-expr-common(87 lib, 8 doc),datafusion-functions-aggregate-common(49),datafusion-functions-aggregate -- count_distinct(2),datafusion-physical-plan -- group_values(96) and thememory_limitmodule (39, which includes thecount_distinct_spilltest that arrived onmainin apache#24888 and apache#24918).cargo fmt --checkandcargo clippy --all-targets -D warningsare clean on the changed crates. CI has not yet run this branch against the new base.No query results change.
Are there any user-facing changes?
Yes, in
datafusion-physical-expr-common.ArrowBytesMap::newandArrowBytesViewMap::newno longer pre-allocate, and callers that want the previous behavior should use the newwith_capacity. Both types also gainclear_and_release. This changes an existing public constructor rather than adding one, so tell me if you would like theapi changelabel.For users, a grouped
COUNT(DISTINCT)on string and binary columns uses much less memory and reports its usage to theMemoryPoolaccurately. A query that previously hit a memory limit may now succeed.Appendix A: Query 0 costs 6.3% more
Q0 is
COUNT(DISTINCT)over three high-cardinality strings with noGROUP BY. It is a handful of maps that each grow to millions of entries, which is the opposite population from the one this PR targets. The pre-allocation was never the dominant cost there, so removing it buys nothing.Over six runs the base spans 796.8 to 834.8 MiB and this branch spans 846.5 to 885.5 MiB. The ranges do not overlap, so the effect is real and not run-to-run noise.
Three local builds on a deterministic subset separate the two changes. The middle build differs from the base only in the accounting, because restoring the warm-up makes the constructors byte-identical to base:
That decomposes the increase exactly. +2,626,576 is the accounting correction:
allocation_size()charges the real hashbrown allocation, which is4 * buckets + 5,384more than the old formula, being the control bytes plus the 7/8 load-factor slack. -29,568 is the lazy constructor, which makes Q0 slightly better.Reverting the accounting would restore an under-report of about 19% on this path. That under-report is the bug this PR exists to fix, and the memory-limit result above depends on fixing it.
Appendix B: what one accumulator costs
One per-group accumulator holding a single 24-byte value:
BytesDistinctCountAccumulatorBytesViewDistinctCountAccumulatorThe middle column is the reporting gap. The
Utf8map really held 14,648 bytes and reported 8,240, because the whole hash table was invisible to the old accounting.These are measured directly rather than asserted in a test, since the exact numbers follow the hashbrown layout.
Appendix C: notes on the tests and the benchmarks
The memory-limit query uses
avg(payload), notcount(*). A non-distinctcountletsSingleDistinctToGroupByrewrite the distinct aggregate into a plain two-stageGROUP BY. The per-group accumulators would then never exist, and the tests would pass by construction on the base commit too. That rule accepts a non-distinctsum,minormaxbecause each re-aggregates its own partial results correctly over the deduplicated inner group by.avgdoes not, so the rule can never admit it under any extension, including the one apache#24859 proposes.The benchmark figures were measured against the previous merge base
da89c7c85b. They have not been re-run against the current base20d1c56761. The commits after84f07daon this branch touch onlydatafusion/core/tests/memory_limit/mod.rs, so nothing on this branch since then can move a benchmark, but the base itself has moved.Pool peak is the instrument here, not peak RSS. Pool peak reproduces to under 1% on a 98 MiB query and exactly on the 3.4 and 11.7 MiB ones. Peak RSS on this harness has a 4.1% standard deviation over 11 readings of identical code plus a 2.3% order bias, and shows no effect from this change once that null is accounted for.
Follow-ups, not in this PR
insert_accountedcall sites:group_values/row.rs:171,multi_group_by/mod.rs:434,554,multi_group_by/dictionary.rs:197,584andarray_agg.rs:989. Each is one map per query, so the absolute error is bounded, and the fix is the same one-line swap.count_distinct_groupsbenchmarks indatafusion/functions-aggregate/benches/count_distinct.rscoverInt64,Int32andUInt32only, so this path has no criterion coverage.