)]}'
{
  "log": [
    {
      "commit": "5ba06ac94ef5aea6796200e429fe551216c9c68d",
      "tree": "8a8a81088d21c125140af5b22e189c55b10ec799",
      "parents": [
        "190b1049a6379290ca5c560a82227a0eed3e726b"
      ],
      "author": {
        "name": "RIchard Baah",
        "email": "137434454+Rich-T-kid@users.noreply.github.com",
        "time": "Wed Apr 08 07:32:38 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 11:32:38 2026 +0000"
      },
      "message": "writing table to parquet followed by read and schema check (#21444)\n\n## Which issue does this PR close?\nThis attempts to bridge the missing test coverage mentioned by @alamb on\nthis issue https://github.com/apache/datafusion/issues/8791\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nThe changes are test\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nno\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "190b1049a6379290ca5c560a82227a0eed3e726b",
      "tree": "4f27c160c8c49c26eb1bb3fe097996fee0d84451",
      "parents": [
        "cdddd7663beddec87d850caf0d497a5d6fd857f8"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Apr 08 07:31:45 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 11:31:45 2026 +0000"
      },
      "message": "perf: Optimize `split_part` for `Utf8View` (#21420)\n\n## Which issue does this PR close?\n\n- Closes #21410.\n\n## Rationale for this change\n\nWhen `split_part` is invoked with a `StringViewArray`, we can avoid\ncopying when constructing the return value by instead returning pointers\ninto the view buffers of the input `StringViewArray`.\n\nThis PR only applies this optimization to the code path for scalar\n`delimiter` and `position`, because that\u0027s the most common usage mode in\npractice. We could also optimize the array-args case but it didn\u0027t seem\nworth the extra code.\n\nBenchmarks (M4 Max):\n\n  - scalar_utf8view_very_long_parts/pos_first: 102 µs → 68 µs (-33%)\n  - scalar_utf8view_long_parts/pos_middle: 164 µs → 137 µs (-15%)\n  - scalar_utf8_single_char/pos_first: 42.5 µs → 42.9 µs (no change)\n  - scalar_utf8_single_char/pos_middle: 96.5 µs → 99.5 µs (noise)\n  - scalar_utf8_single_char/pos_negative: 48.3 µs → 48.6 µs (no change)\n  - scalar_utf8_multi_char/pos_middle: 132 µs → 132 µs (no change)\n  - scalar_utf8_long_strings/pos_middle: 1.06 ms → 1.08 ms (noise)\n  - array_utf8_single_char/pos_middle: 355 µs → 365 µs (noise)\n  - array_utf8_multi_char/pos_middle: 357 µs → 360 µs (no change)\n\n## What changes are included in this PR?\n\n* Implement optimization\n* Add benchmark that covers this case\n* Improve SLT test coverage for this code path\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "cdddd7663beddec87d850caf0d497a5d6fd857f8",
      "tree": "39bb78c2e6f31594261c0d13d1fb0e35cd1530f3",
      "parents": [
        "603bfb4ed873e5d69c73a2b7a0e80130f46abd76"
      ],
      "author": {
        "name": "Yonatan Striem Amit",
        "email": "153750076+yonatan-sevenai@users.noreply.github.com",
        "time": "Wed Apr 08 05:35:45 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 09:35:45 2026 +0000"
      },
      "message": "fix: preserve subquery structure when unparsing SubqueryAlias over Ag… (#21099)\n\nWhen the SQL unparser encountered a SubqueryAlias node whose direct\nchild was an Aggregate (or other clause-building plan like Window, Sort,\nLimit, Union), it would flatten the subquery into a simple table alias,\nlosing the aggregate entirely.\n\nFor example, a plan representing:\nSELECT j1.col FROM j1 JOIN (SELECT max(id) AS m FROM j2) AS b ON j1.id \u003d\nb.m\n\nwould unparse to:\n  SELECT j1.col FROM j1 INNER JOIN j2 AS b ON j1.id \u003d b.m\n\ndropping the MAX aggregate and the subquery.\n\nRoot cause: the SubqueryAlias handler in select_to_sql_recursively would\ncall subquery_alias_inner_query_and_columns (which only unwraps\nProjection children) and unparse_table_scan_pushdown (which only handles\nTableScan/SubqueryAlias/Projection). When both returned nothing useful\nfor an Aggregate child, the code recursed directly into the Aggregate,\nmerging its GROUP BY into the outer SELECT instead of wrapping it in a\nderived subquery.\n\nThe fix adds an early check: if the SubqueryAlias\u0027s direct child is a\nplan type that builds its own SELECT clauses (Aggregate, Window, Sort,\nLimit, Union), emit it as a derived subquery via self.derive() with the\nalias always attached, rather than falling through to the recursive path\nthat would flatten it.\n\n## Which issue does this PR close?\n- Closes #21098 \n\n## Rationale for this change\n\nThe SQL unparser silently drops subquery structure when a SubqueryAlias\nnode directly wraps an Aggregate (or Window, Sort, Limit, Union). For\nexample, a plan representing\n```sql \nSELECT ... FROM j1 JOIN (SELECT max(id) FROM j2) AS b ...\n``` \nunparses to \n```sql\nSELECT ... FROM j1 JOIN j2 AS b ...\n```\nlosing the aggregate entirely. This produces semantically incorrect SQL.\n\n## What changes are included in this PR?\n\nIn the SubqueryAlias handler within select_to_sql_recursively\n(`datafusion/sql/src/unparser/plan.rs`):\n- Added an early check: if the SubqueryAlias\u0027s direct child is a plan\ntype that builds its own SELECT clauses (Aggregate, Window, Sort, Limit,\nUnion) and cannot be reduced to a table scan, emit it as a derived\nsubquery (SELECT ...) AS alias via self.derive() instead of recursing\ninto the child and flattening it.\n- Added a helper requires_derived_subquery() that identifies plan types\nrequiring this treatment.\n\n## Are these changes tested?\n\nYes. A new test test_unparse_manual_join_with_subquery_aggregate is\nadded that constructs a SubqueryAlias \u003e Aggregate plan (without an\nintermediate Projection) and asserts the unparsed SQL preserves the\nMAX() aggregate function call. This test fails without the fix. All\ncurrent unparser tests succeed without modification\n\n## Are there any user-facing changes?\n\nNo.\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "603bfb4ed873e5d69c73a2b7a0e80130f46abd76",
      "tree": "f7525660f923b8143749827ced33043a4307c15d",
      "parents": [
        "f4e24a54d52682bd070c1a40a31f55fb5655f014"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Wed Apr 08 14:29:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 06:29:02 2026 +0000"
      },
      "message": "Follow-up: remove interleave panic recovery after Arrow 58.1.0 (#21436)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\n`Fix sort merge interleave overflow` (#20922) added a temporary\n`catch_unwind` shim around Arrow\u0027s `interleave` call because the\nupstream implementation still panicked on offset overflow at the time.\n\nArrow 58.1.0 includes apache/arrow-rs#9549, which returns\n`ArrowError::OffsetOverflowError` directly instead of panicking.\nDataFusion main now depends on that release, so the panic recovery path\nis no longer needed and only broadens the set of failures we might\naccidentally treat as recoverable.\n\n## What changes are included in this PR?\n\n- Remove the temporary panic-catching wrapper from\n  `BatchBuilder::try_interleave_columns`.\n- Keep the existing retry logic, but trigger it only from the returned\n  `OffsetOverflowError`.\n- Replace the panic-specific unit tests with a direct error-shape\nassertion.\n\n## Are these changes tested?\n\nYes.\n\n- `cargo test -p datafusion-physical-plan sorts::builder -- --nocapture`\n- `cargo test -p datafusion-physical-plan sorts:: -- --nocapture`\n- `./dev/rust_lint.sh`\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "f4e24a54d52682bd070c1a40a31f55fb5655f014",
      "tree": "d0b58ebcbdd957a91863de1e6b138be1cf41b372",
      "parents": [
        "944bac27d77bd66704df4c392af99bc5463994be"
      ],
      "author": {
        "name": "Acfboy",
        "email": "acfboyu@outlook.com",
        "time": "Wed Apr 08 14:00:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 06:00:17 2026 +0000"
      },
      "message": "fix: skips projection pruning for whole subtree (#20545)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #18816 .\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\nIn `UserDefinedLogicalNodeCore`, the default implementation of\n`necessary_children_exprs ` returns `None`, which signals to the\noptimizer that it cannot determine which columns are required from the\nchild.\n\nThe optimizer takes a conservative approach and skips projection pruning\nfor that node, leading to complex and redundant plans in the subtree.\nHowever, it would make more sense to assume all columns are required and\nlet the optimizer proceed, rather than giving up on the entire subtree\nentirely.\n\n## What changes are included in this PR?\n\n```rust\nLogicalPlan::Extension(extension) \u003d\u003e {\n    if let Some(necessary_children_indices) \u003d\n        extension.node.necessary_children_exprs(indices.indices())\n    {\n        ...\n    } else {\n        // Requirements from parent cannot be routed down to user defined logical plan safely\n        // Assume it requires all input exprs here\n        plan.inputs()\n            .into_iter()\n            .map(RequiredIndices::new_for_all_exprs)\n            .collect()\n    }\n}\n```\n\ninstead of \n\n\nhttps://github.com/apache/datafusion/blob/b6d46a63824f003117297848d8d83b659ac2e759/datafusion/optimizer/src/optimize_projections/mod.rs#L331-L337\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\nYes.\n\nIn addition to unit tests, I\u0027ve also added a complete end-to-end\nintegration test that reproduces the full scenario in the issue. This\nmight seem redundant, bloated, or even unnecessary. Please let me know\nif I should remove these tests.\n\nAn existing test is modified, but I think the newer behavior is\nexpected.\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\nYes. But I think the new implementation is the expected behavior.\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "944bac27d77bd66704df4c392af99bc5463994be",
      "tree": "3c57b45d8647d9cf30d5d90467837b94fbbc27cb",
      "parents": [
        "c74ed91fdf7f2fd021bc7b68425ef8208770c40c"
      ],
      "author": {
        "name": "Rohan Krishnaswamy",
        "email": "47869999+rkrishn7@users.noreply.github.com",
        "time": "Tue Apr 07 19:38:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 02:38:14 2026 +0000"
      },
      "message": "feat: Propagate orderings through struct-producing projections (#21218)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #21217\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n- Adds `ScalarUDFImpl::struct_field_mapping`\n- Adds logic in `ProjectionMapping` to decompose struct-producing\nfunctions into their field-level mapping entries so that orderings\npropagate through struct projections\n- Adds unit tests/SLT\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nN/A\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "c74ed91fdf7f2fd021bc7b68425ef8208770c40c",
      "tree": "11e9d542cfda796144e72f0a67436ba535009e2a",
      "parents": [
        "8a48a872e4ce5eb6365a57b1b9ba264de448a683"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Wed Apr 08 03:45:35 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 00:45:35 2026 +0000"
      },
      "message": "Estimate aggregate output rows using existing NDV statistics  (#20926)\n\n## Which issue does this PR close?\nPart of https://github.com/apache/datafusion/issues/20766\n\n## Rationale for this change\nGrouped aggregations currently estimate output rows as input_rows,\nignoring available NDV statistics. Spark\u0027s AggregateEstimation and\nTrino\u0027s AggregationStatsRule both use NDV products to tighten this\nestimate. This PR is highly referenced by both.\n\n\n- [Spark\nreference](https://github.com/apache/spark/blob/e8d8e6a8d040d26aae9571e968e0c64bda0875dc/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/logical/statsEstimation/AggregateEstimation.scala#L38-L61)\n- [Trino\nreference](https://github.com/trinodb/trino/blob/43c8c3ba8bff814697c5926149ce13b9532f030b/core/trino-main/src/main/java/io/trino/cost/AggregationStatsRule.java#L92-L101)\n\n## What changes are included in this PR?\n- Estimate aggregate output rows as min(input_rows, product(NDV_i +\nnull_adj_i) * grouping_sets)\n- Cap by Top K limit when active since output row cannot be higher than\nK\n- Propagate distinct_count from child stats to group-by output columns\n\n## Are these changes tested?\nYes existing and new tests that cover different scenarios and edge cases\n\n\n## Are there any user-facing changes?\nNo"
    },
    {
      "commit": "8a48a872e4ce5eb6365a57b1b9ba264de448a683",
      "tree": "a617a08772d7e18f6c0ee608e6e77974976adc5d",
      "parents": [
        "7c3b22c2219011c593484f76d6c1c955252e7842"
      ],
      "author": {
        "name": "Ariel Miculas-Trif",
        "email": "ariel.miculas@gmail.com",
        "time": "Tue Apr 07 23:40:22 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 20:40:22 2026 +0000"
      },
      "message": "perf: optimize object store requests when reading JSON (#20823)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\nThis is an alternative approach to\n- https://github.com/apache/datafusion/pull/19687\n\nInstead of reading the entire range in the json FileOpener, implement an\nAlignedBoundaryStream which scans the range for newlines as the\nFileStream\nrequests data from the stream, by wrapping the original stream returned\nby the\nObjectStore.\n\nThis eliminated the overhead of the extra two get_opts requests needed\nby\ncalculate_range and more importantly, it allows for efficient read-ahead\nimplementations by the underlying ObjectStore. Previously this was\ninefficient\nbecause the streams opened by calculate_range included a stream from \n`(start - 1)` to file_size and another one from `(end - 1)` to\nend_of_file, just to\nfind the two relevant newlines.\n\n\n## What changes are included in this PR?\nAdded the AlignedBoundaryStream which wraps a stream returned by the\nobject\nstore and finds the delimiting newlines for a particular file range.\nNotably it doesn\u0027t\ndo any standalone reads (unlike the calculate_range function),\neliminating two calls\nto get_opts.\n\n## Are these changes tested?\nYes, added unit tests.\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nNo\n\n---------\n\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "7c3b22c2219011c593484f76d6c1c955252e7842",
      "tree": "e7a22db6301215195bbdf2f1908fae07a4925e57",
      "parents": [
        "94c7bc2fb6af71edceddfb3d0b1e5b00515e3007"
      ],
      "author": {
        "name": "Eren Avsarogullari",
        "email": "eren@apache.org",
        "time": "Tue Apr 07 08:26:29 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 15:26:29 2026 +0000"
      },
      "message": "test: Add `datafusion.format.*` configs test coverage (#21355)\n\n## Which issue does this PR close?\n- Closes #21354.\n\n## Rationale for this change\nCurrently, DataFusion supports 9 `datafusion.format.*` configs but their\ntest coverage seem to be missed so this issue aims to add comprehensive\ntest coverage for them. This is follow-up to recent `config framework`\nimprovements: https://github.com/apache/datafusion/pull/20372 and\nhttps://github.com/apache/datafusion/pull/20816.\n\n## What changes are included in this PR?\nNew test coverage is being added for `datafusion.format.*` configs.\n\n## Are these changes tested?\nYes, new test coverage is being added for `datafusion.format.*` configs.\n\n## Are there any user-facing changes?\nNo"
    },
    {
      "commit": "94c7bc2fb6af71edceddfb3d0b1e5b00515e3007",
      "tree": "748d74201e2dcf7dfb9d973739f274d94e3b88c9",
      "parents": [
        "7eccbb94066abd189e37b3cc8872586f2d7b7384"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Apr 07 07:57:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 14:57:34 2026 +0000"
      },
      "message": "chore(deps): bump taiki-e/install-action from 2.70.3 to 2.74.0 (#21434)\n\nBumps\n[taiki-e/install-action](https://github.com/taiki-e/install-action) from\n2.70.3 to 2.74.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/releases\"\u003etaiki-e/install-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.74.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ecargo-deb\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1669\"\u003e#1669\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.49.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.73.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eIntroduce \u003ca\nhref\u003d\"https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns\"\u003edependency\ncooldown\u003c/a\u003e when installing with\n\u003ccode\u003etaiki-e/install-action@\u0026lt;tool_name\u0026gt;\u003c/code\u003e, \u003ccode\u003etool:\n\u0026lt;tool_name\u0026gt;@latest\u003c/code\u003e, or \u003ccode\u003etool:\n\u0026lt;tool_name\u0026gt;@\u0026lt;omitted_version\u0026gt;\u003c/code\u003e to mitigate the risk of\nsupply chain attacks by default. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1666\"\u003e#1666\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis action without this cooldown already takes a few hours to a few\ndays for new releases to be reflected (as with other common package\nmanagers that verify checksums or signatures), so this should not affect\nmost users.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action#security\"\u003e\u0026quot;Security\u0026quot;\nsection in readme\u003c/a\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove robustness for network failure.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDocumentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.72.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ecargo-xwin\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1659\"\u003e#1659\u003c/a\u003e,\nthanks \u003ca\nhref\u003d\"https://github.com/daxpedda\"\u003e\u003ccode\u003e@​daxpedda\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport trailing comma in \u003ccode\u003etool\u003c/code\u003e input option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.71.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-tools@latest\u003c/code\u003e to 1.246.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.71.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImplement workaround for \u003ca\nhref\u003d\"https://redirect.github.com/actions/partner-runner-images/issues/169\"\u003ewindows-11-arm\nrunner bug\u003c/a\u003e which sometimes causes installation failure. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1657\"\u003e#1657\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis addresses an issue that was attempted to be worked around in\n2.71.0 but was insufficient.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.11.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.71.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix a regression that caused an execution policy violation on\nself-hosted Windows runner due to use of non-default\n\u003ccode\u003epowershell\u003c/code\u003e shell, introduced in 2.71.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003edprint@latest\u003c/code\u003e to 0.53.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.71.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ewasm-tools\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1642\"\u003e#1642\u003c/a\u003e,\nthanks \u003ca\nhref\u003d\"https://github.com/crepererum\"\u003e\u003ccode\u003e@​crepererum\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ecovgate\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1613\"\u003e#1613\u003c/a\u003e,\nthanks \u003ca\nhref\u003d\"https://github.com/jesse-black\"\u003e\u003ccode\u003e@​jesse-black\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement potential workaround for \u003ca\nhref\u003d\"https://redirect.github.com/actions/partner-runner-images/issues/169\"\u003ewindows-11-arm\nrunner bug\u003c/a\u003e which sometimes causes issue that the action successfully\ncompletes but the tool is not installed. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1647\"\u003e#1647\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md\"\u003etaiki-e/install-action\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this\nfile.\u003c/p\u003e\n\u003cp\u003eThis project adheres to \u003ca href\u003d\"https://semver.org\"\u003eSemantic\nVersioning\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e[Unreleased]\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.74.0] - 2026-04-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ecargo-deb\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1669\"\u003e#1669\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.49.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.73.0] - 2026-04-05\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eIntroduce \u003ca\nhref\u003d\"https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns\"\u003edependency\ncooldown\u003c/a\u003e when installing with\n\u003ccode\u003etaiki-e/install-action@\u0026lt;tool_name\u0026gt;\u003c/code\u003e, \u003ccode\u003etool:\n\u0026lt;tool_name\u0026gt;@latest\u003c/code\u003e, or \u003ccode\u003etool:\n\u0026lt;tool_name\u0026gt;@\u0026lt;omitted_version\u0026gt;\u003c/code\u003e to mitigate the risk of\nsupply chain attacks by default. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1666\"\u003e#1666\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis action without this cooldown already takes a few hours to a few\ndays for new releases to be reflected (as with other common package\nmanagers that verify checksums or signatures), so this should not affect\nmost users.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action#security\"\u003e\u0026quot;Security\u0026quot;\nsection in readme\u003c/a\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove robustness for network failure.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDocumentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.72.0] - 2026-04-04\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003ecargo-xwin\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1659\"\u003e#1659\u003c/a\u003e,\nthanks \u003ca\nhref\u003d\"https://github.com/daxpedda\"\u003e\u003ccode\u003e@​daxpedda\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport trailing comma in \u003ccode\u003etool\u003c/code\u003e input option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.71.3] - 2026-04-04\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-tools@latest\u003c/code\u003e to 1.246.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.71.2] - 2026-04-02\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/94cb46f8d6e437890146ffbd78a778b78e623fb2\"\u003e\u003ccode\u003e94cb46f\u003c/code\u003e\u003c/a\u003e\nRelease 2.74.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/7fef44e1953572bcd24693fc866ad446fb1b4057\"\u003e\u003ccode\u003e7fef44e\u003c/code\u003e\u003c/a\u003e\nUpdate changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/3bf2282bfd15630bbf9543653d4132bc64c9ca89\"\u003e\u003ccode\u003e3bf2282\u003c/code\u003e\u003c/a\u003e\nUpdate mise manifest\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/223b1d599eeacab3f4361624d257a1d50a152a7c\"\u003e\u003ccode\u003e223b1d5\u003c/code\u003e\u003c/a\u003e\nUpdate tombi manifest\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/fdcd834b4f2d5c0d663395c561633bbe19ecb08d\"\u003e\u003ccode\u003efdcd834\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.49.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/b45e8d6c436517e3d00a29c621a3534a176e4706\"\u003e\u003ccode\u003eb45e8d6\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.4.4\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/4eac87a84609e7a285bcfd82df34e948017a9fcb\"\u003e\u003ccode\u003e4eac87a\u003c/code\u003e\u003c/a\u003e\nci: Update config\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/5b413367489ec0bfe059fd6482a23cc544ed613e\"\u003e\u003ccode\u003e5b41336\u003c/code\u003e\u003c/a\u003e\nAdd issue template\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/55a981690b2670493d925900a2569e5065371d31\"\u003e\u003ccode\u003e55a9816\u003c/code\u003e\u003c/a\u003e\nSupport cargo-deb\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/7a562dfa955aa2e4d5b0fd6ebd57ff9715c07b0b\"\u003e\u003ccode\u003e7a562df\u003c/code\u003e\u003c/a\u003e\nRelease 2.73.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/compare/6ef672efc2b5aabc787a9e94baf4989aa02a97df...94cb46f8d6e437890146ffbd78a778b78e623fb2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dtaiki-e/install-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.70.3\u0026new-version\u003d2.74.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "7eccbb94066abd189e37b3cc8872586f2d7b7384",
      "tree": "a928574c70a6d6700139889bee28df78dbcb17f8",
      "parents": [
        "c73b6e11ce6d1acdb3d67c602c284c86da1dc624"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Apr 07 09:25:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:25:58 2026 +0000"
      },
      "message": "chore(deps): bump the all-other-cargo-deps group with 4 updates (#21435)\n\nBumps the all-other-cargo-deps group with 4 updates:\n[indexmap](https://github.com/indexmap-rs/indexmap),\n[tokio](https://github.com/tokio-rs/tokio),\n[libc](https://github.com/rust-lang/libc) and\n[semver](https://github.com/dtolnay/semver).\n\nUpdates `indexmap` from 2.13.0 to 2.13.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md\"\u003eindexmap\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.1 (2026-04-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMade some \u003ccode\u003eSlice\u003c/code\u003e methods \u003ccode\u003econst\u003c/code\u003e:\n\u003cul\u003e\n\n\u003cli\u003e\u003ccode\u003emap::Slice::{first,last,split_at,split_at_checked,split_first,split_last}\u003c/code\u003e\u003c/li\u003e\n\n\u003cli\u003e\u003ccode\u003eset::Slice::{first,last,split_at,split_at_checked,split_first,split_last}\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/indexmap-rs/indexmap/commit/0b2adfe27714f38d159794678d61d310ac521a1a\"\u003e\u003ccode\u003e0b2adfe\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/indexmap-rs/indexmap/issues/434\"\u003e#434\u003c/a\u003e\nfrom cuviper/const-slice\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/indexmap-rs/indexmap/commit/afa3cafdc81b0b1168417ca042bb6b54496672a0\"\u003e\u003ccode\u003eafa3caf\u003c/code\u003e\u003c/a\u003e\nRelease 2.13.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/indexmap-rs/indexmap/commit/906a7ced0af89814e97c5f780915848577e0e660\"\u003e\u003ccode\u003e906a7ce\u003c/code\u003e\u003c/a\u003e\nMake \u003ccode\u003eSlice::{first,last,split_*}\u003c/code\u003e methods\n\u003ccode\u003econst\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/indexmap-rs/indexmap/compare/2.13.0...2.13.1\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tokio` from 1.50.0 to 1.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/releases\"\u003etokio\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTokio v1.51.0\u003c/h2\u003e\n\u003ch1\u003e1.51.0 (April 3rd, 2026)\u003c/h1\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enet: implement \u003ccode\u003eget_peer_cred\u003c/code\u003e on Hurd (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7989\"\u003e#7989\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eruntime: add \u003ccode\u003etokio::runtime::worker_index()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7921\"\u003e#7921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eruntime: add runtime name (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7924\"\u003e#7924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eruntime: stabilize \u003ccode\u003eLocalRuntime\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7557\"\u003e#7557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ewasm: add wasm32-wasip2 networking support (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7933\"\u003e#7933\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eruntime: steal tasks from the LIFO slot (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: do not show \u0026quot;Available on non-loom only.\u0026quot; doc label\n(\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7977\"\u003e#7977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emacros: improve overall macro hygiene (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7997\"\u003e#7997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: fix \u003ccode\u003enotify_waiters\u003c/code\u003e priority in\n\u003ccode\u003eNotify\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7996\"\u003e#7996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: fix panic in \u003ccode\u003eChan::recv_many\u003c/code\u003e when called with\nnon-empty vector on closed channel (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7991\"\u003e#7991\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7431\"\u003e#7431\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7431\"\u003etokio-rs/tokio#7431\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7557\"\u003e#7557\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7557\"\u003etokio-rs/tokio#7557\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7921\"\u003e#7921\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7921\"\u003etokio-rs/tokio#7921\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7924\"\u003e#7924\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7924\"\u003etokio-rs/tokio#7924\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7933\"\u003e#7933\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7933\"\u003etokio-rs/tokio#7933\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7977\"\u003e#7977\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7977\"\u003etokio-rs/tokio#7977\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7989\"\u003e#7989\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7989\"\u003etokio-rs/tokio#7989\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7991\"\u003e#7991\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7991\"\u003etokio-rs/tokio#7991\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7996\"\u003e#7996\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7996\"\u003etokio-rs/tokio#7996\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7997\"\u003e#7997\u003c/a\u003e:\n\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/pull/7997\"\u003etokio-rs/tokio#7997\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/0af06b7bab12c58161b1d0ae79bdf4452305d42f\"\u003e\u003ccode\u003e0af06b7\u003c/code\u003e\u003c/a\u003e\nchore: prepare Tokio v1.51.0 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8005\"\u003e#8005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/01a7f1dfabc93293743701074752ff0d8e787595\"\u003e\u003ccode\u003e01a7f1d\u003c/code\u003e\u003c/a\u003e\nchore: prepare tokio-macros v2.7.0 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8004\"\u003e#8004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/eeb55c733ba9a83c51d08b1629dca6a5ec0f4b2b\"\u003e\u003ccode\u003eeeb55c7\u003c/code\u003e\u003c/a\u003e\nruntime: steal tasks from the LIFO slot (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/1fc450aefba4b05cdff9b7825ca5e39cccb3780e\"\u003e\u003ccode\u003e1fc450a\u003c/code\u003e\u003c/a\u003e\nruntime: stabilize \u003ccode\u003eLocalRuntime\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7557\"\u003e#7557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/324218f9bbdc26e4bb527d036613826824f3078b\"\u003e\u003ccode\u003e324218f\u003c/code\u003e\u003c/a\u003e\nMerge tag \u0027tokio-1.47.4\u0027 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8003\"\u003e#8003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/aa65d0d0b8ea6eec80985b9d231390f137493071\"\u003e\u003ccode\u003eaa65d0d\u003c/code\u003e\u003c/a\u003e\nchore: prepare Tokio v1.47.4 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8002\"\u003e#8002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/bf18ed452d6aae438e84ae008a01a74776abdc19\"\u003e\u003ccode\u003ebf18ed4\u003c/code\u003e\u003c/a\u003e\nsync: fix panic in \u003ccode\u003eChan::recv_many\u003c/code\u003e when called with\nnon-empty vector on clo...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/43134f1e5784993eb4fb3863933d74ac9e28f598\"\u003e\u003ccode\u003e43134f1\u003c/code\u003e\u003c/a\u003e\nwasm: add wasm32-wasip2 networking support (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7933\"\u003e#7933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/b4c3246d330379430937bdbb5e1b0c37282ae23e\"\u003e\u003ccode\u003eb4c3246\u003c/code\u003e\u003c/a\u003e\nmacros: improve overall macro hygiene (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7997\"\u003e#7997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/7947fa4bd79d7345aa7e6b189fc1fbb6983a4351\"\u003e\u003ccode\u003e7947fa4\u003c/code\u003e\u003c/a\u003e\nrt: add runtime name (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7924\"\u003e#7924\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/compare/tokio-1.50.0...tokio-1.51.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `libc` from 0.2.183 to 0.2.184\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-lang/libc/releases\"\u003elibc\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.2.184\u003c/h2\u003e\n\u003ch3\u003eMSRV\u003c/h3\u003e\n\u003cp\u003eThis release increases the MSRV of \u003ccode\u003elibc\u003c/code\u003e to 1.65. With\nthis update, you can now always use the\n\u003ccode\u003ecore::ffi::c_*\u003c/code\u003e types with \u003ccode\u003elibc\u003c/code\u003e definitions,\nsince \u003ccode\u003elibc\u003c/code\u003e has been changed to reexport from\n\u003ccode\u003ecore\u003c/code\u003e rather than redefining them. (This \u003cem\u003eusually\u003c/em\u003e\nworked before but had edge cases.)\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4972\"\u003e#4972\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBSD: Add \u003ccode\u003eIP_MINTTL\u003c/code\u003e to bsd (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5026\"\u003e#5026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCygwin: Add \u003ccode\u003eTIOCM_DSR\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5031\"\u003e#5031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFreeBSD: Added \u003ccode\u003exfile\u003c/code\u003e structe and file descriptor types\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add CAN netlink bindings (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5011\"\u003e#5011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add \u003ccode\u003estruct ethhdr\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4239\"\u003e#4239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add \u003ccode\u003estruct ifinfomsg\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Define \u003ccode\u003emax_align_t\u003c/code\u003e for riscv64 (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5029\"\u003e#5029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNetBSD: Add missing \u003ccode\u003eCLOCK_\u003c/code\u003e constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5020\"\u003e#5020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNuttX: Add \u003ccode\u003e_SC_HOST_NAME_MAX\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eVxWorks: Add \u003ccode\u003eflock\u003c/code\u003e and \u003ccode\u003eF_*LCK\u003c/code\u003e constants\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4043\"\u003e#4043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWASI: Add all \u003ccode\u003e_SC_*\u003c/code\u003e sysconf constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5023\"\u003e#5023\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cp\u003eThe remaining fixed-width integer aliases, \u003ccode\u003e__uint128_t\u003c/code\u003e,\n\u003ccode\u003e__uint128\u003c/code\u003e, \u003ccode\u003e__int128_t\u003c/code\u003e, and\n\u003ccode\u003e__int128\u003c/code\u003e,\nhave been deprecated. Use \u003ccode\u003ei128\u003c/code\u003e and \u003ccode\u003eu128\u003c/code\u003e\ninstead. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4343\"\u003e#4343\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ebreaking\u003c/strong\u003e Redox: Fix signal action constant types\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5009\"\u003e#5009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEspIDF: Correct the value of \u003ccode\u003eDT_*\u003c/code\u003e constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedox: Fix locale values and add \u003ccode\u003eRTLD_NOLOAD\u003c/code\u003e, some TCP\nconstants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5025\"\u003e#5025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eVarious: Use \u003ccode\u003ePadding::new(\u0026lt;zeroed\u0026gt;)\u003c/code\u003e rather than\n\u003ccode\u003ePadding::uninit()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5036\"\u003e#5036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003epotentially breaking\u003c/strong\u003e Linux: Add new fields to\n\u003ccode\u003estruct ptrace_syscall_info\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4966\"\u003e#4966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003ecore::ffi\u003c/code\u003e integer types rather than\nredefining (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5015\"\u003e#5015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedox: Update \u003ccode\u003eF_DUPFD\u003c/code\u003e, \u003ccode\u003eIP\u003c/code\u003e, and\n\u003ccode\u003eTCP\u003c/code\u003e constants to match relibc (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-lang/libc/blob/0.2.184/CHANGELOG.md\"\u003elibc\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/compare/0.2.183...0.2.184\"\u003e0.2.184\u003c/a\u003e\n- 2026-04-01\u003c/h2\u003e\n\u003ch3\u003eMSRV\u003c/h3\u003e\n\u003cp\u003eThis release increases the MSRV of \u003ccode\u003elibc\u003c/code\u003e to 1.65. With\nthis update, you can now always use the\n\u003ccode\u003ecore::ffi::c_*\u003c/code\u003e types with \u003ccode\u003elibc\u003c/code\u003e definitions,\nsince \u003ccode\u003elibc\u003c/code\u003e has been changed to reexport from\n\u003ccode\u003ecore\u003c/code\u003e rather than redefining them. (This \u003cem\u003eusually\u003c/em\u003e\nworked before but had edge cases.)\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4972\"\u003e#4972\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBSD: Add \u003ccode\u003eIP_MINTTL\u003c/code\u003e to bsd (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5026\"\u003e#5026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCygwin: Add \u003ccode\u003eTIOCM_DSR\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5031\"\u003e#5031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFreeBSD: Added \u003ccode\u003exfile\u003c/code\u003e structe and file descriptor types\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5002\"\u003e#5002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add CAN netlink bindings (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5011\"\u003e#5011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add \u003ccode\u003estruct ethhdr\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4239\"\u003e#4239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Add \u003ccode\u003estruct ifinfomsg\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5012\"\u003e#5012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLinux: Define \u003ccode\u003emax_align_t\u003c/code\u003e for riscv64 (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5029\"\u003e#5029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNetBSD: Add missing \u003ccode\u003eCLOCK_\u003c/code\u003e constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5020\"\u003e#5020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNuttX: Add \u003ccode\u003e_SC_HOST_NAME_MAX\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5004\"\u003e#5004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eVxWorks: Add \u003ccode\u003eflock\u003c/code\u003e and \u003ccode\u003eF_*LCK\u003c/code\u003e constants\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4043\"\u003e#4043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWASI: Add all \u003ccode\u003e_SC_*\u003c/code\u003e sysconf constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5023\"\u003e#5023\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cp\u003eThe remaining fixed-width integer aliases, \u003ccode\u003e__uint128_t\u003c/code\u003e,\n\u003ccode\u003e__uint128\u003c/code\u003e, \u003ccode\u003e__int128_t\u003c/code\u003e, and\n\u003ccode\u003e__int128\u003c/code\u003e,\nhave been deprecated. Use \u003ccode\u003ei128\u003c/code\u003e and \u003ccode\u003eu128\u003c/code\u003e\ninstead. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4343\"\u003e#4343\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ebreaking\u003c/strong\u003e Redox: Fix signal action constant types\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5009\"\u003e#5009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEspIDF: Correct the value of \u003ccode\u003eDT_*\u003c/code\u003e constants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5034\"\u003e#5034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedox: Fix locale values and add \u003ccode\u003eRTLD_NOLOAD\u003c/code\u003e, some TCP\nconstants (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5025\"\u003e#5025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eVarious: Use \u003ccode\u003ePadding::new(\u0026lt;zeroed\u0026gt;)\u003c/code\u003e rather than\n\u003ccode\u003ePadding::uninit()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5036\"\u003e#5036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003epotentially breaking\u003c/strong\u003e Linux: Add new fields to\n\u003ccode\u003estruct ptrace_syscall_info\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4966\"\u003e#4966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003ecore::ffi\u003c/code\u003e integer types rather than\nredefining (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/5015\"\u003e#5015\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRedox: Update \u003ccode\u003eF_DUPFD\u003c/code\u003e, \u003ccode\u003eIP\u003c/code\u003e, and\n\u003ccode\u003eTCP\u003c/code\u003e constants to match relibc (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/libc/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/b1fd610c7eb6026c108f318874283525871b0e77\"\u003e\u003ccode\u003eb1fd610\u003c/code\u003e\u003c/a\u003e\nchore: Release libc 0.2.184\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/f596819d7c309f9de20ace14532d37d94ae48380\"\u003e\u003ccode\u003ef596819\u003c/code\u003e\u003c/a\u003e\nci: Don\u0027t enforce cargo-semver-checks\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/4645f60c3a289aaf7d7fe08e2de66a1acd63a97c\"\u003e\u003ccode\u003e4645f60\u003c/code\u003e\u003c/a\u003e\nlinux: update ptrace_syscall_info struct\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/14cbbec35360179b68947183d3ba618fa78acba2\"\u003e\u003ccode\u003e14cbbec\u003c/code\u003e\u003c/a\u003e\ntypes: Remove \u003ccode\u003ePadding::uninit\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/b5dcda885fbf89e39e6a8fb80ee46f90284a6d4a\"\u003e\u003ccode\u003eb5dcda8\u003c/code\u003e\u003c/a\u003e\npthread: Use \u003ccode\u003ePadding::new(\\\u0026lt;zeroed\u0026gt;)\u003c/code\u003e rather than\n\u003ccode\u003ePadding::uninit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/bbb1c5d350e010760c4ebdbc2bb499b2e0faff76\"\u003e\u003ccode\u003ebbb1c5d\u003c/code\u003e\u003c/a\u003e\ntypes: Add a \u003ccode\u003enew\u003c/code\u003e function to \u003ccode\u003ePadding\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/df06e43309c93a6dc5ea210d72f0284d945c7d61\"\u003e\u003ccode\u003edf06e43\u003c/code\u003e\u003c/a\u003e\nFix locale values and add RTLD_NOLOAD, some TCP constants\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/078f5c6b3c7c3a51deba2c52c3d00b93cbb48557\"\u003e\u003ccode\u003e078f5c6\u003c/code\u003e\u003c/a\u003e\nnewlib/espidf: Move DT_* to espidf/mod.rs\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/d32b83db3c0e078e0a8b094d9dfbd41f87c7a20f\"\u003e\u003ccode\u003ed32b83d\u003c/code\u003e\u003c/a\u003e\nAdd IP_MINTTL to bsd\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/libc/commit/939e0ec2a8c3234424286719405cb708e9b8062b\"\u003e\u003ccode\u003e939e0ec\u003c/code\u003e\u003c/a\u003e\nDefine max_align_t for riscv64-linux\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/rust-lang/libc/compare/0.2.183...0.2.184\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semver` from 1.0.27 to 1.0.28\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/dtolnay/semver/releases\"\u003esemver\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentation improvements\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/7625c7aa3f0e8ba21e099d1765bcebcb72aa8816\"\u003e\u003ccode\u003e7625c7a\u003c/code\u003e\u003c/a\u003e\nRelease 1.0.28\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/fd404d082c2666b3df87c6229b85201a8533adda\"\u003e\u003ccode\u003efd404d0\u003c/code\u003e\u003c/a\u003e\nMerge pull request 351 from czy-29/master\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/f75f26e98469c637ebb45baaa9c9694fc235f80b\"\u003e\u003ccode\u003ef75f26e\u003c/code\u003e\u003c/a\u003e\nThe \u003ccode\u003edoc_auto_cfg\u003c/code\u003e and \u003ccode\u003edoc_cfg\u003c/code\u003e features have\nbeen merged\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/9e2bfa2ec874e1d9fc1abe7b109dd212a6fd85c2\"\u003e\u003ccode\u003e9e2bfa2\u003c/code\u003e\u003c/a\u003e\nEnable \u003ccode\u003eserde\u003c/code\u003e on \u003ccode\u003edocs.rs\u003c/code\u003e and automatically add\n\u003ccode\u003eserde\u003c/code\u003e flag to the docs\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/8591f2344b52b31d85b538de58b76a676fe9ff90\"\u003e\u003ccode\u003e8591f23\u003c/code\u003e\u003c/a\u003e\nUnpin CI miri toolchain\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/66bdd2ce5fb40d435677a03aaaaa60c569e8932c\"\u003e\u003ccode\u003e66bdd2c\u003c/code\u003e\u003c/a\u003e\nPin CI miri to nightly-2026-02-11\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/324ffce5d914778062136c9744ffdf53523c9fa2\"\u003e\u003ccode\u003e324ffce\u003c/code\u003e\u003c/a\u003e\nSwitch from cargo bench to criterion\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/34133a568a2fd0d9f10ef45bbf12d280e795c03e\"\u003e\u003ccode\u003e34133a5\u003c/code\u003e\u003c/a\u003e\nUpdate actions/upload-artifact@v5 -\u0026gt; v6\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/7f935ffc7235e20864e7cba882077c9d8ad65f7c\"\u003e\u003ccode\u003e7f935ff\u003c/code\u003e\u003c/a\u003e\nUpdate actions/upload-artifact@v4 -\u0026gt; v5\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/semver/commit/c07fb913535b7f12d4780fbcc9fef0e0bb6fc836\"\u003e\u003ccode\u003ec07fb91\u003c/code\u003e\u003c/a\u003e\nSwitch from test::black_box to std::hint::black_box\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/dtolnay/semver/compare/1.0.27...1.0.28\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s major version (unless you unignore this specific\ndependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s minor version (unless you unignore this specific\ndependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR\nand stop Dependabot creating any more for the specific dependency\n(unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore\nconditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c73b6e11ce6d1acdb3d67c602c284c86da1dc624",
      "tree": "e7b55ec9633d193c6b304a610c06a85ae1cb9542",
      "parents": [
        "727022d9e7604640ec7e26c3375f9bd66626baf3"
      ],
      "author": {
        "name": "theirix",
        "email": "theirix@gmail.com",
        "time": "Tue Apr 07 14:16:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:16:46 2026 +0000"
      },
      "message": "bench: add benchmarks for first_value, last_value (#21409)\n\n## Which issue does this PR close?\n\n## Rationale for this change\n\nSpin-off of #21383 to have a bench for `First_Value`, `Last_Value`\navailable before a PR with logic change.\n\n## What changes are included in this PR?\n\n- Add benchmark for `GroupsAccumulator`. It\u0027s pretty complicated to test\naggregates with grouping, since many operations are stateful, so I\nintroduced end-to-end evaluate test (to actually test taking state) and\nconvert_to_state (as in other benches)\n- A bench for a simple `Accumulator`\n\n## Are these changes tested?\n\n- Manual bench run\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "727022d9e7604640ec7e26c3375f9bd66626baf3",
      "tree": "7eb7b6502e4d7c4f25a34e27592f8c33f6bd9a0b",
      "parents": [
        "a32c4b26c2e4f6ad856f64cb81bb0653fa4f9592"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Tue Apr 07 21:01:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:01:41 2026 +0000"
      },
      "message": "feat: make sort pushdown BufferExec capacity configurable, default 1GB (#21426)\n\n## Which issue does this PR close?\n\nCloses #21417\n\n## Rationale for this change\n\n#21182 introduced `BufferExec` between `SortPreservingMergeExec` and\n`DataSourceExec` when sort elimination removes a `SortExec`. The buffer\ncapacity was hardcoded to 64MB, which can cause I/O stalls for wide-row\nfull scans.\n\n## What changes are included in this PR?\n\n- Add `datafusion.execution.sort_pushdown_buffer_capacity` config option\n(default 1GB)\n- Replace hardcoded `BUFFER_CAPACITY_AFTER_SORT_ELIMINATION` constant\nwith the config value\n- Update SLT test expectations for new default capacity\n\n## How are these changes justified?\n\n**Why 1GB default:**\n- This is a maximum, not pre-allocated — actual usage is bounded by\npartition data size\n- Strictly less memory than the `SortExec` it replaces (which buffers\nentire partition)\n- `BufferExec` integrates with `MemoryPool`, so global memory limits are\nrespected\n- 64MB was too small for wide-row scans (16-column TPC-H `SELECT *`\nqueries showed I/O stalls)\n\n**Why configurable:**\n- Different workloads have different optimal buffer sizes\n- Users with memory-constrained environments can reduce it\n- Users with wide tables or large row groups can increase it\n\n## Are these changes tested?\n\n- Existing SLT Test G verifies `BufferExec` appears in plan with correct\ncapacity\n- Config integration tested via existing config framework\n\n## Are there any user-facing changes?\n\nNew config option: `datafusion.execution.sort_pushdown_buffer_capacity`\n(default: 1GB)"
    },
    {
      "commit": "a32c4b26c2e4f6ad856f64cb81bb0653fa4f9592",
      "tree": "330b19958de640a28a18364ac1a2baeeee4eb860",
      "parents": [
        "0b8c4c53e4e5b8993ba3a0878b84d145d1f7a8e4"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Tue Apr 07 07:43:27 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 12:43:27 2026 +0000"
      },
      "message": "fix: preserve source field metadata in TryCast expressions (#21390)\n\n## Which issue does this PR close?\n\nN/A — discovered while investigating metadata propagation through cast\nexpressions in #21322\n\n## Rationale for this change\n\n`Expr::Cast` preserves the source field\u0027s metadata through a dedicated\n`to_field` handler in `expr_schema.rs`, but `Expr::TryCast` fell through\nto the default case which creates a `Field::new(...)` without any\nmetadata. This caused source column metadata to be silently dropped when\nusing `TRY_CAST`.\n\n## What changes are included in this PR?\n\n- Added a dedicated `to_field` handler for `Expr::TryCast` in\n`expr_schema.rs` that preserves source field metadata (matching\n`Expr::Cast` behavior), while keeping TryCast\u0027s always-nullable\nsemantics.\n- Added SLT tests in `metadata.slt` verifying metadata preservation\nthrough `TRY_CAST` on both timestamp and integer columns.\n\n## Are these changes tested?\n\nYes — new sqllogictest cases in `metadata.slt` using `arrow_metadata()`\nto verify metadata is preserved through `TRY_CAST`.\n\n## Are there any user-facing changes?\n\n`TRY_CAST` now preserves source field metadata, consistent with `CAST`\nbehavior.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "0b8c4c53e4e5b8993ba3a0878b84d145d1f7a8e4",
      "tree": "79baf60a827581b06dbe58d25e55e6aaf1dfbeb3",
      "parents": [
        "a4b945e1459289996a0afb402b7b5267ebc78f10"
      ],
      "author": {
        "name": "Kumar Ujjawal",
        "email": "ujjawalpathak6@gmail.com",
        "time": "Tue Apr 07 13:58:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 08:28:57 2026 +0000"
      },
      "message": "fix(datasource): keep stats absent when collect_stats is false (#21149)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #2976\n- Part of #8227\n\n## Rationale for this change\n\n`get_statistics_with_limit` was copying first-file row/byte stats even\nwhen`collect_stats\u003dfalse`. This could return `Exact(0)` instead of\n`Absent` (unknown stats).\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\nSummary stats are only initialized and merged when `collect_stats\u003dtrue`.\nAlso fixes first-file column `byte_size` initialization in the\n`collect_stats\u003dtrue` path, and adds regression tests for both paths and\nlimit behavior.\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\nYes\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Siew Kam Onn \u003ckosiew@gmail.com\u003e"
    },
    {
      "commit": "a4b945e1459289996a0afb402b7b5267ebc78f10",
      "tree": "7a44436340bdeaed000c7b134cf645c25c6cab73",
      "parents": [
        "cdfade51ab35d48936a7ab80d7e6a571fd36f8cb"
      ],
      "author": {
        "name": "Alessandro Solimando",
        "email": "asolimando@apache.org",
        "time": "Tue Apr 07 10:16:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 08:16:41 2026 +0000"
      },
      "message": "feat: Set NDV to Exact(1) for numeric equality filter predicates (#21077)\n\n## Which issue does this PR close?\n\n- Part of #20766\n\nRelated: #20789 (uses NDV for equality filter selectivity, complementary\n- this PR improves the NDV output stats, that PR consumes them)\n\n## Rationale for this change\n\nWhen a filter predicate collapses a column interval to a single value\n(e.g. `d_qoy \u003d 1`), the output column can only have one distinct value.\nCurrently `distinct_count` is always demoted to `Inexact`, losing this\ninformation.\n\nThis matters for downstream optimizers that rely on `distinct_count`,\nsuch as join cardinality estimation in\n`estimate_inner_join_cardinality`.\n\n## What changes are included in this PR?\n\nIn `collect_new_statistics` (filter.rs), when the post-filter interval\nhas `lower \u003d\u003d upper` (both non-null), set `distinct_count` to\n`Precision::Exact(1)` instead of demoting the input NDV to `Inexact`.\n\n## Are these changes tested?\n\nYes, 4 unit tests:\n- Equality predicate (`a \u003d 42`) -\u003e NDV becomes `Exact(1)`\n- OR predicate (`a \u003d 42 OR a \u003d 22`) -\u003e interval does not collapse, NDV\nstays `Inexact`\n- AND with mixed predicates (`a \u003d 42 AND b \u003e 10 AND c \u003d 7`) -\u003e `a` and\n`c` get `Exact(1)`, `b` stays `Inexact`\n- Equality with absent bounds (`a \u003d 42`, no min/max) -\u003e interval\nanalysis still resolves to `Exact(1)`\n\n## Are there any user-facing changes?\n\nNo breaking changes. Statistics consumers will now see `Exact(1)` for\n`distinct_count` on columns constrained to a single value by filter\npredicates.\n\nDisclaimer: I used AI to assist in the code generation, I have manually\nreviewed the output and it matches my intention and understanding.\n\n---------\n\nCo-authored-by: xudong.w \u003cwxd963996380@gmail.com\u003e"
    },
    {
      "commit": "cdfade51ab35d48936a7ab80d7e6a571fd36f8cb",
      "tree": "975ca76cef795ad3ea1679096b1cb3ff46ff9745",
      "parents": [
        "8a2d75818e6274691e32246392742182250f177e"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Tue Apr 07 03:15:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 19:15:28 2026 +0000"
      },
      "message": "feat: sort file groups by statistics during sort pushdown (Sort pushdown phase 2) (#21182)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/17348\n- Closes https://github.com/apache/datafusion/issues/19329\n\n## Rationale for this change\n\nWhen a partition (file group) contains multiple files in wrong order,\n`validated_output_ordering()` strips the ordering and `EnforceSorting`\ninserts an unnecessary `SortExec` — even though the files are\nnon-overlapping and internally sorted.\n\nThis PR fixes it by **sorting files within each group by min/max\nstatistics** during sort pushdown. After sorting, the file order matches\nthe sort key order, the ordering becomes valid, and `SortExec` can be\neliminated. This works for both single-partition and multi-partition\nplans with multi-file groups.\n\n## What changes are included in this PR?\n\n### Core optimization\n\n```text\nFiles in wrong order within a partition:     After statistics-based sorting:\n  [a_high(400k+), b_mid(200k), c_low(1)]     [c_low(1), b_mid(200k), a_high(400k+)]\n  → ordering stripped                          → ordering valid, non-overlapping\n  → SortExec stays                             → SortExec eliminated\n```\n\nWhen `PushdownSort` finds a `SortExec` above a file-based\n`DataSourceExec`:\n\n1. **FileSource returns Exact** (natural ordering satisfies request):\n   - Sort files within each group by statistics, verify non-overlapping\n   - SortExec removed, fetch (LIMIT) pushed to DataSourceExec\n\n2. **FileSource returns Unsupported** (ordering stripped due to wrong\nfile order):\n   - Sort files within each group by statistics\n- Re-check: if files are now non-overlapping and ordering is valid →\nupgrade to Exact\n   - SortExec eliminated + fetch pushed down\n\n3. **FileSource returns Inexact** (reverse scan):\n   - SortExec kept, scan optimized with reverse_row_groups\n\n### Files Changed\n\n| File | Change |\n|------|--------|\n| `datasource-parquet/src/source.rs` | ParquetSource returns `Exact`\nwhen natural ordering satisfies request |\n| `datasource/src/file_scan_config.rs` | Statistics-based file sorting,\nnon-overlapping re-check, Unsupported→Exact upgrade |\n| `physical-optimizer/src/pushdown_sort.rs` | Preserve fetch (LIMIT)\nwhen eliminating SortExec, module doc update |\n| `core/tests/physical_optimizer/pushdown_sort.rs` | Updated prefix\nmatch test |\n| `sqllogictest/test_files/sort_pushdown.slt` | Updated existing tests +\n5 new test groups (A-E) |\n\n## Benchmark Results\n\nLocal release build, `--partitions 1`, 3 non-overlapping files with\nreversed naming (6M rows):\n\n| Query | Description | Main (ms) | PR (ms) | Speedup |\n|-------|-------------|-----------|---------|---------|\n| Q1 | `ORDER BY ASC` (full scan) | 259 | 122 | **2.1x faster** |\n| Q2 | `ORDER BY ASC LIMIT 100` | 80 | 3 | **27x faster** |\n| Q3 | `SELECT * ORDER BY ASC` | 700 | 313 | **2.2x faster** |\n| Q4 | `SELECT * LIMIT 100` | 342 | 7 | **49x faster** |\n\nLIMIT queries benefit most because sort elimination + limit pushdown\nmeans only the first ~100 rows are read.\n\n## Tests\n\n- 13 new unit tests covering all sort pushdown paths\n- 5 new SLT integration test groups (sort elimination, overlapping\nfiles, LIMIT, multi-partition, inferred ordering)\n- All existing tests pass with no regressions\n\n## Test plan\n\n- [x] `cargo test -p datafusion-datasource` — all tests pass\n- [x] `cargo test -p datafusion-datasource-parquet` — all tests pass\n- [x] `cargo test -p datafusion-physical-optimizer` — all tests pass\n- [x] `cargo test -p datafusion --test core_integration` — all tests\npass\n- [x] SLT sort/order/topk/window/union/joins tests pass (no regressions)\n- [x] `cargo clippy` — 0 warnings\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "8a2d75818e6274691e32246392742182250f177e",
      "tree": "c7394d8a117de0547d07ebbeca7ae98d35b71d0f",
      "parents": [
        "206ac6b950e709373a39e74ebb33ed0c95edce9e"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Apr 06 14:40:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 18:40:12 2026 +0000"
      },
      "message": "Minor: add tests for regexp_replace and capture groups (#21413)\n\n## Which issue does this PR close?\n\n- related to https://github.com/apache/datafusion/pull/21379\n\n## Rationale for this change\n\nAs suggested by @adriangb\nhttps://github.com/apache/datafusion/pull/21379#issuecomment-4193504419\n\nLet\u0027s add some additional test coverage as we work to optimize\nregexp_replace\n\n## What changes are included in this PR?\n\nAdd some tests\n\n## Are these changes tested?\nyes\n\n## Are there any user-facing changes?\n\nNo"
    },
    {
      "commit": "206ac6b950e709373a39e74ebb33ed0c95edce9e",
      "tree": "cc17d2b3e91dd3093258beee28bec88f33c8d1c0",
      "parents": [
        "7fa7fe04067103c0ef8395cb8b4e16069c735718"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Mon Apr 06 12:44:31 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 17:44:31 2026 +0000"
      },
      "message": "refactor(pruning): remove column param from PruningStatistics::row_counts (#21369)\n\n## Which issue does this PR close?\n\nN/A — standalone API improvement, prerequisite for #21157.\n\n## Rationale for this change\n\n`PruningStatistics::row_counts(\u0026self, column: \u0026Column)` takes a column\nparameter, but row counts are container-level (same for all columns). 8\nof 11 implementations ignore the parameter with `_column`. The Parquet\nimpl (`RowGroupPruningStatistics`) unnecessarily constructs a\n`StatisticsConverter` from the column just to call\n`row_group_row_counts()`, which doesn\u0027t use the column at all.\n\nThe existing code even has a comment acknowledging this:\n\u003e \"row counts are the same for all columns in a row group\"\n\nAnd a test comment:\n\u003e \"This is debatable, personally I think `row_count` should not take a\n`Column` as an argument at all since all columns should have the same\nnumber of rows.\"\n\n## What changes are included in this PR?\n\n**Breaking change**: `fn row_counts(\u0026self, column: \u0026Column) -\u003e\nOption\u003cArrayRef\u003e` becomes `fn row_counts(\u0026self) -\u003e Option\u003cArrayRef\u003e`.\n\n- Remove `column` parameter from trait definition and all 11\nimplementations\n- `RowGroupPruningStatistics`: read `num_rows()` directly from row group\nmetadata instead of routing through `StatisticsConverter`\n- `PrunableStatistics`: remove column-exists validation (row count is\ncontainer-level)\n- Update all call sites and tests\n\n## Are these changes tested?\n\nYes — all existing tests updated and passing. The behavior change is:\n- `row_counts()` on `PrunableStatistics` now returns data even for\nnon-existent columns (correct, since row count is container-level)\n- `RowGroupPruningStatistics::row_counts()` always returns row counts\n(previously could fail if column wasn\u0027t in Parquet schema)\n\n## Are there any user-facing changes?\n\nYes — breaking change to `PruningStatistics` trait. Downstream\nimplementations need to remove the `column` parameter from their\n`row_counts` method.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "7fa7fe04067103c0ef8395cb8b4e16069c735718",
      "tree": "d45fd87c107cc1fffc44a89d131acf1b2d5a032d",
      "parents": [
        "a51971b7dd9763fcbe3825c399b22f6f4b2edd69"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Mon Apr 06 12:12:07 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 16:12:07 2026 +0000"
      },
      "message": "perf: Optimize `split_part` for scalar args (#21238)\n\n## Which issue does this PR close?\n\n- Closes #21204.\n\n## Rationale for this change\n\nIn practice, `split_part(string, delimiter, position)` is often invoked\nwith constant values for `delimiter` and `position`. We can take\nadvantage of that to hoist some conditional branches out of the per-row\nhot loop; more importantly, we can switch from using `str::split` to\nbuilding a `memchr::memmem::Finder` and using it for each row. Building\na `Finder` is relatively expensive but it\u0027s a clear win when we can\namortize that one-time cost over an entire input batch.\n\nBenchmarks (M4 Max):\n\n  - `scalar_utf8_single_char/pos_first`: 105 µs → 41 µs, -61%\n  - `scalar_utf8_single_char/pos_middle`: 358 µs → 97 µs, -73%\n  - `scalar_utf8_single_char/pos_negative`: 110 µs → 46 µs, -58%\n  - `scalar_utf8_multi_char/pos_middle`: 355 µs → 132 µs, -63%\n  - `scalar_utf8_long_strings/pos_middle`: 1.97 ms → 1.11 ms, -43%\n  - `scalar_utf8view_long_parts/pos_middle`: 467 µs → 169 µs, -63%\n  - `array_utf8_single_char/pos_middle`: 351 µs → 357 µs, no change\n  - `array_utf8_multi_char/pos_middle`: 366 µs → 357 µs, -2.6%\n\n## What changes are included in this PR?\n\n* Add benchmarks for `split_part` with scalar delimiter and position\n* Add new fast-path for `split_part` with scalar delimiter and position\n* Add SLT tests for `split_part` with scalar delimiter and position\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "a51971b7dd9763fcbe3825c399b22f6f4b2edd69",
      "tree": "3ef1eba27725e63d7ef6caaeb03909793d8370fa",
      "parents": [
        "9ab52914e938d4f604863e97516d6880cea5674e"
      ],
      "author": {
        "name": "Krisztián Szűcs",
        "email": "szucs.krisztian@gmail.com",
        "time": "Mon Apr 06 18:09:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 16:09:20 2026 +0000"
      },
      "message": "feat: add support for parquet content defined chunking options (#21110)\n\n## Rationale for this change\n\n- closes https://github.com/apache/datafusion/pull/21110\n\nExpose the new Content-Defined Chunking feature from parquet-rs\nhttps://github.com/apache/arrow-rs/pull/9450\n\n## What changes are included in this PR?\n\nNew parquet writer options for enabling CDC.\n\n## Are these changes tested?\n\nIn-progress.\n\n## Are there any user-facing changes?\n\nNew config options.\n\n\nDepends on the 58.1 arrow-rs release."
    },
    {
      "commit": "9ab52914e938d4f604863e97516d6880cea5674e",
      "tree": "e861e6e41aba8a5ba72dff2b351453ea32b35c7d",
      "parents": [
        "b3b721f12e4ccc54fcfd435b0365654e3ea25715"
      ],
      "author": {
        "name": "Alexander Alexandrov",
        "email": "alexander.s.alexandrov@gmail.com",
        "time": "Mon Apr 06 19:04:01 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 16:04:01 2026 +0000"
      },
      "message": "fix(sql): fix a bug when planning semi- or antijoins (#20990)\n\n- Closes #20989.\n\n## Rationale for this change\n\nThe planner should be consistent with the expected SQL behavior—swapping\nthe names of tables that have identical structure in a SQL query should\nnot affect the schema for that query.\n\n## What changes are included in this PR?\n\n- A fix in the `exclude_using_columns` helper method in\n`datafusion/expr/src/utils.rs` that ensures that we don\u0027t retain columns\nfrom the projected side when deciding which USING columns to exclude and\nwhich to retain on top of semi- or antijoins.\n- Regression tests for the change in\n`test_using_join_wildcard_schema_semi_anti`.\n\n## Are these changes tested?\n\n- Added a regression test.\n\n## Are there any user-facing changes?\n\nYes, the change is user facing, but I doubt that this behavior is\nexpected and is documented anywhere.\nIf existing docs need to be updated, please point me to the concrete\nplaces and I can take a look.\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "b3b721f12e4ccc54fcfd435b0365654e3ea25715",
      "tree": "39cdbbc4d64219de65dc64c0f5790df056c3b660",
      "parents": [
        "c17c87c575be916c6501df8a588e3c2614a9dc6f"
      ],
      "author": {
        "name": "Xander",
        "email": "zander181@googlemail.com",
        "time": "Mon Apr 06 17:03:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 16:03:11 2026 +0000"
      },
      "message": "feat: make DataFrame::create_physical_plan take \u0026self instead of self (#20562)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes https://github.com/apache/datafusion/issues/20561\n\n## Rationale for this change\n\nPreviously `create_physical_plan` consumed the `DataFrame`, making it\nimpossible to inspect (e.g. log) the physical plan and then execute the\nsame `DataFrame` (e.g. via `write_parquet` or `collect`) without first\ncloning it.\n\nSince the method only needs `\u0026LogicalPlan` (which it forwards to\n`SessionState::create_physical_plan`), there is no reason to take\nownership. Changing the signature to `\u0026self` makes the common pattern of\n\"get plan for logging, then write/collect\" work naturally.\n\n\nAlso removes the now-unnecessary `self.clone()` in `DataFrame::cache`\nthat was introduced for the same reason.\n\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\nChanging `self` to `\u0026self`\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nYes\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: xanderbailey \u003cxanderbailey@users.noreply.github.com\u003e"
    },
    {
      "commit": "c17c87c575be916c6501df8a588e3c2614a9dc6f",
      "tree": "aa0f5eeff791eee18a4db3329d98190c0a581c39",
      "parents": [
        "422129cf68d8307896950343ce95e22275185b9c"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Sat Apr 04 18:29:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 16:29:20 2026 +0000"
      },
      "message": "Eliminate redundant `ProjectionExec`s (#21333)\n\n## Which issue does this PR close?\n\n\n## Rationale for this change\n\n\n## What changes are included in this PR?\n\n\n## How are these changes tested?\n\n- All existing sqllogictests pass (419 files) including TPC-H\n- Updated test expectations to reflect eliminated `ProjectionExec` nodes\n- Net reduction of 72 lines across test files (fewer plan operators)\n\n## Are there any user-facing changes?\n\nNo, only more efficient plans\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "422129cf68d8307896950343ce95e22275185b9c",
      "tree": "2b1845cfa930616c526703da33c3fc9411a4beb2",
      "parents": [
        "587f4c0c74350769c71a67bf3bb80d0917ec24e4"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Sat Apr 04 17:35:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 15:35:53 2026 +0000"
      },
      "message": "Use ParquetMetaDataPushDecoder instead of ParquetMetaDataReader (#21357)\n\n## Which issue does this PR close?\n\n- Closes #20856.\n\n## Rationale for this change\n\nReplace pull-based `ParquetMetaDataReader` with push-based\n`ParquetMetaDataPushDecoder`, which decouples IO from decoding. We don\u0027t\nactually do this in this PR, just use the different API to make it more\nobvious it is possible.\n\n## What changes are included in this PR?\n\n- Replace `ParquetMetaDataReader` with `ParquetMetaDataPushDecoder` \n\n## Are these changes tested?\n\nCovered by existing tests — this is a behavioral-equivalent replacement\nof the metadata reading path.\n\n## Are there any user-facing changes?\n\nNo user-facing API changes.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "587f4c0c74350769c71a67bf3bb80d0917ec24e4",
      "tree": "428aeeefe6c31c0504ff51fc0dc192a08cc8bf36",
      "parents": [
        "3d2e6b2fd096a17f74224fcccccb4cedd1e38a82"
      ],
      "author": {
        "name": "UBarney",
        "email": "lvlongxiang1994@gmail.com",
        "time": "Sat Apr 04 18:00:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 10:00:34 2026 +0000"
      },
      "message": "feat: support GroupsAccumulator for first_value and last_value with string/binary types (#21090)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes https://github.com/apache/datafusion/issues/17899.\n\n## Rationale for this change\n```\n┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n┃ Query     ┃        main ┃ first_val_group_acc ┃        Change ┃\n┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n│ QQuery 0  │   872.01 ms │           904.35 ms │     no change │\n│ QQuery 1  │   156.37 ms │           164.83 ms │  1.05x slower │\n│ QQuery 2  │   448.58 ms │           497.05 ms │  1.11x slower │\n│ QQuery 3  │   233.99 ms │           274.10 ms │  1.17x slower │\n│ QQuery 4  │  1448.99 ms │          1556.95 ms │  1.07x slower │\n│ QQuery 5  │ 10816.83 ms │         11315.69 ms │     no change │\n│ QQuery 6  │  2053.16 ms │          2030.02 ms │     no change │\n│ QQuery 7  │  2154.74 ms │          2274.63 ms │  1.06x slower │\n│ QQuery 8  │   405.62 ms │           405.72 ms │     no change │\n│ QQuery 9  │ 17160.65 ms │          4167.34 ms │ +4.12x faster │\n│ QQuery 10 │  1206.03 ms │          1090.69 ms │ +1.11x faster │\n│ QQuery 11 │  2437.12 ms │          2446.51 ms │     no change │\n│ QQuery 12 │   331.27 ms │           317.73 ms │     no change │\n└───────────┴─────────────┴─────────────────────┴───────────────┘\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓\n┃ Benchmark Summary                  ┃            ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩\n│ Total Time (main)                  │ 39725.35ms │\n│ Total Time (first_val_group_acc)   │ 27445.62ms │\n│ Average Time (main)                │  3055.80ms │\n│ Average Time (first_val_group_acc) │  2111.20ms │\n│ Queries Faster                     │          2 │\n│ Queries Slower                     │          5 │\n│ Queries with No Change             │          6 │\n│ Queries with Failure               │          0 │\n└────────────────────────────────────┴────────────┘\n```\nPreviously, the `first_value` and `last_value` aggregate functions only\nsupported GroupsAccumulator for primitive types. For string or binary\ntypes (Utf8, LargeUtf8, Binary, etc.), they fell back to the slower\nrow-based Accumulator path.\n\nThis change implements a specialized state management for byte-based\ntypes, enabling high-performance grouped aggregation for strings and\nbinary data, especially when used with `ORDER BY`.\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n- New `ValueState` Trait: Abstracted the state management for\n`first_value` and `last_value` to support different storage backends.\n- `PrimitiveValueState` : Re-implemented the existing primitive handling\nusing the new trait.\n- `BytesValueState`: Added a new state implementation for Utf8,\nLargeUtf8, Utf8View, Binary, LargeBinary, and BinaryView. It\n     optimizes memory by reusing `Vec\u003cu8\u003e` buffers for group updates.\n- Refactored `FirstLastGroupsAccumulato`r: Migrated the accumulator to\nuse the generic ValueState trait, allowing it to handle both primitive\nand byte types uniformly.\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\nYES\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "3d2e6b2fd096a17f74224fcccccb4cedd1e38a82",
      "tree": "6307ae3abeaeacf69cc8787ff1cc8c94d64fc61b",
      "parents": [
        "6c5e241e6298e70077259b3a12840c3adab3c810"
      ],
      "author": {
        "name": "theirix",
        "email": "theirix@gmail.com",
        "time": "Sat Apr 04 07:53:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 06:53:27 2026 +0000"
      },
      "message": "fix: binary string concat (#20787)\n\n## Which issue does this PR close?\n\n- Closes #12709.\n\n## Rationale for this change\n\nThere is no support for concatenating binary strings.\n\nThere are two ways:\n1. Cast binaries to text and then concatenate text type (most common\nbehaviour across DBs as discussed in the ticket)\n2. Concatenate binaries and provide binary type (only for Spark)\n\nThis PR goes with a way (1). We could customise the operator/UDF\nper-dialect, but it is not currently supported.\n\n## What changes are included in this PR?\n\n- Support binary concatenation via a pipe operator\n- Support binary concatenation in `concat` UDF\n\n## Are these changes tested?\n\nAdded SLT tests\n\n## Are there any user-facing changes?\n\nNo\n\n---------\n\nCo-authored-by: Siew Kam Onn \u003ckosiew@gmail.com\u003e"
    },
    {
      "commit": "6c5e241e6298e70077259b3a12840c3adab3c810",
      "tree": "e70a63eaec20609ed60f9ce4120a92fda4c9308d",
      "parents": [
        "e1c54531f2136373be19ef348f2f0cc87b1afe91"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Sat Apr 04 14:48:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 06:48:24 2026 +0000"
      },
      "message": "Skip probe-side consumption when hash join build side is empty (#21068)\n\n## Which issue does this PR close?\n\n* Closes #20492.\n\n## Rationale for this change\n\n`HashJoinExec` currently continues polling and consuming the probe side\neven after the build side has completed with zero rows.\n\nFor join types whose output is guaranteed to be empty when the build\nside is empty, this work is unnecessary. In practice, it can trigger\nlarge avoidable scans and extra compute despite producing no output.\nThis is especially costly for cases such as INNER, LEFT, LEFT SEMI, LEFT\nANTI, LEFT MARK, and RIGHT SEMI joins.\n\nThis change makes the stream state machine aware of that condition so\nexecution can terminate as soon as the build side is known to be empty\nand no probe rows are needed to determine the final result.\n\nThe change also preserves the existing behavior for join types that\nstill require probe-side rows even when the build side is empty, such as\nRIGHT, FULL, RIGHT ANTI, and RIGHT MARK joins.\n\n## What changes are included in this PR?\n\n* Added `JoinType::empty_build_side_produces_empty_result` to centralize\nlogic determining when an empty build side guarantees empty output.\n* Updated `HashJoinStream` state transitions to:\n\n* Skip transitioning to `FetchProbeBatch` when the build side is empty\nand output is deterministically empty.\n  * Immediately complete the stream in such cases.\n* Refactored logic in `build_batch_empty_build_side` to reuse the new\nhelper method and simplify match branches.\n* Ensured probe-side consumption still occurs for join types that\nrequire probe rows (e.g., RIGHT, FULL).\n* Added helper `state_after_build_ready` to unify post-build decision\nlogic.\n* Introduced reusable helper for constructing hash joins with dynamic\nfilters in tests.\n\n\n## Are these changes tested?\n\nYes, comprehensive tests have been added:\n\n* Verified that probe side is **not consumed** when:\n\n  * Build side is empty\n  * Join type guarantees empty output\n* Verified that probe side **is still consumed** when required by join\nsemantics (e.g., RIGHT, FULL joins)\n* Covered both filtered and non-filtered joins\n* Added tests ensuring correct behavior with dynamic filters\n* Added regression test ensuring correct behavior after partition bounds\nreporting\n\nThese tests validate both correctness and the intended optimization\nbehavior.\n\n\n## Are there any user-facing changes?\n\nNo API changes.\n\nHowever, this introduces a performance optimization:\n\n* Queries involving joins with empty build sides may complete\nsignificantly faster\n* Reduced unnecessary IO and compute\n\nNo behavioral changes in query results.\n\n\n## LLM-generated code disclosure\n\nThis PR includes LLM-generated code and comments. All LLM-generated\ncontent has been manually reviewed and tested."
    },
    {
      "commit": "e1c54531f2136373be19ef348f2f0cc87b1afe91",
      "tree": "1bbff10c7ec59c989995cc28bea725454326bceb",
      "parents": [
        "78cfc158e95039d9bb112d8512ab0a613a2620d3"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Apr 03 18:41:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 22:41:55 2026 +0000"
      },
      "message": "Split FileStreamMetrics into its own module (#21340)\n\n## Which issue does this PR close?\n\n- part of https://github.com/apache/datafusion/issues/20529\n- Broken out of https://github.com/apache/datafusion/pull/20820\n\n\n## Rationale for this change\n\n@Dandandan, @adriangb and I are in the process of significantly\nreworking how FileStream works internally (morsels!)\n\nAs the FileStream will get more complicated, it needs a better structure\nthan one giant module to ensure we can work with it. I am trying to do\nthis as incremental PRs to keep review burden low\n\n## What changes are included in this PR?\n\n1. Move FileStreamMetrics to its own module\n\n## Are these changes tested?\n\nYes by CI\n\n## Are there any user-facing changes?\n\nNo, just internal code motion"
    },
    {
      "commit": "78cfc158e95039d9bb112d8512ab0a613a2620d3",
      "tree": "a6ab62af87aad99d722c66d26ae4e98272b7a988",
      "parents": [
        "069925d6f512632c9812b04dc6366c3792846eef"
      ],
      "author": {
        "name": "Marko Grujic",
        "email": "markoog@gmail.com",
        "time": "Fri Apr 03 23:25:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 21:25:22 2026 +0000"
      },
      "message": "fix: use spill writer\u0027s schema instead of the first batch schema for spill files (#21293)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #21292.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n`InProgressSpillFile` will use the first batch schema when it has no\nwriter, which could have different nullability from the subsequent\nbatches (e.g. due to union-ing a literal projection and a table column\nprojection). This can then lead to a panic in `sort_batch`.\n\n`InProgressSpillFile` already has access to the canonical schema that\nthe spill file should have (`self.spill_writer.schema()`).\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\nSingle line fix: instead of using the first batch schema for the spill\nfile schema, use the spill_writer\u0027s schema instead.\n\nThe rest of the changes are two new tests.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes, two new tests are added.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "069925d6f512632c9812b04dc6366c3792846eef",
      "tree": "c19926419046d59e7c70937133d55371c4a777b3",
      "parents": [
        "d143bfa95e7832407017d3e33e063039aa2b9b4a"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Fri Apr 03 22:20:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 21:20:34 2026 +0000"
      },
      "message": "perf: Merge Precision in-place (#21219)\n\n## Which issue does this PR close?\n \nFollow up of #20768.\n\n\n## Rationale for this change\n\n`Precision::min/max` allocates a lot of new `ScalarValues`, and it can\nbe done in place.\nWhile running the `sql_planner` benchmark, it seems like for clickbench\n`Statistics::try_merge_iter` is a significant part of the runtime, and\nthis PR improves that part by about 20-25% locally.\n\n## What changes are included in this PR?\n\nIntroduces a couple of of new internal functions to calculate the\nmin/max of a `Precision` in-place.\n\n## Are these changes tested?\n\nExisting general tests, and a few new unit tests.\n\n## Are there any user-facing changes?\n\nNone\n\n---------\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "d143bfa95e7832407017d3e33e063039aa2b9b4a",
      "tree": "ee9425a9e26b107d5e9738f22dcfad686a8f3798",
      "parents": [
        "0383a88a1c0e0d338d9b0ca35128ce2bb4658d3c"
      ],
      "author": {
        "name": "Subham Singhal",
        "email": "SubhamSinghal@users.noreply.github.com",
        "time": "Sat Apr 04 02:47:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 21:17:15 2026 +0000"
      },
      "message": "feat(spark): Adds spark round function (#21062)\n\n## What changes are included in this PR?\n\nAdds support for round spark function in data fusion.\n\n## Are these changes tested?\n\nyes, using UTs\n\n## Are there any user-facing changes?\n\nyes, adds new function.\n\n---------\n\nCo-authored-by: Subham Singhal \u003csubhamsinghal@Subhams-MacBook-Air.local\u003e\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "0383a88a1c0e0d338d9b0ca35128ce2bb4658d3c",
      "tree": "1e2d3cf4fcbc758b22e02e8959cd460e30b7f07e",
      "parents": [
        "fb85e35df238fb684855cb88287167a61a94efe7"
      ],
      "author": {
        "name": "Bhargava Vadlamani",
        "email": "11091419+coderfender@users.noreply.github.com",
        "time": "Fri Apr 03 14:17:04 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 21:17:04 2026 +0000"
      },
      "message": "feat: spark compatible float to timestamp cast with ANSI support (#21212)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "fb85e35df238fb684855cb88287167a61a94efe7",
      "tree": "6431ef74746b2bcaedc8414e5e5e61b162e0a896",
      "parents": [
        "777ecb812c46bc6ec29dd9989925b3620ee8ed6a"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Fri Apr 03 16:57:36 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 20:57:36 2026 +0000"
      },
      "message": "fix: Prefer numeric in type coercion for comparisons (#20426)\n\n## Which issue does this PR close?\n\n- Closes #15161.\n\n## Rationale for this change\n\nIn a comparison between a numeric column and a string literal (e.g.,\n`WHERE int_col \u003c \u002710\u0027`), we previously coerced the numeric column to be\na string type. This resulted in doing a lexicographic comparison, which\nresults in incorrect query results.\n\nInstead, we split type coercion into two situations: type coercion for\ncomparisons (including `IN` lists, `BETWEEN`, and `CASE WHEN`), where we\nwant string-\u003enumeric coercion, and type coercion for places like `UNION`\nor `CASE ... THEN/ELSE`, where DataFusion\u0027s traditional behavior has\nbeen to tolerate type mismatching by coercing values to strings.\n\nHere is a (not necessarily exhaustive) summary of the behavioral changes\n(old -\u003e new):\n\n```\n  Comparisons (\u003d, \u003c, \u003e, etc.):\n    float_col \u003d \u00275\u0027      : string (wrong: \u00275\u0027!\u003d\u00275.0\u0027)  -\u003e numeric\n    int_col \u003e \u0027100\u0027      : string (wrong: \u0027325\u0027\u003c\u0027100\u0027) -\u003e numeric\n    int_col \u003d \u0027hello\u0027    : string, always false        -\u003e cast error\n    int_col \u003d \u0027\u0027         : string, always false        -\u003e cast error\n    int_col \u003d \u002799.99\u0027    : string, always false        -\u003e cast error\n    Dict(Int) \u003d \u00275\u0027      : string                      -\u003e numeric\n    REE(Int) \u003d \u00275\u0027       : string                      -\u003e numeric\n    struct(int)\u003dstruct(str): int field to Utf8  -\u003e str field to int\n\n  IN lists:\n    float_col IN (\u00271.0\u0027) : string (wrong: \u00271.0\u0027!\u003d\u00271\u0027) -\u003e numeric\n    str_col IN (\u0027a\u0027, 1)  : coerce to Utf8       -\u003e coerce to Int64\n\n  CASE:\n    CASE str WHEN float  : coerce to Utf8       -\u003e coerce to Float\n\n  LIKE / regex:\n    Dict(Int) LIKE \u0027%5%\u0027 : coerce to Utf8       -\u003e error (matches int)\n    REE(Int) LIKE \u0027%5%\u0027  : coerce to Utf8       -\u003e error (matches int)\n    Dict(Int) ~ \u00275\u0027      : coerce to Utf8       -\u003e error (matches int)\n    REE(Int) ~ \u00275\u0027       : error (no REE)       -\u003e error (REE added)\n    REE(Utf8) ~ \u00275\u0027      : error (no REE)       -\u003e works (REE added)\n```\n\n## What changes are included in this PR?\n\n* Update `comparison_coercion` to coerce strings to numerics\n* Remove previous `comparison_coercion_numeric` function\n* Add a new function, `type_union_coercion`, and use it when appropriate\n* Add support for REE types with regexp operators (this was unsupported\nfor no good reason I can see)\n* Add unit and SLT tests for new coercion behavior\n* Update existing SLT tests for changes in coercion behavior\n* Fix the ClickBench unparser tests to avoid comparing int fields with\nnon-numeric string literals\n\n## Are these changes tested?\n\nYes. New tests added, existing tests pass.\n\n## Are there any user-facing changes?\n\nYes, see table above. In most cases the new behavior should be more\nsensible and less error-prone, but it will likely break some user code.\n\n---------\n\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "777ecb812c46bc6ec29dd9989925b3620ee8ed6a",
      "tree": "b73cae3705752e9ad56927f3cb7b8b3204e324bd",
      "parents": [
        "89f816ac29bf4834d30731ebaca83f66ecf64c79"
      ],
      "author": {
        "name": "Oleks V",
        "email": "comphead@users.noreply.github.com",
        "time": "Fri Apr 03 12:42:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 19:42:56 2026 +0000"
      },
      "message": "chore: Fix clippy and CI (#21287)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "89f816ac29bf4834d30731ebaca83f66ecf64c79",
      "tree": "e5baab737ef44877589760b75eee256e2d0c3552",
      "parents": [
        "3f475b1ce242657e09b194f4cd12a30a6fa02d84"
      ],
      "author": {
        "name": "Sergey Zhukov",
        "email": "62326549+cj-zhukov@users.noreply.github.com",
        "time": "Fri Apr 03 21:48:04 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 17:48:04 2026 +0000"
      },
      "message": "Disallow order by within ordered-set aggregate functions argument lists (#20421)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #https://github.com/apache/datafusion/issues/18281.\n\n## Rationale for this change\nThis PR fixes incorrect handling of ordered-set aggregate syntax.\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n- Updated `datafusion/sql/src/expr/function.rs` to return a planning\nerror when `ORDER BY` is used inline\n- Added test coverage in\n`datafusion/sqllogictest/test_files/aggregate.slt` to ensure these\ninvalid forms now return a syntax/planning error\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nYes, these changes are tested.\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nYes - this is a public API change.\nThis query:\n```\nselect quantile_cont(col0, 0.75 order by col0)\nfrom values (1, 3), (2, 2), (3, 1) t(col0, col1);\n```\nnow returns an error: `ORDER BY must be specified using WITHIN GROUP`\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "3f475b1ce242657e09b194f4cd12a30a6fa02d84",
      "tree": "2c6af116f2912f94b92cdaf7f3cd687035e4c7fc",
      "parents": [
        "95630ed70b99d1bc48dc3caf13e60419c578adfc"
      ],
      "author": {
        "name": "Harrison Crosse",
        "email": "harrison@crosse.dev",
        "time": "Fri Apr 03 11:11:32 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 15:11:32 2026 +0000"
      },
      "message": "feat: make BatchPartitioner::partition_iter public (#21341)\n\n## Which issue does this PR close?\n\n- Closes #21311.\n\n## Rationale for this change\n\n`BatchPartitioner::partition_iter` is already used internally as the\ncore implementation behind the public `partition` method, and was\nintentionally factored out to support both sync and async consumption\npatterns. However, since it\u0027s private, downstream crates like Ballista\ncan\u0027t use the iterator directly and are forced to run both CPU-bound\npartitioning and I/O together in a sync closure.\n\n## What changes are included in this PR?\n\nChanged `partition_iter` visibility from private to public.\n\n## Are these changes tested?\n\nThe existing tests for `BatchPartitioner` cover `partition_iter`\nindirectly through the `partition` method, which delegates to it. No\nbehavioral change was made.\n\n## Are there any user-facing changes?\n\n`BatchPartitioner::partition_iter` is now part of the public API. This\nis a purely additive change with no breaking impact.\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "95630ed70b99d1bc48dc3caf13e60419c578adfc",
      "tree": "63c7cb62b1560bce4d432efa54379e26eff9736c",
      "parents": [
        "dd8760d5a958d1b58b969d22ae634f98d51caef9"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Fri Apr 03 16:07:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 15:07:51 2026 +0000"
      },
      "message": "No merge group for rust.yml yet (#21343)\n\n- Related to\nhttps://github.com/apache/datafusion/pull/21295#issuecomment-4183528068\n\n- Follow on to https://github.com/apache/datafusion/pull/21239\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "dd8760d5a958d1b58b969d22ae634f98d51caef9",
      "tree": "6ed1bca702c732ea7d652980278b58f78c463e00",
      "parents": [
        "a89b527843133aaaefd6544ec7be8b9dbee00b2c"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Fri Apr 03 09:31:37 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 13:31:37 2026 +0000"
      },
      "message": "chore: remove as_any from ExecutionPlan (#21263)\n\n## Which issue does this PR close?\n\nThis is a follow on to #20812 and #21209 but treats `ExecutionPlan`.\n\n## Rationale for this change\n\nThis PR reduces the amount of boilerplate code that users need to write\nfor execution plans.\n\n## What changes are included in this PR?\n\nNow that we have [trait\nupcasting](https://blog.rust-lang.org/2025/04/03/Rust-1.86.0/) since\nrust 1.86, we no longer need every implementation of these functions to\nhave the as_any function that returns \u0026self. This PR makes Any an\nsupertrait and makes the appropriate casts when necessary.\n\nI have also implemented functions `is` and `downcast_ref` on the trait\nobject for ExecutionPlan and applied this same pattern to the udf, udaf,\nand udwf implementations. This allows for a clean downcasting and type\nchecking.\n\n## Are these changes tested?\n\nExisting unit tests.\n\n## Are there any user-facing changes?\n\nYes, the users simply need to remove the `as_any` function. The upgrade\nguide is updated.\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a89b527843133aaaefd6544ec7be8b9dbee00b2c",
      "tree": "e7ca99faefab118a8d539785c574e4bf1f606b46",
      "parents": [
        "5b0938de9131eb38e4af2d4c9442e1ab8929add2"
      ],
      "author": {
        "name": "Jonathan Chen",
        "email": "chenleejonathan@gmail.com",
        "time": "Fri Apr 03 08:15:11 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 13:15:11 2026 +0000"
      },
      "message": "feat: Use NDV for equality filter selectivity calculation (#20789)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Part of #20766 .\n\n## Rationale for this change\nUsed NDV for equality filter selectivity calculation. \n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\nCheck if it is equality filter, and selectivity will be calculated using\n(1/NDV)\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "5b0938de9131eb38e4af2d4c9442e1ab8929add2",
      "tree": "b86806399737bac95346463ae6daa10b70b2443f",
      "parents": [
        "1e93a67bd0f24aa9c92a1d0c680410051019eece"
      ],
      "author": {
        "name": "Sergei Grebnov",
        "email": "sergei.grebnov@gmail.com",
        "time": "Fri Apr 03 15:58:12 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 12:58:12 2026 +0000"
      },
      "message": "fix(unparser): use to_rfc3339 for default TIMESTAMPTZ formatting (#21295)\n\n## Which issue does this PR close?\n\n- Closes #21294.\n\n## Rationale for this change\n\nThe default `timestamp_with_tz_to_string` uses\n`DateTime\u003cTz\u003e.to_string()`, which produces literals like `2025-09-15\n11:00:00 +00:00` that are not supported by multiple dialects (e.g.\nDuckDB, BigQuery). Switching to `to_rfc3339()` produces valid ISO 8601 /\nRFC 3339 strings (e.g. `2025-09-15T11:00:00+00:00`) that are broadly\ncompatible.\n\n## What changes are included in this PR?\n\n- Changed the default `Dialect::timestamp_with_tz_to_string`\nimplementation from `dt.to_string()` to `dt.to_rfc3339()`\n- Removed now-redundant `timestamp_with_tz_to_string` overrides from\n`DuckDBDialect` and `BigQueryDialect` (they produced equivalent RFC\n3339-compatible output via custom format strings)\n- Updated test expectations to match the new default format\n\n## Are these changes tested?\n\nYes, existing tests in `unparser::expr::tests` have been updated to\nreflect the new format.\n\nManually verifying updated format supported by `PostgreSQL`, `MySQL`,\n`SQLite`, `DuckDB` and `BigQuery`.\n\n## Are there any user-facing changes?\n\nYes — timestamp-with-timezone literals are now formatted as RFC 3339\n(`2025-09-15T11:00:00+00:00`) instead of the previous `Display` format\n(`2025-09-15 11:00:00 +00:00`). Dialects that need a different format\ncan still override `timestamp_with_tz_to_string`."
    },
    {
      "commit": "1e93a67bd0f24aa9c92a1d0c680410051019eece",
      "tree": "bd28990db2a8e665a7ceb8ff70828e1864c37aa0",
      "parents": [
        "18af5189e212e681db5510bc08b7d24e85a69dd2"
      ],
      "author": {
        "name": "Subham Singhal",
        "email": "SubhamSinghal@users.noreply.github.com",
        "time": "Fri Apr 03 09:49:21 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 04:19:21 2026 +0000"
      },
      "message": "Adds INList and Between expr to skip outer join (#21303)\n\n## Which issue does this PR close?\n\nEliminateOuterJoin does not recognize **InList** and **Between** as\nnull-rejecting expressions\n\n- Closes https://github.com/apache/datafusion/issues/21302\n\n## Rationale for this change\nThe EliminateOuterJoin optimizer rule converts outer joins to inner\njoins when WHERE clause predicates reject null rows from the nullable\nside. However, extract_non_nullable_columns only recognizes a limited\nset of expression types (comparisons, AND/OR, NOT, IS NOT NULL,\nCAST/TRY_CAST) and falls through to a no-op for all others. This means\ncommon null-rejecting expressions like IN and BETWEEN are not\nrecognized, causing outer joins to be preserved unnecessarily.\n\n## What changes are included in this PR?\nAdded `Expr::InList` and `Expr::Between` handling to\nextract_non_nullable_columns in eliminate_outer_join.rs. Both\nexpressions are null-rejecting on their input column — if the input is\nNULL, the result is always NULL regardless of the list/range contents.\n\n## Are these changes tested?\nYes, 8 new unit tests added\n\n## Are there any user-facing changes?\nNo API changes\n\n---------\n\nCo-authored-by: Subham Singhal \u003csubhamsinghal@Subhams-MacBook-Air.local\u003e"
    },
    {
      "commit": "18af5189e212e681db5510bc08b7d24e85a69dd2",
      "tree": "6b0612b2f5014eaecf556ec32116ba19ddd93d0f",
      "parents": [
        "e5358b7e535f199adb29c684fb4d8bef86d0975e"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Thu Apr 02 22:43:03 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 21:43:03 2026 +0000"
      },
      "message": "Merge queue: make dev checks required + add .asf.yaml validation (#21239)\n\nRelated to https://github.com/apache/datafusion/issues/6880\n\nFollow up on https://github.com/apache/datafusion/pull/17538\n\nBringing back the merge queues 🤞🏻\nLast time it was painful because: \n- there was no `.asf.yaml` validation\n- if something goes wrong, we weren\u0027t able to force merge without the\ninfra team\n\nthis PR solved the first problem. As for the second one, I have the\npermissions to bypass so should be able to quickly revert if something\never goes bad\n\n\u003cimg width\u003d\"830\" height\u003d\"151\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/62fb2bb5-44d8-4aae-a006-188d96728140\"\n/\u003e\n\n\nCheck result:\nhttps://github.com/apache/datafusion/actions/runs/23715604583/job/69082077684?pr\u003d21239\n\nI also checked that CI will keep working by\n[merging](https://github.com/apache/datafusion-sandbox/pull/197) this\ninto our sandbox and then opening and merging [a dummy\npr](https://github.com/apache/datafusion-sandbox/pull/204)\n\nFor now, bringing just the basic checks (in dev.yml). Will do rust.yml\nseparately if everything goes smoothly after this one is merged"
    },
    {
      "commit": "e5358b7e535f199adb29c684fb4d8bef86d0975e",
      "tree": "dba7ac0e9b740dbd8d62d2935412988f8bcc1d43",
      "parents": [
        "a76751187d075f7ab63d41d3045a259cfb900715"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 14:23:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 21:23:48 2026 +0000"
      },
      "message": "chore(deps): bump object_store from 0.13.1 to 0.13.2 (#21275)\n\nBumps [object_store](https://github.com/apache/arrow-rs-object-store)\nfrom 0.13.1 to 0.13.2.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/blob/main/CHANGELOG-old.md\"\u003eobject_store\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch1\u003eHistorical Changelog\u003c/h1\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/7a65b75b0d26fd8a282999462cb7030fb85fdcc3\"\u003e\u003ccode\u003e7a65b75\u003c/code\u003e\u003c/a\u003e\nchore: prepare \u003ccode\u003e0.13.2\u003c/code\u003e release (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/d22f7f91d576ab7b2a12750751a76d30018cb12d\"\u003e\u003ccode\u003ed22f7f9\u003c/code\u003e\u003c/a\u003e\nfix: missing 5xx error body when retry exhausted (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/618\"\u003e#618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/ebaee78c8bd05235b4ceb2a5125a125faae5da86\"\u003e\u003ccode\u003eebaee78\u003c/code\u003e\u003c/a\u003e\nSupport --xa-s3 suffix for S3 Express One Zone bucket access points (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/663\"\u003e#663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/7ded938312299ccc1ca517e34fe34326d8426ebb\"\u003e\u003ccode\u003e7ded938\u003c/code\u003e\u003c/a\u003e\nReplace \u003ccode\u003ePath::child\u003c/code\u003e with \u003ccode\u003ePath::join\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/666\"\u003e#666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/bdcac43fc637ac89cc80f18f4e16b3fb66fd0ec8\"\u003e\u003ccode\u003ebdcac43\u003c/code\u003e\u003c/a\u003e\nfeat: Add support for AWS_ENDPOINT_URL_S3 environment variable (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/590\"\u003e#590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/ca15c63f652e1c5c2e776231ae77d08bb46375ea\"\u003e\u003ccode\u003eca15c63\u003c/code\u003e\u003c/a\u003e\nImplement Clone for local and memory stores (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/41d32428cd625e4b86d3411b4f06a0dff7ecab47\"\u003e\u003ccode\u003e41d3242\u003c/code\u003e\u003c/a\u003e\ndocs: clarify \u003ccode\u003eClone\u003c/code\u003e behavior (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/62592027cb7d33ed843bc14fb77d7fc32f13ace5\"\u003e\u003ccode\u003e6259202\u003c/code\u003e\u003c/a\u003e\nUnify \u003ccode\u003efrom_env\u003c/code\u003e behaviours (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/66e640d1ba7b79d878e9423924ed5bff4f321b75\"\u003e\u003ccode\u003e66e640d\u003c/code\u003e\u003c/a\u003e\nSwitch TokenCache to RWLock (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/commit/907653e46232edb3a635969bf288324b68d62cdc\"\u003e\u003ccode\u003e907653e\u003c/code\u003e\u003c/a\u003e\ndocs: add examples to the aws docs where appropriate (\u003ca\nhref\u003d\"https://redirect.github.com/apache/arrow-rs-object-store/issues/651\"\u003e#651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/apache/arrow-rs-object-store/compare/v0.13.1...v0.13.2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Oleks V \u003ccomphead@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "a76751187d075f7ab63d41d3045a259cfb900715",
      "tree": "0b2ced7b6278dafa6de3c6e4c759de668961b2f4",
      "parents": [
        "d86874ed3305e21804d7443f670b3b53b6524bae"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Thu Apr 02 17:21:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 21:21:13 2026 +0000"
      },
      "message": "feat: Complete basic `LATERAL JOIN` functionality (#21202)\n\n## Which issue does this PR close?\n\n- Closes #10048.\n\n## Rationale for this change\n\nLateral joins are a commonly used SQL feature that allows the right-side\njoin relation to access columns from the left-side of the join. Like\ncorrelated subqueries, two popular evaluation strategies are nested\nloops (re-evaluate the right-side of the join for each row of the left\njoin input) and decorrelation (rewrite the right join input to remove\nthe correlation, converting the lateral join into a standard join with\nthe correlation predicates as join conditions). Decorrelation is\ntypically much faster because the right side is evaluated once rather\nthan re-executed for every row of the left input.\n\nPreviously, DataFusion had some support for evaluating lateral joins via\ndecorrelation, but it was not functional. This PR fixes and extends the\nexisting code to make basic lateral joins functional, although several\nnotable TODOs remain. This PR also adds a suite of SLT tests for lateral\njoins (derived from the DuckDB and Postgres tests), covering both\nimplemented and to-be-implemented behavior.\n\nRemaining extensions:\n* LATERAL subqueries with HAVING clauses (#21198)\n* LEFT JOIN LATERAL (#21199)\n* LATERAL subqueries with outer relation references outside the WHERE\nclause (#21201)\n\n## What changes are included in this PR?\n\n* Match query structure properly (unwrap `SubqueryAlias`) so that\nlateral subqueries are recognized properly, even if they have aliases\n* Handle nested LATERAL clauses; each LATERAL can only reference sibling\nouter relations\n* Properly handle \"the count bug\", following similar logic to what we do\nfor this case with correlated subqueries\n* Remove a `todo!` panic in the physical planner if a `Subquery` node is\nseen; these just represent a subquery structure we aren\u0027t able to\ndecorrelate yet\n* Properly raise an error and bail out for LATERAL subqueries with\nHAVING clauses\n* Add SLT test suite for lateral joins (~33 queries), based in part on\nDuckDB and Postgres test suites\n* Update expected EXPLAIN output in various places\n* Add docs for `LATERAL JOIN`\n\n## Are these changes tested?\n\nYes; new tests added. I ran the test suite against DuckDB and confirmed\nthat we get the same results under DuckDB, except for cases where DuckDB\nsupports a class of lateral joins we don\u0027t support yet.\n\n## Are there any user-facing changes?\n\nYes; lateral joins now work for a wide swath of useful scenarios."
    },
    {
      "commit": "d86874ed3305e21804d7443f670b3b53b6524bae",
      "tree": "949d1054b13d07f4a0945ea77a6c8c886af4d3a0",
      "parents": [
        "c8aefab776ae4ec8c71d6e008ba11dec9e1182dd"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Fri Apr 03 00:17:06 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 21:17:06 2026 +0000"
      },
      "message": "[docs] add sql example to timestamp/datetime docs for time zone  (#21082)\n\n## Which issue does this PR close?\n- Closes #19104.\n\n## Rationale for this change\n#19104 explains but some datetime functions respect\n`execution.time_zone` config but there are no SQL examples for them.\nThis PR adds it and also missing sql example for `date_part`, `extract`\nand `date_trunc`\n\n## What changes are included in this PR?\nsql example changes and generated doc\n\n## Are these changes tested?\n\n## Are there any user-facing changes?"
    },
    {
      "commit": "c8aefab776ae4ec8c71d6e008ba11dec9e1182dd",
      "tree": "dfcf1886e9276b5c97c42894292bf456f5c63bba",
      "parents": [
        "d972b784a35472b0eb2f4eb88370e5ae234a62a3"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Apr 02 13:51:45 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 17:51:45 2026 +0000"
      },
      "message": "refactor: Split Parquet BloomFilter CPU and IO into separate states (#21285)\n\n## Which issue does this PR close?\n\n- part of https://github.com/apache/datafusion/issues/20529\n- Broken out of https://github.com/apache/datafusion/pull/20820\n\n## Rationale for this change\n\nWe are try to be explicit about CPU and IO in the Parquet reader,\nhowever, the code for applying bloom filters still did both CPU and IO\nin the same future\n\n## What changes are included in this PR?\n1. Split the states for IO and CPU work when applying bloom filters\n\n## Are these changes tested?\n\nFunctionally by existing tests\n\nI also ran performance tests and they didn\u0027t show any substantial\nperformance change\n\n## Are there any user-facing changes?\n\nNo, this is internal code reorganization"
    },
    {
      "commit": "d972b784a35472b0eb2f4eb88370e5ae234a62a3",
      "tree": "562c719af51298c5022e64ee298ef39483595fbd",
      "parents": [
        "537e84f167e28bb68573542d8bd02f81e6e99c62"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Apr 02 13:49:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 17:49:20 2026 +0000"
      },
      "message": "Add `FileStreamBuilder` for creating FileStreams (#21261)\n\n## Which issue does this PR close?\n\n- part of https://github.com/apache/datafusion/issues/20529\n- Broken out of https://github.com/apache/datafusion/pull/20820\n\n## Rationale for this change\n\n@Dandandan and I are in the process of significantly reworking how\nFileStream works internally (morsels!)\n\nTo support this, I want to get the code ready for a reorganization and\nminimize the diffs\n\n## What changes are included in this PR?\n\n1. Add `FileStreamBuilder`\n2. Deprecate FileStream::new\n3. Promote file_stream to a module\n\n## Are these changes tested?\n\nYes by existing CI.\n\n## Are there any user-facing changes?\n\nCertain user facing API code that uses FileStream will need to use\n`FileStreamBuilder` rather than directly construct a `FileStream`"
    },
    {
      "commit": "537e84f167e28bb68573542d8bd02f81e6e99c62",
      "tree": "0b792677a5b1ac254cb1b85138e2410dd5d0762a",
      "parents": [
        "c457c0b7ddb839c37905b67936d1db37ecd20a6c"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Apr 02 11:35:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 15:35:58 2026 +0000"
      },
      "message": "[docs] Add weekly sync details to contributor communication guide (#21298)\n\n## Which issue does this PR close?\n\n- N/A (documentation update)\n\n## Rationale for this change\n\nThe contributor communication guide did not mention the weekly\nDataFusion community video sync. Adding the meeting link and shared\nnotes document makes it easier for contributors to find the recurring\nmeeting information from the docs.\n\n## What changes are included in this PR?\n\n- Add a `Weekly Video Call Syncs` section to the contributor\ncommunication guide\n- Include the Google Meet link for the weekly sync\n- Include the shared meeting notes and agenda document link\n\n## Are these changes tested?\n\nThis is a documentation-only change. \n\n## Are there any user-facing changes?\n\nYes. The contributor documentation now includes the weekly community\nvideo sync information."
    },
    {
      "commit": "c457c0b7ddb839c37905b67936d1db37ecd20a6c",
      "tree": "0674fcd4bcc74ff40c3f3429d64d52c054987e85",
      "parents": [
        "c931c89886997bf486b148c19f33e3e33a933349"
      ],
      "author": {
        "name": "Jonah Gao",
        "email": "jonahgao@msn.com",
        "time": "Thu Apr 02 23:10:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 15:10:19 2026 +0000"
      },
      "message": "chore: add `.claude/settings.local.json` to `.gitignore` (#21312)\n\n## Which issue does this PR close?\n\n  - N/A\n\n  ## Rationale for this change\n\n`.claude/settings.local.json` is a personal project-specific settings\nfile for Claude Code and should not be committed to the repo.\n\nRef: https://code.claude.com/docs/en/settings#available-scopes\n\u003cimg width\u003d\"700\" height\u003d\"270\" alt\u003d\"CleanShot 2026-04-02 at 10 41 12@2x\"\nsrc\u003d\"https://github.com/user-attachments/assets/57522960-3538-4d25-96a7-b6d4ec0e0bd0\"\n/\u003e\n\n  ## What changes are included in this PR?\n\n  Add `.claude/settings.local.json` to `.gitignore`.\n\n  ## Are these changes tested?\n\n  No code changes — only a `.gitignore` update.\n\n  ## Are there any user-facing changes?\n\n  No.\n\nCo-authored-by: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c931c89886997bf486b148c19f33e3e33a933349",
      "tree": "19d8aaf7da7bb8661c80af14bbba33c1083300c3",
      "parents": [
        "8b5c9b465dace58b0ea8d7b8b8f55f7730eeb610"
      ],
      "author": {
        "name": "Jayant Shrivastava",
        "email": "jshrivastava03@gmail.com",
        "time": "Thu Apr 02 09:52:46 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 13:52:46 2026 +0000"
      },
      "message": "ensure dynamic filters are correctly pushed down through aggregations (#21059)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/21065.\n\n## Rationale for this change\n\nIn plans such as the following, dynamic filters are not pushed down\nthrough the aggregation\n```\nCREATE TABLE data (a VARCHAR, ts TIMESTAMP, value DOUBLE)\n    AS VALUES\n      (\u0027h1\u0027, \u00272024-01-01T00:05:00\u0027, 1.0),\n      (\u0027h1\u0027, \u00272024-01-01T00:15:00\u0027, 2.0),\n      (\u0027h2\u0027, \u00272024-01-01T00:25:00\u0027, 3.0),\n      (\u0027h3\u0027, \u00272024-01-01T00:35:00\u0027, 4.0);\n\nSELECT * FROM contexts c\n  INNER JOIN (\n    SELECT a, date_bin(interval \u00271 hour\u0027, ts) AS bucket, min(value) AS min_val\n    FROM (SELECT value, a, ts FROM data)\n    GROUP BY a, date_bin(interval \u00271 hour\u0027, ts)\n  ) agg ON c.a \u003d agg.a;\n```\n\n```\n    HashJoinExec: mode\u003dAuto, join_type\u003dInner, on\u003d[(a@0, a@0)]\n      DataSourceExec: partitions\u003d1\n      ProjectionExec: [a@0, date_bin(1h, ts)@1 as bucket, min(value)@2 as min_val]\n        AggregateExec: mode\u003dFinalPartitioned, gby\u003d[a@0, date_bin(1h, ts)@1], aggr\u003d[min(value)]\n          AggregateExec: mode\u003dPartial, gby\u003d[a@1, date_bin(1h, ts@2)], aggr\u003d[min(value)]\n            ProjectionExec: [value@2, a@0, ts@1]        ← reorders columns\n              DataSourceExec: partitions\u003d1\n```\n\n## What changes are included in this PR?\n\n`AggregateExec::gather_filters_for_pushdown` compared parent filter\ncolumns (output schema indices) against grouping expression columns\n(input schema indices). When a `ProjectionExec` below the aggregate\nreorders columns, the index mismatch causes filters (such as HashJoin\ndynamic filters) to be incorrectly blocked.\n\nThis change fixes the column index mapping in\n`AggregateExec::gather_filters_for_pushdown`\n\n## Are these changes tested?\n\n- `test_pushdown_through_aggregate_with_reordered_input_columns` —\nfilter on grouping column with reordered input is pushed down\n-\n`test_pushdown_through_aggregate_with_reordered_input_no_pushdown_on_agg_result`\n— filter on aggregate result column is not pushed down\n- `test_pushdown_through_aggregate_grouping_sets_with_reordered_input` —\nGROUPING SETS: filter on common column pushed, filter on missing column\nblocked\n-\n`test_hashjoin_dynamic_filter_pushdown_through_aggregate_with_reordered_input`\n— HashJoin dynamic filter pushes through aggregate with reordered input\nand is populated with values after\n   execution\n  - All tests verified to fail without the fix\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "8b5c9b465dace58b0ea8d7b8b8f55f7730eeb610",
      "tree": "f6857690f8f946df6bd84e3d3448bf7dd548d32b",
      "parents": [
        "ba873e0d1c6847d8c83634dd60f319cb2f0434d1"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Thu Apr 02 20:57:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 12:57:25 2026 +0000"
      },
      "message": "feat: generate reversed-name data for sort pushdown benchmark (#21266)\n\n## Which issue does this PR close?\n\nRelated to https://github.com/apache/datafusion/issues/17348\nPrecursor to https://github.com/apache/datafusion/pull/21182\n\n## Rationale for this change\n\nThe sort pushdown benchmark (#21213) uses TPC-H data where file names\nhappen to match sort key order, so the optimization in #21182 shows no\ndifference vs. main\n([comment](https://github.com/apache/datafusion/pull/21182#issuecomment-4158740710)).\n\nThis PR generates custom benchmark data with **reversed file names** so\nthe sort pushdown optimizer must reorder files by statistics to achieve\nsort elimination.\n\n## What changes are included in this PR?\n\nUpdated `data_sort_pushdown` in `bench.sh` to use `tpchgen --parts\u003d3`\nand rename files:\n\n```\ntpchgen produces 3 sorted, non-overlapping parquet files:\n  lineitem.1.parquet: l_orderkey 1 ~ 2M        (lowest keys)\n  lineitem.2.parquet: l_orderkey 2M ~ 4M\n  lineitem.3.parquet: l_orderkey 4M ~ 6M       (highest keys)\n\nRenamed so alphabetical order is reversed vs key order:\n  a_part3.parquet → highest keys, sorts first alphabetically\n  b_part2.parquet\n  c_part1.parquet → lowest keys, sorts last alphabetically\n```\n\nNo datafusion-cli needed — just `tpchgen-cli` + `mv`.\n\n## Benchmark Results\n\nWith #21182 optimization (release build, 6M rows, single partition):\n\n**On main (no optimization)**: files read in alphabetical order\n`[a_part3, b_part2, c_part1]` → wrong order → SortExec stays\n\n**With optimization**: files reordered by statistics `[c_part1, b_part2,\na_part3]` → non-overlapping → SortExec eliminated\n\n| Query | Description | Main (ms) | PR #21182 (ms) | Speedup |\n|-------|-------------|-----------|----------------|---------|\n| Q1 | `ORDER BY ASC` (full scan) | 259 | 122 | **53%** |\n| Q2 | `ORDER BY ASC LIMIT 100` | 80 | 9 | **89%** |\n| Q3 | `SELECT * ORDER BY ASC` | 700 | 353 | **50%** |\n| Q4 | `SELECT * LIMIT 100` | 342 | 24 | **93%** |\n\nLIMIT queries show the biggest improvement because sort elimination +\nlimit pushdown means only the first ~100 rows are read before stopping.\n\n## Test plan\n\n- [x] `cargo clippy -p datafusion-benchmarks` — 0 warnings\n- [x] Local benchmark verified with reversed-name data\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)"
    },
    {
      "commit": "ba873e0d1c6847d8c83634dd60f319cb2f0434d1",
      "tree": "5e3124a473b258e54c61d245980120bcb94f05fe",
      "parents": [
        "2d5f016ddae3e52da36b3d535b2f6a967af5562c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 02 11:12:28 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 10:12:28 2026 +0000"
      },
      "message": "chore(deps): bump runs-on/action from 2.0.3 to 2.1.0 (#21134)\n\nBumps [runs-on/action](https://github.com/runs-on/action) from 2.0.3 to\n2.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/runs-on/action/releases\"\u003eruns-on/action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTest magic cache in container by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/13\"\u003eruns-on/action#13\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCost api URL change by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/18\"\u003eruns-on/action#18\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:wrench: Add volumeID to outputs by \u003ca\nhref\u003d\"https://github.com/afreyermuth98\"\u003e\u003ccode\u003e@​afreyermuth98\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/20\"\u003eruns-on/action#20\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAuto-start CloudWatch agent if not running by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/26\"\u003eruns-on/action#26\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate for node24 by \u003ca\nhref\u003d\"https://github.com/cfsnate\"\u003e\u003ccode\u003e@​cfsnate\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/29\"\u003eruns-on/action#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/afreyermuth98\"\u003e\u003ccode\u003e@​afreyermuth98\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/20\"\u003eruns-on/action#20\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/cfsnate\"\u003e\u003ccode\u003e@​cfsnate\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/29\"\u003eruns-on/action#29\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/runs-on/action/compare/v2.0.3...v2.1.0\"\u003ehttps://github.com/runs-on/action/compare/v2.0.3...v2.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/742bf56072eb4845a0f94b3394673e4903c90ff0\"\u003e\u003ccode\u003e742bf56\u003c/code\u003e\u003c/a\u003e\nbump to v2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/05a3cc7f91c60e9e63dfc6d7f1eb061d742013eb\"\u003e\u003ccode\u003e05a3cc7\u003c/code\u003e\u003c/a\u003e\nupdate for node24\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/4bd75c6cabfe307f831797585486f95a0ae12ed1\"\u003e\u003ccode\u003e4bd75c6\u003c/code\u003e\u003c/a\u003e\nAdd test for stopped CloudWatch agent\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/32975ab4a437ea1990d0a601a2b362d61cd9bbdb\"\u003e\u003ccode\u003e32975ab\u003c/code\u003e\u003c/a\u003e\ndist: rebuild binaries\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/9506a40ef6df1c2ad2ed034c889a086d40ad4cd8\"\u003e\u003ccode\u003e9506a40\u003c/code\u003e\u003c/a\u003e\nAuto-start CloudWatch agent if not running\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/b1d0648e7b2e66e91aa849741491949efa7e8f3d\"\u003e\u003ccode\u003eb1d0648\u003c/code\u003e\u003c/a\u003e\nRevert \u0026quot;dist\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/f8bceadbb5d3c4a3cf3b19e6b50c1fe75ad2a28b\"\u003e\u003ccode\u003ef8bcead\u003c/code\u003e\u003c/a\u003e\nRevert \u0026quot;:wrench: Add volumeID to outputs\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/6e50b45da7b756782af114b5ade7a074b2978b48\"\u003e\u003ccode\u003e6e50b45\u003c/code\u003e\u003c/a\u003e\ndist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/edafe5da55baad0adb2cc9da9661ed866daae8ff\"\u003e\u003ccode\u003eedafe5d\u003c/code\u003e\u003c/a\u003e\n:wrench: Add volumeID to outputs\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/c0e79b09746fec1c7d8314845627e62663b27aa2\"\u003e\u003ccode\u003ec0e79b0\u003c/code\u003e\u003c/a\u003e\nfix\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/runs-on/action/compare/cd2b598b0515d39d78c38a02d529db87d2196d1e...742bf56072eb4845a0f94b3394673e4903c90ff0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003druns-on/action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.0.3\u0026new-version\u003d2.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Dmitrii Blaginin \u003cdmitrii@blaginin.me\u003e"
    },
    {
      "commit": "2d5f016ddae3e52da36b3d535b2f6a967af5562c",
      "tree": "0bee3f7aaf4bc0d5b2350d0712efb43a897aac90",
      "parents": [
        "1e68674705b3146b9a48143827ccbc035e463686"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Thu Apr 02 13:22:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 05:22:10 2026 +0000"
      },
      "message": "feat: feature-gate `sqllogictests` datafusion-substrait behind optional \u0027substrait\u0027 feature (#21268)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/21269\n\n## Rationale for this change\n\n`datafusion-substrait` is a heavyweight dependency that most developers\nand users don\u0027t need. Making it optional saves compile time for the\ncommon case.\n\n## What changes are included in this PR?\n\n- `datafusion-substrait` is now an optional dependency in\n`datafusion-sqllogictest/Cargo.toml`\n- New `substrait` feature flag gates the dependency\n- `#[cfg(feature \u003d \"substrait\")]` gates the module, imports, and\n`run_test_file_substrait_round_trip` function\n- No-op fallback function returns an error when the feature is disabled\n- CI workflow updated to pass `--features substrait` for the round-trip\ntest\n\n## Are these changes tested?\n\n- Compiles without `substrait` feature (default)\n- Compiles with `--features substrait`\n- CI substrait round-trip test updated to enable the feature\n\n## Are there any user-facing changes?\n\nNo — this only affects the sqllogictest binary, not the datafusion\nlibrary itself. The substrait round-trip test requires `--features\nsubstrait` to run."
    },
    {
      "commit": "1e68674705b3146b9a48143827ccbc035e463686",
      "tree": "c967d142a3f05f44d57cbf038e869dfd54759a24",
      "parents": [
        "bc2b36cf56846e0c697b0f8b98619f346a72a9bf"
      ],
      "author": {
        "name": "Zhen Chen",
        "email": "czjourney@163.com",
        "time": "Thu Apr 02 03:57:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 19:57:34 2026 +0000"
      },
      "message": "doc: Add documentation explaining the behavior of `null` values ​​in struct comparisons (#21226)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\nDataFusion already supports tuple-like and `STRUCT` comparisons, but the\nuser-facing documentation did not clearly describe the current\ncomparison semantics, especially around lexicographical ordering and\n`NULL` handling. The `IN` documentation also did not explain tuple-like\nvalues.\n\n## What changes are included in this PR?\n\n- Added a short `STRUCT` comparison note to\n[struct_coercion.md](/Users/jensen/code/datafusion/docs/source/user-guide/sql/struct_coercion.md),\ndocumenting that:\n  - `STRUCT` values support standard comparison operators\n  - comparisons are lexicographical by field order\n  - `NULL` is ordered before non-`NULL`\n- Added minimal examples for `STRUCT` comparisons, including a `NULL`\nexample\n- Added a short note to\n[subqueries.md](/Users/jensen/code/datafusion/docs/source/user-guide/sql/subqueries.md)\nexplaining that tuple-like `IN` uses DataFusion\u0027s struct equality\nsemantics\n- Added a concrete example:\n  - `SELECT (7521, 30) IN ((7521, NULL));`\n  - result: `false`\n\n## Are these changes tested?\n\nNo new tests were added. This PR only updates documentation for existing\nbehavior, and the documented behavior is already covered by existing\ntuple/struct comparison and `IN` tests.\n\n## Are there any user-facing changes?\n\nYes. This PR updates the SQL user documentation to clarify the current\nsemantics of `STRUCT` comparisons and tuple-like `IN` expressions."
    },
    {
      "commit": "bc2b36cf56846e0c697b0f8b98619f346a72a9bf",
      "tree": "bf0b6d1a6d552e06c21e90ea9041b6cd0fa29b06",
      "parents": [
        "f3e8291ebd05bccc171797b73e5b3e1f7840eb4e"
      ],
      "author": {
        "name": "Zhen Chen",
        "email": "czjourney@163.com",
        "time": "Wed Apr 01 14:33:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 06:33:06 2026 +0000"
      },
      "message": "fix: `SELECT * EXCLUDE(...)` silently returns empty rows when all columns are excluded (#21259)\n\n## Which issue does this PR close?\n\n- Closes #21258.\n\n## Rationale for this change\n\nWhen `SELECT * EXCLUDE(...)` or `SELECT * EXCEPT(...)` excludes every\ncolumn in the schema, DataFusion silently produces rows with zero\ncolumns instead of failing at planning time. This is confusing and\ninconsistent with DuckDB, which raises a clear `Binder Error: SELECT\nlist is empty after resolving * expressions!` at planning time.\n\n## What changes are included in this PR?\n\n- In `project_with_validation` (builder.rs), after expanding all\n`Wildcard` and `QualifiedWildcard` expressions, added a check: if any\nwildcard was present **and** the resulting projection list is empty,\nreturn a `plan_err!` with the message `SELECT list is empty after\nresolving * expressions, the wildcard expanded to zero columns`.\n- Updated select.slt to change all existing \"zero-column wildcard\" test\ncases (previously `statement ok`) to `statement error` asserting the new\nerror message. Cases updated include bare `SELECT * EXCEPT(all_cols)`,\nwith `LIMIT`, `WHERE`, `GROUP BY`, `JOIN`, and window functions.\n\n## Are these changes tested?\n\nYes. The existing SQL logic tests in select.slt are updated to assert\nthe new planning error for all zero-column wildcard scenarios (`EXCLUDE`\nand `EXCEPT`, with various clauses). This covers:\n- `SELECT * EXCLUDE(a, b)` / `SELECT * EXCEPT(a, b, c, d)` on a plain\nscan\n- Combined with `LIMIT`, `WHERE`, `GROUP BY`, `JOIN`, and window\nfunctions\n- Qualified wildcards (`SELECT t.* EXCLUDE(...)`)\n\n## Are there any user-facing changes?\n\nYes. Queries that previously silently returned empty-column result sets\nvia `SELECT * EXCLUDE(...)` or `SELECT * EXCEPT(...)` when all columns\nwere excluded will now fail at planning time with:\n\n```\nDataFusion error: Error during planning: SELECT list is empty after resolving * expressions, the wildcard expanded to zero columns\n```"
    },
    {
      "commit": "f3e8291ebd05bccc171797b73e5b3e1f7840eb4e",
      "tree": "0ef1111b195fba43a099a090315e7edabf9ecbf0",
      "parents": [
        "e75ed5b42cffdb741eeace5762a9d705f22e3b2a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 16:08:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 20:08:21 2026 +0000"
      },
      "message": "chore(deps): bump the all-other-cargo-deps group across 1 directory with 7 updates (#21274)\n\nBumps the all-other-cargo-deps group with 7 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [insta](https://github.com/mitsuhiko/insta) | `1.46.3` | `1.47.2` |\n| [uuid](https://github.com/uuid-rs/uuid) | `1.22.0` | `1.23.0` |\n| [blake3](https://github.com/BLAKE3-team/BLAKE3) | `1.8.3` | `1.8.4` |\n|\n[unicode-segmentation](https://github.com/unicode-rs/unicode-segmentation)\n| `1.12.0` | `1.13.2` |\n| [postgres-types](https://github.com/rust-postgres/rust-postgres) |\n`0.2.12` | `0.2.13` |\n| [tokio-postgres](https://github.com/rust-postgres/rust-postgres) |\n`0.7.16` | `0.7.17` |\n| [wasm-bindgen-test](https://github.com/wasm-bindgen/wasm-bindgen) |\n`0.3.64` | `0.3.66` |\n\n\nUpdates `insta` from 1.46.3 to 1.47.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases\"\u003einsta\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.47.2\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore \u003ccode\u003eSend + Sync\u003c/code\u003e on \u003ccode\u003eSettings\u003c/code\u003e,\n\u003ccode\u003eRedactions\u003c/code\u003e, and \u003ccode\u003eRedaction\u003c/code\u003e by\nreverting the \u003ccode\u003eArc\u003c/code\u003e to \u003ccode\u003eRc\u003c/code\u003e change from 1.47.0,\nwhich was semver-breaking.\n\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/873\"\u003e#873\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/874\"\u003e#874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSend + Sync\u003c/code\u003e bounds to \u003ccode\u003eComparator\u003c/code\u003e trait\nfor consistency with\n\u003ccode\u003eArc\u003c/code\u003e-based storage. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/872\"\u003e#872\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd compile-time assertion to prevent future auto-trait\nregressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall cargo-insta 1.47.2\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang\u003d\"sh\"\u003e\u003ccode\u003ecurl --proto \u0027\u003dhttps\u0027 --tlsv1.2 -LsSf\nhttps://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-installer.sh\n| sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang\u003d\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm\nhttps://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-installer.ps1\n| iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload cargo-insta 1.47.2\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-aarch64-apple-darwin.tar.xz\"\u003ecargo-insta-aarch64-apple-darwin.tar.xz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-aarch64-apple-darwin.tar.xz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-apple-darwin.tar.xz\"\u003ecargo-insta-x86_64-apple-darwin.tar.xz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eIntel macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-apple-darwin.tar.xz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-pc-windows-msvc.zip\"\u003ecargo-insta-x86_64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-unknown-linux-gnu.tar.xz\"\u003ecargo-insta-x86_64-unknown-linux-gnu.tar.xz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-unknown-linux-gnu.tar.xz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-unknown-linux-musl.tar.xz\"\u003ecargo-insta-x86_64-unknown-linux-musl.tar.xz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 MUSL Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/releases/download/1.47.2/cargo-insta-x86_64-unknown-linux-musl.tar.xz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e1.47.1\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert sorting of sequences in \u003ccode\u003esort_maps\u003c/code\u003e. The change in\n1.47.0 sorted all\n\u003ccode\u003eSeq\u003c/code\u003e values (including \u003ccode\u003eVec\u003c/code\u003e), not just\nnon-deterministic collections like\n\u003ccode\u003eHashSet\u003c/code\u003e, which was a breaking change. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/876\"\u003e#876\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall cargo-insta 1.47.1\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang\u003d\"sh\"\u003e\u003ccode\u003ecurl --proto \u0027\u003dhttps\u0027 --tlsv1.2 -LsSf\nhttps://github.com/mitsuhiko/insta/releases/download/1.47.1/cargo-insta-installer.sh\n| sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/blob/master/CHANGELOG.md\"\u003einsta\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.47.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestore \u003ccode\u003eSend + Sync\u003c/code\u003e on \u003ccode\u003eSettings\u003c/code\u003e,\n\u003ccode\u003eRedactions\u003c/code\u003e, and \u003ccode\u003eRedaction\u003c/code\u003e by\nreverting the \u003ccode\u003eArc\u003c/code\u003e to \u003ccode\u003eRc\u003c/code\u003e change from 1.47.0,\nwhich was semver-breaking.\n\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/873\"\u003e#873\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/874\"\u003e#874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSend + Sync\u003c/code\u003e bounds to \u003ccode\u003eComparator\u003c/code\u003e trait\nfor consistency with\n\u003ccode\u003eArc\u003c/code\u003e-based storage. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/872\"\u003e#872\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd compile-time assertion to prevent future auto-trait\nregressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.47.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRevert sorting of sequences in \u003ccode\u003esort_maps\u003c/code\u003e. The change in\n1.47.0 sorted all\n\u003ccode\u003eSeq\u003c/code\u003e values (including \u003ccode\u003eVec\u003c/code\u003e), not just\nnon-deterministic collections like\n\u003ccode\u003eHashSet\u003c/code\u003e, which was a breaking change. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/876\"\u003e#876\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eComparator\u003c/code\u003e trait for customizing how snapshot\nvalues are compared. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/872\"\u003e#872\u003c/a\u003e\n(\u003ca href\u003d\"https://github.com/dstu\"\u003e\u003ccode\u003e@​dstu\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSort sequences in \u003ccode\u003esort_maps\u003c/code\u003e to fix non-deterministic\n\u003ccode\u003eHashSet\u003c/code\u003e snapshots. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/876\"\u003e#876\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove TOML serialization error message for unsupported types,\nsuggesting \u003ccode\u003eassert_json_snapshot!\u003c/code\u003e or\n\u003ccode\u003eassert_yaml_snapshot!\u003c/code\u003e as alternatives. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/880\"\u003e#880\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unnecessary \u003ccode\u003eSend + Sync\u003c/code\u003e bounds from\n\u003ccode\u003eRedaction\u003c/code\u003e, allowing non-\u003ccode\u003eSend\u003c/code\u003e closures in\ndynamic redactions. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/874\"\u003e#874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon\u0027t use \u003ccode\u003eArc\u003c/code\u003e in \u003ccode\u003eSettings\u003c/code\u003e unnecessarily.\n\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/873\"\u003e#873\u003c/a\u003e\n(\u003ca href\u003d\"https://github.com/dstu\"\u003e\u003ccode\u003e@​dstu\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003econsole\u003c/code\u003e to 0.16 and MSRV to 1.66. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/885\"\u003e#885\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003etoml-edit\u003c/code\u003e to 0.25. \u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/882\"\u003e#882\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://github.com/alexanderkjall\"\u003e\u003ccode\u003e@​alexanderkjall\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/0ddf1e829337fe2a4cbb4b801d9fd78426a10fe0\"\u003e\u003ccode\u003e0ddf1e8\u003c/code\u003e\u003c/a\u003e\nRelease 1.47.2 (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/894\"\u003e#894\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/094b1cf934ce6d004c2480ae6c7e3200c6590fdc\"\u003e\u003ccode\u003e094b1cf\u003c/code\u003e\u003c/a\u003e\nRevert Arc→Rc change, restore Send + Sync on Settings (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/65a5233599a89b9b8fe8808afb4f7638452f7d3c\"\u003e\u003ccode\u003e65a5233\u003c/code\u003e\u003c/a\u003e\nAdd regression test for sort_maps not sorting Vecs (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/892\"\u003e#892\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/fdbfc1508499f690672cd5d79281ef00f0581f44\"\u003e\u003ccode\u003efdbfc15\u003c/code\u003e\u003c/a\u003e\nRevert sort_maps sequence sorting, release 1.47.1 (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/46b6f2a2a3e208d30c2de71bb8331c9616feeaf6\"\u003e\u003ccode\u003e46b6f2a\u003c/code\u003e\u003c/a\u003e\nRelease 1.47.0 (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/889\"\u003e#889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/aa129335d39262231edb836d3487af709d2d1b80\"\u003e\u003ccode\u003eaa12933\u003c/code\u003e\u003c/a\u003e\nUpgrade \u003ccode\u003econsole\u003c/code\u003e to 0.16, bump MSRV to 1.66 (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/885\"\u003e#885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/98c084ccba9baaf9ad070f90131ce245e0686518\"\u003e\u003ccode\u003e98c084c\u003c/code\u003e\u003c/a\u003e\nupgrade toml-edit to 0.25 (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/882\"\u003e#882\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/4e889b057350514a7c9befd1d31a25bb548e2cf8\"\u003e\u003ccode\u003e4e889b0\u003c/code\u003e\u003c/a\u003e\nthe test_glob test depends on both glob and json (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/883\"\u003e#883\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/4d738e5e8a2ef18283bee248ec376a6c3212d062\"\u003e\u003ccode\u003e4d738e5\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​tootallnate/once\u003c/code\u003e and\n\u003ccode\u003e@​vscode/test-electron\u003c/code\u003e in /vscode-insta (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/881\"\u003e#881\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/commit/09f2b8b50173b203fc681dd8772863c95b9440a4\"\u003e\u003ccode\u003e09f2b8b\u003c/code\u003e\u003c/a\u003e\nImprove TOML serialization error message for unsupported types (\u003ca\nhref\u003d\"https://redirect.github.com/mitsuhiko/insta/issues/880\"\u003e#880\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/mitsuhiko/insta/compare/1.46.3...1.47.2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uuid` from 1.22.0 to 1.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/releases\"\u003euuid\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.23.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add support for \u0027hyphenated\u0027 format in the serde module by \u003ca\nhref\u003d\"https://github.com/FrenchDilettante\"\u003e\u003ccode\u003e@​FrenchDilettante\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/865\"\u003euuid-rs/uuid#865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix a number of bugs in time-related code by \u003ca\nhref\u003d\"https://github.com/KodrAus\"\u003e\u003ccode\u003e@​KodrAus\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/872\"\u003euuid-rs/uuid#872\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReword invalid char error message by \u003ca\nhref\u003d\"https://github.com/KodrAus\"\u003e\u003ccode\u003e@​KodrAus\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/873\"\u003euuid-rs/uuid#873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImpl cleanups by \u003ca\nhref\u003d\"https://github.com/KodrAus\"\u003e\u003ccode\u003e@​KodrAus\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/874\"\u003euuid-rs/uuid#874\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse LazyLock to synchronize v1/v6 context initialization by \u003ca\nhref\u003d\"https://github.com/KodrAus\"\u003e\u003ccode\u003e@​KodrAus\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/875\"\u003euuid-rs/uuid#875\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 1.23.0 release by \u003ca\nhref\u003d\"https://github.com/KodrAus\"\u003e\u003ccode\u003e@​KodrAus\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/876\"\u003euuid-rs/uuid#876\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/FrenchDilettante\"\u003e\u003ccode\u003e@​FrenchDilettante\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/pull/865\"\u003euuid-rs/uuid#865\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSpecial thanks\u003c/h2\u003e\n\u003cp\u003e\u003ca href\u003d\"https://github.com/meng-xu-cs\"\u003e\u003ccode\u003e@​meng-xu-cs\u003c/code\u003e\u003c/a\u003e\nraised a series of bugs against the timestamp logic in \u003ccode\u003euuid\u003c/code\u003e\nusing automated tooling. The issues themselves were reasonably and\nresponsibly presented and the end result is a better \u003ccode\u003euuid\u003c/code\u003e\nlibrary for everyone. Thanks!\u003c/p\u003e\n\u003ch1\u003eDeprecations\u003c/h1\u003e\n\u003cp\u003eThis release includes the following deprecations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eContext\u003c/code\u003e: Renamed to \u003ccode\u003eContextV1\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eTimestamp::from_gregorian\u003c/code\u003e: Renamed to\n\u003ccode\u003eTimestamp::from_gregorian_time\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eChange to \u003ccode\u003eVersion::Max\u003c/code\u003e\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eVersion::Max\u003c/code\u003e\u0027s \u003ccode\u003eu8\u003c/code\u003e representation has\nchanged from \u003ccode\u003e0xff\u003c/code\u003e to \u003ccode\u003e0x0f\u003c/code\u003e to match the value\nreturned by \u003ccode\u003eUuid::get_version_num\u003c/code\u003e.\u003c/p\u003e\n\u003ch1\u003eChange to \u003ccode\u003eUuid::get_version\u003c/code\u003e for the max UUID\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003eUuid::get_version\u003c/code\u003e will only return\n\u003ccode\u003eSome(Version::Max)\u003c/code\u003e if the UUID is actually the max UUID\n(all bytes are \u003ccode\u003e0xff\u003c/code\u003e). Previously it would return\n\u003ccode\u003eSome\u003c/code\u003e if only the version field was \u003ccode\u003e0x0f\u003c/code\u003e. This\nchange matches the behaviour of the nil UUID, which only returns\n\u003ccode\u003eSome(Version::Nil)\u003c/code\u003e if the UUID is the nil UUID (all bytes\nare \u003ccode\u003e0x00\u003c/code\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0\"\u003ehttps://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/00ab922d5351607dfff520f37eb49cb9854fda73\"\u003e\u003ccode\u003e00ab922\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/issues/876\"\u003e#876\u003c/a\u003e from\nuuid-rs/cargo/v1.23.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/726ba45fe3491bf6253173d0be6b99ed3b1cbbb9\"\u003e\u003ccode\u003e726ba45\u003c/code\u003e\u003c/a\u003e\nprepare for 1.23.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/996dadea029e3976f52cba58e5e9b9a08c4f82c4\"\u003e\u003ccode\u003e996dade\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/issues/875\"\u003e#875\u003c/a\u003e from\nuuid-rs/fix/context-ordering\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/e14047993bc5a6180a96119436a983c19d79b084\"\u003e\u003ccode\u003ee140479\u003c/code\u003e\u003c/a\u003e\nsimplify a use stmt\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/8ed9142847a22bc7707794bfee6b2016d4470772\"\u003e\u003ccode\u003e8ed9142\u003c/code\u003e\u003c/a\u003e\nreorganize and document more v7 context internals\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/e09a3225a8d99c5eadcbbeb7432195b2ea5ece76\"\u003e\u003ccode\u003ee09a322\u003c/code\u003e\u003c/a\u003e\nuse LazyLock to synchronize v1/v6 context initialization\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/0f260cc67135ac20d914e387a47e59960247fdee\"\u003e\u003ccode\u003e0f260cc\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/issues/874\"\u003e#874\u003c/a\u003e from\nuuid-rs/chore/impl-cleanups\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/1419e91097fcffc7afa8f54eb41fdc912200b540\"\u003e\u003ccode\u003e1419e91\u003c/code\u003e\u003c/a\u003e\nclean up and refactor main lib tests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/ceeaf4b7b59895497c59acdaf286233b1e7cc576\"\u003e\u003ccode\u003eceeaf4b\u003c/code\u003e\u003c/a\u003e\nensure we don\u0027t overflow on counters less than 12\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/commit/63bc8f52e5042b9c729fa0380b9948b49fe397cc\"\u003e\u003ccode\u003e63bc8f5\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/uuid-rs/uuid/issues/873\"\u003e#873\u003c/a\u003e from\nuuid-rs/fix/error-msg\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blake3` from 1.8.3 to 1.8.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/releases\"\u003eblake3\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.4\u003c/h2\u003e\n\u003cp\u003eversion 1.8.4\u003c/p\u003e\n\u003cp\u003eChanges since 1.8.3:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the \u003ccode\u003edigest\u003c/code\u003e dependency from v0.10 to v0.11. THIS\nIS A\nPOTENTIALLY BREAKING CHANGE for callers using the\n\u003ccode\u003etraits-preview\u003c/code\u003e\nCargo feature. But this is not considered a breaking change for the\n\u003ccode\u003eblake3\u003c/code\u003e crate itself; see the docs for\n\u003ccode\u003etraits-preview\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ePerformance for WASM SIMD targets is improved by ~20% when the\n\u003ccode\u003ewasm32_simd\u003c/code\u003e feature is enabled. Contributed by \u003ca\nhref\u003d\"https://github.com/lamb356\"\u003e\u003ccode\u003e@​lamb356\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/b97a24f8754819755ef78d8016c0391c65c943c5\"\u003e\u003ccode\u003eb97a24f\u003c/code\u003e\u003c/a\u003e\nversion 1.8.4\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/0ebe469626502046557c644c01e4ed72f1b8b5fd\"\u003e\u003ccode\u003e0ebe469\u003c/code\u003e\u003c/a\u003e\nupdate to new rustcrypto trait releases\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/d4b005a9f51ac5290bc96a5706e1cf897f602567\"\u003e\u003ccode\u003ed4b005a\u003c/code\u003e\u003c/a\u003e\nwasm32_simd: use i8x16_shuffle for rot8 and rot16\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/6eebbbd67935cc6b8fe24da164ae968a2e3973cb\"\u003e\u003ccode\u003e6eebbbd\u003c/code\u003e\u003c/a\u003e\nfix a struct size mismatch in tests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/fb1411ebdbec5327cb838646e71cfd37beda8c12\"\u003e\u003ccode\u003efb1411e\u003c/code\u003e\u003c/a\u003e\nc: use SIZE_MAX instead of -1 for size_t sentinels, add\n\u0026lt;stdint.h\u0026gt;\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/compare/1.8.3...1.8.4\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `unicode-segmentation` from 1.12.0 to 1.13.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/d446fa8f0089b10fb1f971a452e7ccd995646f7a\"\u003e\u003ccode\u003ed446fa8\u003c/code\u003e\u003c/a\u003e\nSet explicit 1.84 MSRV, add MSRV CI (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/164\"\u003e#164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/cb4972bd25acdddffdd285550205421b0519b895\"\u003e\u003ccode\u003ecb4972b\u003c/code\u003e\u003c/a\u003e\nfix: Typos in README (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/161\"\u003e#161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/88fac40e758c5d7bfce287e186c03a459e84385c\"\u003e\u003ccode\u003e88fac40\u003c/code\u003e\u003c/a\u003e\nAdd semver check workflow to GitHub Actions (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/160\"\u003e#160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/34ae23265968ddeef69fbf0415f77f40e5878ee9\"\u003e\u003ccode\u003e34ae232\u003c/code\u003e\u003c/a\u003e\nFix accidental breakage\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/f7268ccf0c9ec347992e5ae864378c1fd8f9caa0\"\u003e\u003ccode\u003ef7268cc\u003c/code\u003e\u003c/a\u003e\nUpdate changelog and version (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/159\"\u003e#159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/abed5f7315811153afe90cb7931d21a073b8ef0c\"\u003e\u003ccode\u003eabed5f7\u003c/code\u003e\u003c/a\u003e\nUpdate quickcheck to 1.0 (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/158\"\u003e#158\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/f6f5f218f9d02e0a2b0566710c8eef8c0c3d22f4\"\u003e\u003ccode\u003ef6f5f21\u003c/code\u003e\u003c/a\u003e\nRelease 1.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/13862d88946469b9a32bd8064dec6594cb65c908\"\u003e\u003ccode\u003e13862d8\u003c/code\u003e\u003c/a\u003e\nfeat: Support Unicode 17.0.0 (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/157\"\u003e#157\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/1441d3dde85c06cee70437b03819328c04b134ba\"\u003e\u003ccode\u003e1441d3d\u003c/code\u003e\u003c/a\u003e\nUpdate Python scripts (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/155\"\u003e#155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/commit/63d0234320e6eb34ecb738e2972baf23e5bf12cc\"\u003e\u003ccode\u003e63d0234\u003c/code\u003e\u003c/a\u003e\nExclude development scripts from published package (\u003ca\nhref\u003d\"https://redirect.github.com/unicode-rs/unicode-segmentation/issues/152\"\u003e#152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/unicode-rs/unicode-segmentation/compare/v1.12.0...v1.13.2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `postgres-types` from 0.2.12 to 0.2.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/releases\"\u003epostgres-types\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epostgres-types v0.2.13\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for \u003ccode\u003ebit-vec\u003c/code\u003e 0.9 via the\n\u003ccode\u003ewith-bit-vec-0_9\u003c/code\u003e feature.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgraded to Rust edition 2024, minimum Rust version 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/64674ba8ac230f15a26b4f8869bdf53c1109e123\"\u003e\u003ccode\u003e64674ba\u003c/code\u003e\u003c/a\u003e\nRelease postgres-types v0.2.13\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/40b760d8f8c749f7316177650f96fbec2f0fed40\"\u003e\u003ccode\u003e40b760d\u003c/code\u003e\u003c/a\u003e\nRelease postgres-derive v0.4.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/6c9229827a472f4c0a9b54452b04214f26563d9d\"\u003e\u003ccode\u003e6c92298\u003c/code\u003e\u003c/a\u003e\nRelease postgres-protocol v0.6.11\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/e088d7d73f086817b0ef08791bdb874c6a855d1a\"\u003e\u003ccode\u003ee088d7d\u003c/code\u003e\u003c/a\u003e\nstyle(clippy): fix \u003ccode\u003eclippy::useless_conversion\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/19897e8f5d0ca4e718268c3c38c8073afeb93a1f\"\u003e\u003ccode\u003e19897e8\u003c/code\u003e\u003c/a\u003e\nbuild(deps): upgrade semver compatible Rust dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/25849265e562306de1d87954468bbbc734e18a81\"\u003e\u003ccode\u003e2584926\u003c/code\u003e\u003c/a\u003e\nbuild(deps): upgrade RustCrypto dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/10a7724754a13b1c473ced7d990c7a89f38dfefd\"\u003e\u003ccode\u003e10a7724\u003c/code\u003e\u003c/a\u003e\nchore: add bit-vec v0.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/28531578947fe2244ae6bdcf174a87a821a07ef9\"\u003e\u003ccode\u003e2853157\u003c/code\u003e\u003c/a\u003e\nfix: cargo fmt --all\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/c8f8993acc2d4901a74b22e9480a91857a86d337\"\u003e\u003ccode\u003ec8f8993\u003c/code\u003e\u003c/a\u003e\nfeat: add rustfmt.toml for opiniated formatting\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/cf637bed6fc9bd77fa1be8106afb3464f8e4c7d3\"\u003e\u003ccode\u003ecf637be\u003c/code\u003e\u003c/a\u003e\nfix: clippy\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/compare/postgres-types-v0.2.12...postgres-types-v0.2.13\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tokio-postgres` from 0.7.16 to 0.7.17\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/releases\"\u003etokio-postgres\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etokio-postgres v0.7.17\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eClient::execute_typed\u003c/code\u003e method.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eClient::query_typed_one\u003c/code\u003e and\n\u003ccode\u003eClient::query_typed_opt\u003c/code\u003e methods.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eGenericClient::execute_typed\u003c/code\u003e,\n\u003ccode\u003eGenericClient::query_typed_one\u003c/code\u003e, and\n\u003ccode\u003eGenericClient::query_typed_opt\u003c/code\u003e methods.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eTransaction::execute_typed\u003c/code\u003e,\n\u003ccode\u003eTransaction::query_typed_one\u003c/code\u003e, and\n\u003ccode\u003eTransaction::query_typed_opt\u003c/code\u003e methods.\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003ebit-vec\u003c/code\u003e 0.9 via the\n\u003ccode\u003ewith-bit-vec-0_9\u003c/code\u003e feature.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgraded \u003ccode\u003erand\u003c/code\u003e to 0.10.\u003c/li\u003e\n\u003cli\u003eUpgraded to Rust edition 2024, minimum Rust version 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/35a85bdbfeeac465e092950f65a10d9192418175\"\u003e\u003ccode\u003e35a85bd\u003c/code\u003e\u003c/a\u003e\nRelease tokio-postgres v0.7.17\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/64674ba8ac230f15a26b4f8869bdf53c1109e123\"\u003e\u003ccode\u003e64674ba\u003c/code\u003e\u003c/a\u003e\nRelease postgres-types v0.2.13\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/40b760d8f8c749f7316177650f96fbec2f0fed40\"\u003e\u003ccode\u003e40b760d\u003c/code\u003e\u003c/a\u003e\nRelease postgres-derive v0.4.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/6c9229827a472f4c0a9b54452b04214f26563d9d\"\u003e\u003ccode\u003e6c92298\u003c/code\u003e\u003c/a\u003e\nRelease postgres-protocol v0.6.11\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/e088d7d73f086817b0ef08791bdb874c6a855d1a\"\u003e\u003ccode\u003ee088d7d\u003c/code\u003e\u003c/a\u003e\nstyle(clippy): fix \u003ccode\u003eclippy::useless_conversion\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/19897e8f5d0ca4e718268c3c38c8073afeb93a1f\"\u003e\u003ccode\u003e19897e8\u003c/code\u003e\u003c/a\u003e\nbuild(deps): upgrade semver compatible Rust dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/25849265e562306de1d87954468bbbc734e18a81\"\u003e\u003ccode\u003e2584926\u003c/code\u003e\u003c/a\u003e\nbuild(deps): upgrade RustCrypto dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/10a7724754a13b1c473ced7d990c7a89f38dfefd\"\u003e\u003ccode\u003e10a7724\u003c/code\u003e\u003c/a\u003e\nchore: add bit-vec v0.9 support\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/28531578947fe2244ae6bdcf174a87a821a07ef9\"\u003e\u003ccode\u003e2853157\u003c/code\u003e\u003c/a\u003e\nfix: cargo fmt --all\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/commit/c8f8993acc2d4901a74b22e9480a91857a86d337\"\u003e\u003ccode\u003ec8f8993\u003c/code\u003e\u003c/a\u003e\nfeat: add rustfmt.toml for opiniated formatting\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/rust-postgres/rust-postgres/compare/tokio-postgres-v0.7.16...tokio-postgres-v0.7.17\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wasm-bindgen-test` from 0.3.64 to 0.3.66\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/wasm-bindgen/wasm-bindgen/commits\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "e75ed5b42cffdb741eeace5762a9d705f22e3b2a",
      "tree": "e6b78495d6088127b0cd10cd382bbb1b39a77ef9",
      "parents": [
        "fee90be613446d2c61c3bd129a201c7faecef521"
      ],
      "author": {
        "name": "Vinay Mehta",
        "email": "14790730+vimeh@users.noreply.github.com",
        "time": "Tue Mar 31 13:06:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 20:06:58 2026 +0000"
      },
      "message": "feat(sql): unparse array_has as ANY for Postgres (#20654)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #20653 .\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\nPostgreSQL does not have an `array_has()` function. When the SQL\nunparser emits `array_has(haystack, needle)` for the Postgres dialect,\nit produces invalid SQL. The idiomatic equivalent is `needle \u003d\nANY(haystack)`.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\nAdds a `scalar_function_to_sql_overrides` entry in `PostgreSqlDialect`\nthat converts `array_has(haystack, needle)` to `needle \u003d ANY(haystack)`\nvia `ast::Expr::AnyOp`.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYep, with a unit test comparing default vs Postgres dialect output and a\nroundtrip integration test for `\u003d ANY()` in a WHERE clause.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\nNo breaking changes. `array_has` expressions are now unparsed as valid\nPostgres syntax when using `PostgreSqlDialect`.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "fee90be613446d2c61c3bd129a201c7faecef521",
      "tree": "1d80819a90a1f35ecb5b38c9961a26b5b01974f9",
      "parents": [
        "9de1253f2a8435fe486a93686db77531b54e7a3e"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Tue Mar 31 19:34:44 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 18:34:44 2026 +0000"
      },
      "message": "Misc minor optimizations to query optimizer performance (#21128)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\nInspired by @blaginin, trying to find more places that might drag the\noptimizer\u0027s performance. On my laptop , this improves many of the sql\nplanner\u0027s benchmarks by a fairly consistent 2-5%.\n\n## What changes are included in this PR?\n\nA slew of minor optimization in the logical planner, trying to avoid\nwasted work or repeated allocations\n\n## Are these changes tested?\n\nExisting tests.\n\n## Are there any user-facing changes?\n\nNone\n\n---------\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "9de1253f2a8435fe486a93686db77531b54e7a3e",
      "tree": "166a9b2618ec81f06a5aa2bd42989a09d6a89b4a",
      "parents": [
        "e74b83ab026379158a8031c9d70f187fbb704172"
      ],
      "author": {
        "name": "Bruce Ritchie",
        "email": "bruce.ritchie@gmail.com",
        "time": "Tue Mar 31 14:33:11 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 18:33:11 2026 +0000"
      },
      "message": "Update repeat UDF to emit utf8view when input is utf8view (#20645)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\nPart of https://github.com/apache/datafusion/issues/20585\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\nFunctions ideally should emit strings in the same format as the input\nand previously the repeat function was emitting using utf8 for input\nthat was in utf8view.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\nCode, tests\n\n## Are these changes tested?\n\nYes\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "e74b83ab026379158a8031c9d70f187fbb704172",
      "tree": "8da394188ec8ba3cad1c2bb1d3e817918050e6a8",
      "parents": [
        "c473c1852fad41541a2adfb252535321fd26a1b7"
      ],
      "author": {
        "name": "Huaijin",
        "email": "haohuaijin@gmail.com",
        "time": "Wed Apr 01 02:27:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 18:27:21 2026 +0000"
      },
      "message": "fix: date overflow panic (#21233)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #21234\n\n## Rationale for this change\n\n- see #21234\n\n## What changes are included in this PR?\n\nhandle Date32 and Date64 in `get_extreme_value` function\n\n## Are these changes tested?\n\nyes, add test case\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "c473c1852fad41541a2adfb252535321fd26a1b7",
      "tree": "799b0ca999e803bdc120f5190e5558f29243039e",
      "parents": [
        "a9dc1dcac15ebb748fc865e4d73af97b1e61c3be"
      ],
      "author": {
        "name": "Bert Vermeiren",
        "email": "103956021+bert-beyondloops@users.noreply.github.com",
        "time": "Tue Mar 31 20:18:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 18:18:37 2026 +0000"
      },
      "message": "feat(memory_pool): add `TrackConsumersPool::metrics()` to expose cons… (#21147)\n\n## Which issue does this PR close?\n\n- Closes #21146\n\n## Rationale for this change\n\nThere is currently no way to programmatically inspect the memory\nconsumption of individual consumers tracked by TrackConsumersPool. The\nonly available method, report_top(), returns a formatted string intended\nfor human-readable output, making it unsuitable for programmatic use\n(e.g., metrics collection, monitoring, or custom reporting).\n\n## What changes are included in this PR?\n\nAdded a metrics() method to TrackConsumersPool that returns a Vec — a\nsnapshot of all currently tracked consumers. Each MemoryConsumerMetrics\nentry exposes:\n\nname — the consumer\u0027s name\ncan_spill — whether the consumer supports spilling to disk\nreserved — current bytes reserved\npeak — peak bytes reserved\nThis allows callers to inspect memory usage programmatically without\nparsing formatted strings.\n\n## Are these changes tested?\n\nYes. A dedicated unit test test_track_consumers_pool_metrics was added\nin pool.rs that verifies:\n- An empty pool returns no metrics\n- name, can_spill, reserved, and peak are correctly reported for each\nconsumer\n- Peak is tracked independently from current reservation (grow then\nshrink scenario)\n  - Dropped consumers are removed from metrics      \n\n## Are there any user-facing changes?\n\nNo\n\nCo-authored-by: Bert Vermeiren \u003cbert.vermeiren@datadobi.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "a9dc1dcac15ebb748fc865e4d73af97b1e61c3be",
      "tree": "2213deec76cca7dbb1bd8ad2e28e709adc250884",
      "parents": [
        "19eb849b21b3a2d45f1451f57c922aaa482ec321"
      ],
      "author": {
        "name": "Huaijin",
        "email": "haohuaijin@gmail.com",
        "time": "Wed Apr 01 00:10:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 16:10:27 2026 +0000"
      },
      "message": "chore: fix upgrade guide link for object_store release notes (#21283)\n\nfix object_store release notes link in datafusion 53 upgrade guide\n\nfind this when i try upgrade datafusion to 53"
    },
    {
      "commit": "19eb849b21b3a2d45f1451f57c922aaa482ec321",
      "tree": "61f6c859470cbd115548db1325e0b46e02e18154",
      "parents": [
        "3d177fcc67aa1acd51b26c549c3370cb66ae35a2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 09:07:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 16:07:52 2026 +0000"
      },
      "message": "chore(deps): bump pygments from 2.19.2 to 2.20.0 (#21256)\n\nBumps [pygments](https://github.com/pygments/pygments) from 2.19.2 to\n2.20.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pygments/pygments/releases\"\u003epygments\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.20.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e),\nadd integer literal suffixes (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e),\nadd bytestring support (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e),\nfix catastrophic backtracking (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]\u0027\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e,\n\u003ccode\u003e]!\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e),\n1.25.11 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e),\nadd reserved keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pygments/pygments/blob/master/CHANGES\"\u003epygments\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.20.0\u003c/h2\u003e\n\u003cp\u003e(released March 29th, 2026)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e),\nadd integer literal suffixes (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e),\nadd bytestring support (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e),\nfix catastrophic backtracking (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]\u0027\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e,\n\u003ccode\u003e]!\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e),\n1.25.11 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e),\nadd reserved keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/708197d82827ba2d5ca78bcbb653c7102ce86dcd\"\u003e\u003ccode\u003e708197d\u003c/code\u003e\u003c/a\u003e\nFix underline length.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/1d4538ae8621d766ecc91ff59caf76ab75983abc\"\u003e\u003ccode\u003e1d4538a\u003c/code\u003e\u003c/a\u003e\nPrepare 2.20 release.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/2ceaee4e634eebae2d10a47fd05406871f6bac8f\"\u003e\u003ccode\u003e2ceaee4\u003c/code\u003e\u003c/a\u003e\nUpdate CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/e3a3c54b58c7f80bc4db887e471d4f91c77844ed\"\u003e\u003ccode\u003ee3a3c54\u003c/code\u003e\u003c/a\u003e\nFix Haskell lexer: handle escape sequences in character literals (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/d7c3453e342dac319f58e4091f4ef183cc49d802\"\u003e\u003ccode\u003ed7c3453\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3071\"\u003e#3071\u003c/a\u003e\nfrom pygments/harden-html-formatter\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/0f97e7c37d44abfa4ddfddf44a3290fdad586034\"\u003e\u003ccode\u003e0f97e7c\u003c/code\u003e\u003c/a\u003e\nHarden the HTML formatter against CSS.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/9f981b2ba42b88ca5bdcebf12cd01efd7cd80aec\"\u003e\u003ccode\u003e9f981b2\u003c/code\u003e\u003c/a\u003e\nUpdate CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/1d889151024e9a53f3702a60558b29b070306e9e\"\u003e\u003ccode\u003e1d88915\u003c/code\u003e\u003c/a\u003e\nUpdate CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/c3d93adb9827fc054c3c12b47bde31c781a36a93\"\u003e\u003ccode\u003ec3d93ad\u003c/code\u003e\u003c/a\u003e\nFix ASN.1 lexer: recognize minus sign and fix range operator (\u003ca\nhref\u003d\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pygments/pygments/commit/4f06bcf8a5ba3f2b5bda24a26ccf041a1a65d91e\"\u003e\u003ccode\u003e4f06bcf\u003c/code\u003e\u003c/a\u003e\nfix bad behaving backtracking regex in CommonLispLexer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pygments/pygments/compare/2.19.2...2.20.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dpygments\u0026package-manager\u003duv\u0026previous-version\u003d2.19.2\u0026new-version\u003d2.20.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts\npage](https://github.com/apache/datafusion/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "3d177fcc67aa1acd51b26c549c3370cb66ae35a2",
      "tree": "94eecffe1c00297fae453b57226b0c5b6dbd94d5",
      "parents": [
        "55d1995624d2d9c212b103217a0a3b692416a534"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 09:07:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 16:07:15 2026 +0000"
      },
      "message": "chore(deps): bump github/codeql-action from 4.34.1 to 4.35.1 (#21273)\n\nBumps [github/codeql-action](https://github.com/github/codeql-action)\nfrom 4.34.1 to 4.35.1.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003egithub/codeql-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.35.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect minimum required Git version for \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e: it should have been 2.36.0, not 2.11.0. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3781\"\u003e#3781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.35.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReduced the minimum Git version required for \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e from 2.38.0 to 2.11.0. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3767\"\u003e#3767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1\"\u003e2.25.1\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3773\"\u003e#3773\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/github/codeql-action/blob/main/CHANGELOG.md\"\u003egithub/codeql-action\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eCodeQL Action Changelog\u003c/h1\u003e\n\u003cp\u003eSee the \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003ereleases\npage\u003c/a\u003e for the relevant changes to the CodeQL CLI and language\npacks.\u003c/p\u003e\n\u003ch2\u003e[UNRELEASED]\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.35.1 - 27 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect minimum required Git version for \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e: it should have been 2.36.0, not 2.11.0. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3781\"\u003e#3781\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.0 - 27 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReduced the minimum Git version required for \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e from 2.38.0 to 2.11.0. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3767\"\u003e#3767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.1\"\u003e2.25.1\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3773\"\u003e#3773\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.34.1 - 20 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDowngrade default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3\"\u003e2.24.3\u003c/a\u003e\ndue to issues with a small percentage of Actions and JavaScript\nanalyses. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3762\"\u003e#3762\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.34.0 - 20 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an experimental change which disables TRAP caching when \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e is enabled, since improved incremental analysis\nsupersedes TRAP caching. This will improve performance and reduce\nActions cache usage. We expect to roll this change out to everyone in\nMarch. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3569\"\u003e#3569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWe are rolling out improved incremental analysis to C/C++ analyses\nthat use build mode \u003ccode\u003enone\u003c/code\u003e. We expect this rollout to be\ncomplete by the end of April 2026. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3584\"\u003e#3584\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.0\"\u003e2.25.0\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3585\"\u003e#3585\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.33.0 - 16 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpcoming change: Starting April 2026, the CodeQL Action will skip\ncollecting file coverage information on pull requests to improve\nanalysis performance. File coverage information will still be computed\non non-PR analyses. Pull request analyses will log a warning about this\nupcoming change. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3562\"\u003e#3562\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTo opt out of this change:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eRepositories owned by an organization:\u003c/strong\u003e Create a\ncustom repository property with the name\n\u003ccode\u003egithub-codeql-file-coverage-on-prs\u003c/code\u003e and the type\n\u0026quot;True/false\u0026quot;, then set this property to \u003ccode\u003etrue\u003c/code\u003e in\nthe repository\u0027s settings. For more information, see \u003ca\nhref\u003d\"https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization\"\u003eManaging\ncustom properties for repositories in your organization\u003c/a\u003e.\nAlternatively, if you are using an advanced setup workflow, you can set\nthe \u003ccode\u003eCODEQL_ACTION_FILE_COVERAGE_ON_PRS\u003c/code\u003e environment variable\nto \u003ccode\u003etrue\u003c/code\u003e in your workflow.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUser-owned repositories using default setup:\u003c/strong\u003e Switch\nto an advanced setup workflow and set the\n\u003ccode\u003eCODEQL_ACTION_FILE_COVERAGE_ON_PRS\u003c/code\u003e environment variable to\n\u003ccode\u003etrue\u003c/code\u003e in your workflow.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUser-owned repositories using advanced setup:\u003c/strong\u003e Set\nthe \u003ccode\u003eCODEQL_ACTION_FILE_COVERAGE_ON_PRS\u003c/code\u003e environment variable\nto \u003ccode\u003etrue\u003c/code\u003e in your workflow.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3555\"\u003ea\nbug\u003c/a\u003e which caused the CodeQL Action to fail loading repository\nproperties if a \u0026quot;Multi select\u0026quot; repository property was\nconfigured for the repository. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3557\"\u003e#3557\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe CodeQL Action now loads \u003ca\nhref\u003d\"https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization\"\u003ecustom\nrepository properties\u003c/a\u003e on GitHub Enterprise Server, enabling the\ncustomization of features such as\n\u003ccode\u003egithub-codeql-disable-overlay\u003c/code\u003e that was previously only\navailable on GitHub.com. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3559\"\u003e#3559\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOnce \u003ca\nhref\u003d\"https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries\"\u003eprivate\npackage registries\u003c/a\u003e can be configured with OIDC-based authentication\nfor organizations, the CodeQL Action will now be able to accept such\nconfigurations. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3563\"\u003e#3563\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed the retry mechanism for database uploads. Previously this would\nfail with the error \u0026quot;Response body object should not be disturbed\nor locked\u0026quot;. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3564\"\u003e#3564\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA warning is now emitted if the CodeQL Action detects a repository\nproperty whose name suggests that it relates to the CodeQL Action, but\nwhich is not one of the properties recognised by the current version of\nthe CodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3570\"\u003e#3570\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.32.6 - 05 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3\"\u003e2.24.3\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3548\"\u003e#3548\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.32.5 - 02 Mar 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRepositories owned by an organization can now set up the\n\u003ccode\u003egithub-codeql-disable-overlay\u003c/code\u003e custom repository property to\ndisable \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis for CodeQL\u003c/a\u003e. First, create a custom repository\nproperty with the name \u003ccode\u003egithub-codeql-disable-overlay\u003c/code\u003e and\nthe type \u0026quot;True/false\u0026quot; in the organization\u0027s settings. Then in\nthe repository\u0027s settings, set this property to \u003ccode\u003etrue\u003c/code\u003e to\ndisable improved incremental analysis. For more information, see \u003ca\nhref\u003d\"https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization\"\u003eManaging\ncustom properties for repositories in your organization\u003c/a\u003e. This\nfeature is not yet available on GitHub Enterprise Server. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change so that when \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e fails on a runner — potentially due to\ninsufficient disk space — the failure is recorded in the Actions cache\nso that subsequent runs will automatically skip improved incremental\nanalysis until something changes (e.g. a larger runner is provisioned or\na new CodeQL version is released). We expect to roll this change out to\neveryone in March. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe minimum memory check for improved incremental analysis is now\nskipped for CodeQL 2.24.3 and later, which has reduced peak RAM usage.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3515\"\u003e#3515\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c10b8064de6f491fea524254123dbe5e09572f13\"\u003e\u003ccode\u003ec10b806\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3782\"\u003e#3782\u003c/a\u003e\nfrom github/update-v4.35.1-d6d1743b8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c5ffd0683786820677d054e3505e1c5bb4b8c227\"\u003e\u003ccode\u003ec5ffd06\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.35.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/d6d1743b8ec7ecd94f78ad1ce4cb3d8d2ba58001\"\u003e\u003ccode\u003ed6d1743\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3781\"\u003e#3781\u003c/a\u003e\nfrom github/henrymercer/update-git-minimum-version\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/65d2efa7333ad65f97cc54be40f4cd18630f884c\"\u003e\u003ccode\u003e65d2efa\u003c/code\u003e\u003c/a\u003e\nAdd changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/2437b20ab31021229573a66717323dd5c6ce9319\"\u003e\u003ccode\u003e2437b20\u003c/code\u003e\u003c/a\u003e\nUpdate minimum git version for overlay to 2.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/ea5f71947c021286c99f61cc426a10d715fe4434\"\u003e\u003ccode\u003eea5f719\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3775\"\u003e#3775\u003c/a\u003e\nfrom github/dependabot/npm_and_yarn/node-forge-1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/45ceeea896ba2293e10982f871198d1950ee13d6\"\u003e\u003ccode\u003e45ceeea\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3777\"\u003e#3777\u003c/a\u003e\nfrom github/mergeback/v4.35.0-to-main-b8bb9f28\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/24448c98434f429f901d27db7ddae55eec5cc1c4\"\u003e\u003ccode\u003e24448c9\u003c/code\u003e\u003c/a\u003e\nRebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/7c510606312e5c68ac8b27c009e5254f226f5dfa\"\u003e\u003ccode\u003e7c51060\u003c/code\u003e\u003c/a\u003e\nUpdate changelog and version after v4.35.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/b8bb9f28b8d3f992092362369c57161b755dea45\"\u003e\u003ccode\u003eb8bb9f2\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3776\"\u003e#3776\u003c/a\u003e\nfrom github/update-v4.35.0-0078ad667\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/38697555549f1db7851b81482ff19f1fa5c4fedc...c10b8064de6f491fea524254123dbe5e09572f13\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub/codeql-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d4.34.1\u0026new-version\u003d4.35.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "55d1995624d2d9c212b103217a0a3b692416a534",
      "tree": "6bcc179db40362e19a44cdeb3641fc14e6545e74",
      "parents": [
        "4460ae0d2615f42787506a2efd59c9187ba6417d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 09:06:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 16:06:38 2026 +0000"
      },
      "message": "chore(deps): bump astral-sh/setup-uv from 7.6.0 to 8.0.0 (#21272)\n\nBumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from\n7.6.0 to 8.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/releases\"\u003eastral-sh/setup-uv\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.0.0 🌈 Immutable releases and secure tags\u003c/h2\u003e\n\u003ch1\u003eThis is the first immutable release of \u003ccode\u003esetup-uv\u003c/code\u003e 🥳\u003c/h1\u003e\n\u003cp\u003eAll future releases are also immutable, if you want to know more\nabout what this means checkout \u003ca\nhref\u003d\"https://docs.github.com/en/code-security/concepts/supply-chain-security/immutable-releases\"\u003ethe\ndocs\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release also has two breaking changes\u003c/p\u003e\n\u003ch2\u003eNew format for \u003ccode\u003emanifest-file\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eThe previously deprecated way of defining a custom version manifest\nto control which \u003ccode\u003euv\u003c/code\u003e versions are available and where to\ndownload them from got removed. The functionality is still there but you\nhave to use the \u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/blob/main/docs/customization.md#format\"\u003enew\nformat\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eNo more major and minor tags\u003c/h2\u003e\n\u003cp\u003eTo increase \u003cstrong\u003esecurity\u003c/strong\u003e even more we will \u003cstrong\u003estop\npublishing minor tags\u003c/strong\u003e. You won\u0027t be able to use\n\u003ccode\u003e@v8\u003c/code\u003e or \u003ccode\u003e@v8.0\u003c/code\u003e any longer. We do this because\npinning to major releases opens up users to supply chain attacks like\nwhat happened to \u003ca\nhref\u003d\"https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/\"\u003etj-actions\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!TIP]\nUse the immutable tag as a version\n\u003ccode\u003eastral-sh/setup-uv@v8.0.0\u003c/code\u003e\nOr even better the githash\n\u003ccode\u003eastral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003e🚨 Breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove update-major-minor-tags workflow \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/826\"\u003e#826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecrated custom manifest \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/813\"\u003e#813\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eShortcircuit latest version from manifest \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/828\"\u003e#828\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSimplify inputs.ts \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/827\"\u003e#827\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump release-drafter to v7.1.1 \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/825\"\u003e#825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRefactor inputs \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace inline compile args with tsconfig \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/824\"\u003e#824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: update known checksums for 0.11.2 @\u003ca\nhref\u003d\"https://github.com/apps/github-actions\"\u003egithub-actions[bot]\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/821\"\u003e#821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: update known checksums for 0.11.1 @\u003ca\nhref\u003d\"https://github.com/apps/github-actions\"\u003egithub-actions[bot]\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/817\"\u003e#817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: update known checksums for 0.11.0 @\u003ca\nhref\u003d\"https://github.com/apps/github-actions\"\u003egithub-actions[bot]\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/815\"\u003e#815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix latest-version workflow check \u003ca\nhref\u003d\"https://github.com/eifinger\"\u003e\u003ccode\u003e@​eifinger\u003c/code\u003e\u003c/a\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/812\"\u003e#812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: update known checksums for 0.10.11/0.10.12 @\u003ca\nhref\u003d\"https://github.com/apps/github-actions\"\u003egithub-actions[bot]\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/811\"\u003e#811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/cec208311dfd045dd5311c1add060b2062131d57\"\u003e\u003ccode\u003ecec2083\u003c/code\u003e\u003c/a\u003e\nShortcircuit latest version from manifest (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/828\"\u003e#828\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/4dd8ab45206a76f8c1dfe399fa88df10a7264f27\"\u003e\u003ccode\u003e4dd8ab4\u003c/code\u003e\u003c/a\u003e\nSimplify inputs.ts (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/827\"\u003e#827\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/7fdbe7cf0c8ef50cfd0878eed7b5180abc6b53c7\"\u003e\u003ccode\u003e7fdbe7c\u003c/code\u003e\u003c/a\u003e\nRemove update-major-minor-tags workflow (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/826\"\u003e#826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/485abd05e5c74a247f0a309e333d2433ab9a353a\"\u003e\u003ccode\u003e485abd0\u003c/code\u003e\u003c/a\u003e\nBump release-drafter to v7.1.1 (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/825\"\u003e#825\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/f82eb19c06057c455674b2602e0139fd906f1428\"\u003e\u003ccode\u003ef82eb19\u003c/code\u003e\u003c/a\u003e\nRefactor inputs (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/868d1f74d9d862d7b40219546bfe35299c6dd452\"\u003e\u003ccode\u003e868d1f7\u003c/code\u003e\u003c/a\u003e\nReplace inline compile args with tsconfig (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/824\"\u003e#824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/447e6d02b15d65b3247cce2d6019f11957285d11\"\u003e\u003ccode\u003e447e6d0\u003c/code\u003e\u003c/a\u003e\nchore: update known checksums for 0.11.2 (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/821\"\u003e#821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/5c62c5926145985eec91f09e2e0a75f40daed929\"\u003e\u003ccode\u003e5c62c59\u003c/code\u003e\u003c/a\u003e\nchore: update known checksums for 0.11.1 (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/817\"\u003e#817\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/e1a7373adb857afd2a70b971e8ebdacc64ed27d0\"\u003e\u003ccode\u003ee1a7373\u003c/code\u003e\u003c/a\u003e\nchore: update known checksums for 0.11.0 (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/815\"\u003e#815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/commit/89709315bb3bd4bf0f4b1db4b710e99009087ab5\"\u003e\u003ccode\u003e8970931\u003c/code\u003e\u003c/a\u003e\nRemove deprecrated custom manifest (\u003ca\nhref\u003d\"https://redirect.github.com/astral-sh/setup-uv/issues/813\"\u003e#813\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/astral-sh/setup-uv/compare/37802adc94f370d6bfd71619e3f0bf239e1f3b78...cec208311dfd045dd5311c1add060b2062131d57\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dastral-sh/setup-uv\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d7.6.0\u0026new-version\u003d8.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4460ae0d2615f42787506a2efd59c9187ba6417d",
      "tree": "189626dc6b5c0215fc060734dd738dcba0de3597",
      "parents": [
        "7138a832e33200cd3ffc8a6fc3cc491d71971f1b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 08:47:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:47:36 2026 +0000"
      },
      "message": "chore(deps): bump sha1 from 0.10.6 to 0.11.0 (#21277)\n\nBumps [sha1](https://github.com/RustCrypto/hashes) from 0.10.6 to\n0.11.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/2f00175af936de46b3ddefe65c4de93cb4e876e4\"\u003e\u003ccode\u003e2f00175\u003c/code\u003e\u003c/a\u003e\nRelease sha1 v0.11.0 (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/810\"\u003e#810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/07d370c4a0d7cfab1f2a2e3d21bbb44e5669ee32\"\u003e\u003ccode\u003e07d370c\u003c/code\u003e\u003c/a\u003e\nsha1: refactor backends selection (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/808\"\u003e#808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/7c7cb76e8a4978fb319a43122393cae0afc4b73d\"\u003e\u003ccode\u003e7c7cb76\u003c/code\u003e\u003c/a\u003e\nFix md5 project link in README (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/ffe093984c004769747e998f77da8ff7c0e7a765\"\u003e\u003ccode\u003effe0939\u003c/code\u003e\u003c/a\u003e\nRelease sha2 0.11.0 (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/806\"\u003e#806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/8991b65fe400c31c4cc189510f86ae642c470cd9\"\u003e\u003ccode\u003e8991b65\u003c/code\u003e\u003c/a\u003e\nUse the standard order of the \u003ccode\u003e[package]\u003c/code\u003e section fields (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/807\"\u003e#807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/3d2bc57db40fd6aeb25d6c6da98d67e2784c2985\"\u003e\u003ccode\u003e3d2bc57\u003c/code\u003e\u003c/a\u003e\nsha2: refactor backends (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/802\"\u003e#802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/faa55fb83697c8f3113636d88070e5f5edc8c335\"\u003e\u003ccode\u003efaa55fb\u003c/code\u003e\u003c/a\u003e\nsha3: bump \u003ccode\u003ekeccak\u003c/code\u003e to v0.2 (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/803\"\u003e#803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/d3e6489e56f8486d4a93ceb7a8abf4924af1de7b\"\u003e\u003ccode\u003ed3e6489\u003c/code\u003e\u003c/a\u003e\nsha3 v0.11.0-rc.9 (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/801\"\u003e#801\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/bbf6f51ff97f81ab15e6e5f6cf878bfbcb1f47c8\"\u003e\u003ccode\u003ebbf6f51\u003c/code\u003e\u003c/a\u003e\nsha2: tweak backend docs (\u003ca\nhref\u003d\"https://redirect.github.com/RustCrypto/hashes/issues/800\"\u003e#800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/commit/155dbbf2959dbec0ec75948a82590ddaede2d3bc\"\u003e\u003ccode\u003e155dbbf\u003c/code\u003e\u003c/a\u003e\nsha3: add default value for the \u003ccode\u003eDS\u003c/code\u003e generic parameter on\n\u003ccode\u003eTurboShake128/256\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/RustCrypto/hashes/compare/sha1-v0.10.6...sha1-v0.11.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dsha1\u0026package-manager\u003dcargo\u0026previous-version\u003d0.10.6\u0026new-version\u003d0.11.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "7138a832e33200cd3ffc8a6fc3cc491d71971f1b",
      "tree": "7ae5052ceec89219545e82fc900f39c347c5cd1a",
      "parents": [
        "26783124f1a79969f455f08fb3548ad58811ed20"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 15:47:02 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:47:02 2026 +0000"
      },
      "message": "chore(deps): bump snmalloc-rs from 0.3.8 to 0.7.4 (#21280)\n\nBumps [snmalloc-rs](https://github.com/microsoft/snmalloc) from 0.3.8 to\n0.7.4.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/microsoft/snmalloc/releases\"\u003esnmalloc-rs\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.7.4\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eOptimisations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove post-teardown performance by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/810\"\u003emicrosoft/snmalloc#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix performance issue in Red Black Tree init by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/818\"\u003emicrosoft/snmalloc#818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect cyclic corruption in SeqSet::iterate by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/813\"\u003emicrosoft/snmalloc#813\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePlatform support\u003c/h3\u003e\n\u003ch4\u003eRust\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esnmalloc-rs moved into snmalloc repo by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/801\"\u003emicrosoft/snmalloc#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRust: Update build features by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/804\"\u003emicrosoft/snmalloc#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emisc: prepare for future release and bump versions by \u003ca\nhref\u003d\"https://github.com/SchrodingerZhu\"\u003e\u003ccode\u003e@​SchrodingerZhu\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/807\"\u003emicrosoft/snmalloc#807\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove unused submodule from snmalloc-rs by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/827\"\u003emicrosoft/snmalloc#827\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAddress Rust packaging issues by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/830\"\u003emicrosoft/snmalloc#830\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eC++ support\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAdd SNMALLOC_EXPORT annotation to c++ allocator functions. by \u003ca\nhref\u003d\"https://github.com/akrieger\"\u003e\u003ccode\u003e@​akrieger\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/822\"\u003emicrosoft/snmalloc#822\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003einline annotation in pal_windows. by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/829\"\u003emicrosoft/snmalloc#829\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdding vcpkg integration by \u003ca\nhref\u003d\"https://github.com/matajoh\"\u003e\u003ccode\u003e@​matajoh\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/825\"\u003emicrosoft/snmalloc#825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eParameterise clangformat_targets for reuse by other projects by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/826\"\u003emicrosoft/snmalloc#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove time concept to Pal by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/802\"\u003emicrosoft/snmalloc#802\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCI Fixes by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/803\"\u003emicrosoft/snmalloc#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRefactor CI by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/806\"\u003emicrosoft/snmalloc#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd experiment with Claude.md by \u003ca\nhref\u003d\"https://github.com/mjp41\"\u003e\u003ccode\u003e@​mjp41\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/819\"\u003emicrosoft/snmalloc#819\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/akrieger\"\u003e\u003ccode\u003e@​akrieger\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/microsoft/snmalloc/pull/822\"\u003emicrosoft/snmalloc#822\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/microsoft/snmalloc/compare/0.7.3...0.7.4\"\u003ehttps://github.com/microsoft/snmalloc/compare/0.7.3...0.7.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.7.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cp\u003eThis release primarily improves for CMake for downstream uses of\nsnmalloc.\u003c/p\u003e\n\u003ch3\u003eBuild\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/microsoft/snmalloc/commits/0.7.4\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dsnmalloc-rs\u0026package-manager\u003dcargo\u0026previous-version\u003d0.3.8\u0026new-version\u003d0.7.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "26783124f1a79969f455f08fb3548ad58811ed20",
      "tree": "b86c823d0678e278a9a5784cd4984185293e9453",
      "parents": [
        "dcf818e4c57b39253c095b0a8098a74af6bcd635"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 15:46:35 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:46:35 2026 +0000"
      },
      "message": "chore(deps): bump ctor from 0.6.3 to 0.8.0 (#21282)\n\nBumps [ctor](https://github.com/mmastrac/rust-ctor) from 0.6.3 to 0.8.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/mmastrac/rust-ctor/commits\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dctor\u0026package-manager\u003dcargo\u0026previous-version\u003d0.6.3\u0026new-version\u003d0.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "dcf818e4c57b39253c095b0a8098a74af6bcd635",
      "tree": "af4abb52c4e97c7db818f488e5543c81ce422e22",
      "parents": [
        "a120e4d1bde4c549d8a9323b8f35ab5451f6b337"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 08:46:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:46:14 2026 +0000"
      },
      "message": "chore(deps): bump rustyline from 17.0.2 to 18.0.0 (#21276)\n\nBumps [rustyline](https://github.com/kkawakam/rustyline) from 17.0.2 to\n18.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/releases\"\u003erustyline\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e18.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport minimal repaint \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/882\"\u003e#882\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix edit_kill \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/887\"\u003e#887\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/885\"\u003e#885\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eOn windows, check that prompt is not styled \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/890\"\u003e#890\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/889\"\u003e#889\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/836\"\u003e#836\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/562\"\u003e#562\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/702\"\u003e#702\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/215\"\u003e#215\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump windows-sys version \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/892\"\u003e#892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck NO_COLOR environment variable \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/894\"\u003e#894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix clippy warning \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/896\"\u003e#896\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate radix_trie requirement from 0.2 to 0.3 \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/898\"\u003e#898\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce Prompt trait for styling \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/893\"\u003e#893\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix partial refresh \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/899\"\u003e#899\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/897\"\u003e#897\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove doc_auto_cfg \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/900\"\u003e#900\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix vi paste \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/901\"\u003e#901\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/732\"\u003e#732\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInstall signal handlers only when actually reading \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/903\"\u003e#903\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/902\"\u003e#902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConfigure cargo deny \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/904\"\u003e#904\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/637\"\u003e#637\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate rusqlite version \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/906\"\u003e#906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate signal-hook to 0.4 \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/907\"\u003e#907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace fd-lock with std File::lock \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/909\"\u003e#909\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/908\"\u003e#908\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump nix version to 0.31 \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/911\"\u003e#911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRefactor code related to signal handling \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/912\"\u003e#912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump signal-hook version \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/913\"\u003e#913\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/910\"\u003e#910\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate rand to 0.10 \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/917\"\u003e#917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate skim from 0.10 to 3.3.0 \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/919\"\u003e#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow getting handler to fail after partial key event matches. \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/924\"\u003e#924\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/923\"\u003e#923\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/929\"\u003e#929\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClippy \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/930\"\u003e#930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd comments on how to debug with PowerShell \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/933\"\u003e#933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry to fix a panic related to SIG_PIPE \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/932\"\u003e#932\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/931\"\u003e#931\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/compare/v17.0.2...v18.0.0\"\u003ehttps://github.com/kkawakam/rustyline/compare/v17.0.2...v18.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/e89887a38bb4f23575a5b51c06c0a7004c5ef4d1\"\u003e\u003ccode\u003ee89887a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/934\"\u003e#934\u003c/a\u003e\nfrom gwenn/release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/3ad9e653750b6c343b1fb2573fb5d6bb3e10ddad\"\u003e\u003ccode\u003e3ad9e65\u003c/code\u003e\u003c/a\u003e\nPrepare next release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/cb9b5601f970767b618b265be8ff724e3e562d2e\"\u003e\u003ccode\u003ecb9b560\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/932\"\u003e#932\u003c/a\u003e\nfrom gwenn/sig_pipe\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/111613aa60818629262272fd4ac55c3d5e86a966\"\u003e\u003ccode\u003e111613a\u003c/code\u003e\u003c/a\u003e\nUse relaxed ordering\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/9601fbe7ed388fed842886728d9219fa32583972\"\u003e\u003ccode\u003e9601fbe\u003c/code\u003e\u003c/a\u003e\nTry to fix a panic related to SIG_PIPE\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/8a9e4f1c032f8ed82ba0cf9eed7486a38f82bfee\"\u003e\u003ccode\u003e8a9e4f1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/933\"\u003e#933\u003c/a\u003e\nfrom gwenn/debug\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/ab85340d5c50656ffcc2a3f3728834c3b119b69e\"\u003e\u003ccode\u003eab85340\u003c/code\u003e\u003c/a\u003e\nAdd comments on how to debug with PowerShell\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/1e8561103af56897ea0bea8efe424f35460d4eca\"\u003e\u003ccode\u003e1e85611\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/930\"\u003e#930\u003c/a\u003e\nfrom gwenn/lints\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/1d77febaaceaa06d750f42057661012fd7bdb223\"\u003e\u003ccode\u003e1d77feb\u003c/code\u003e\u003c/a\u003e\nClippy\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/commit/878d43a0584bf6eef8b61af67069e5214ce3bd82\"\u003e\u003ccode\u003e878d43a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/kkawakam/rustyline/issues/929\"\u003e#929\u003c/a\u003e\nfrom gwenn/deps\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/kkawakam/rustyline/compare/v17.0.2...v18.0.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003drustyline\u0026package-manager\u003dcargo\u0026previous-version\u003d17.0.2\u0026new-version\u003d18.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a120e4d1bde4c549d8a9323b8f35ab5451f6b337",
      "tree": "e98e39ce3e955368454d80d31755a8f427673bdd",
      "parents": [
        "d87d8f6cacc05bb0c3618a6e3b3a218ef827a885"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 08:43:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:43:56 2026 +0000"
      },
      "message": "chore(deps): bump taiki-e/install-action from 2.69.7 to 2.70.3 (#21271)\n\nBumps\n[taiki-e/install-action](https://github.com/taiki-e/install-action) from\n2.69.7 to 2.70.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/releases\"\u003etaiki-e/install-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.70.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.116.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.70.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003evacuum@latest\u003c/code\u003e to 0.25.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.11.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.70.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-binstall@latest\u003c/code\u003e to 1.17.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.70.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003euv\u003c/code\u003e, \u003ccode\u003euvw\u003c/code\u003e (Windows-only), and\n\u003ccode\u003euvx\u003c/code\u003e binaries when installing \u003ccode\u003euv\u003c/code\u003e. Previously,\nonly \u003ccode\u003euv\u003c/code\u003e binary was installed. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1632\"\u003e#1632\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.14\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.48.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.115.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.13\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.17.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.11.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003edprint@latest\u003c/code\u003e to 0.53.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.16.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.15.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.9\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.11.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md\"\u003etaiki-e/install-action\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this\nfile.\u003c/p\u003e\n\u003cp\u003eThis project adheres to \u003ca href\u003d\"https://semver.org\"\u003eSemantic\nVersioning\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e[Unreleased]\u003c/h2\u003e\n\u003ch2\u003e[2.70.3] - 2026-03-31\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.116.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.70.2] - 2026-03-30\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003evacuum@latest\u003c/code\u003e to 0.25.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.11.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.70.1] - 2026-03-29\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-binstall@latest\u003c/code\u003e to 1.17.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.70.0] - 2026-03-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInstall \u003ccode\u003euv\u003c/code\u003e, \u003ccode\u003euvw\u003c/code\u003e (Windows-only), and\n\u003ccode\u003euvx\u003c/code\u003e binaries when installing \u003ccode\u003euv\u003c/code\u003e. Previously,\nonly \u003ccode\u003euv\u003c/code\u003e binary was installed. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1632\"\u003e#1632\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.14] - 2026-03-28\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.48.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.115.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.13] - 2026-03-27\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/6ef672efc2b5aabc787a9e94baf4989aa02a97df\"\u003e\u003ccode\u003e6ef672e\u003c/code\u003e\u003c/a\u003e\nRelease 2.70.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/f89faaa96174309722dc50938402891d9937a72f\"\u003e\u003ccode\u003ef89faaa\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.116\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/9adcff13829681f1e2f4a678b775043ab5c7fc2c\"\u003e\u003ccode\u003e9adcff1\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecargo-insta@latest\u003c/code\u003e to 1.47.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/a322a79ed43f376db6cf5fb62d147fbfa3ef320f\"\u003e\u003ccode\u003ea322a79\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/875d0e57649ab3ced82c36327c9770ead82109d4\"\u003e\u003ccode\u003e875d0e5\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.10\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/e9e8e031bcd90cdbe8ac6bb1d376f8596e587fbf\"\u003e\u003ccode\u003ee9e8e03\u003c/code\u003e\u003c/a\u003e\nRelease 2.70.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/f225969a9e5aad6f5d413ec4299a151e524774d5\"\u003e\u003ccode\u003ef225969\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003evacuum@latest\u003c/code\u003e to 0.25.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/2e8700ad0bd15b56f4d6b3b6db9ab6f715825d85\"\u003e\u003ccode\u003e2e8700a\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.11\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/41213fbc0eadbfe56adbc0fcb699b3e023e279e1\"\u003e\u003ccode\u003e41213fb\u003c/code\u003e\u003c/a\u003e\nzizmor: Apply more lints\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/fd0f63e180a477d7434580b6d80817978b9ff2b8\"\u003e\u003ccode\u003efd0f63e\u003c/code\u003e\u003c/a\u003e\nRelease 2.70.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/compare/0d865d5cc6d507df4765f1f866bfae8bab4e2a73...6ef672efc2b5aabc787a9e94baf4989aa02a97df\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dtaiki-e/install-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.69.7\u0026new-version\u003d2.70.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d87d8f6cacc05bb0c3618a6e3b3a218ef827a885",
      "tree": "21dd98292a044bcfa9b55a4dbecf2ed6deb67eb9",
      "parents": [
        "0bf9defb1d9587ab2810e6e8adff512f4db58037"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Mar 31 11:43:14 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 15:43:14 2026 +0000"
      },
      "message": "perf: Optimize `string_to_array` for scalar args (#21131)\n\n## Which issue does this PR close?\n\n- Closes #21129.\n\n## Rationale for this change\n\nWhen the delimiter (and null string, if supplied) are scalars, we can\nimplement `string_to_array` more efficiently. In particular, we can\nconstruct a `memmem::Finder` and use it to search for delimiters more\nefficiently.\n\nThis PR implements this optimization; it also fixes a place where we\nwere allocating an intermediate `String` for every character when the\ndelimiter is `NULL`. (This isn\u0027t a common case but worth fixing.)\n\nBenchmarks (M4 Max):\n\n```\n  single_char_delim/5:    34.8 µs  (was  61.1 µs)  -43%\n  single_char_delim/20:  145.1 µs  (was 220.7 µs)  -34%\n  single_char_delim/100: 679.4 µs  (was   1.04 ms) -35%\n\n  multi_char_delim/5:    41.7 µs  (was  56.7 µs)  -27%\n  multi_char_delim/20:  158.9 µs  (was 185.1 µs)  -14%\n  multi_char_delim/100: 731.4 µs  (was 858.3 µs)  -15%\n\n  with_null_str/5:    43.1 µs  (was  68.7 µs)  -37%\n  with_null_str/20:  179.3 µs  (was 244.3 µs)  -27%\n  with_null_str/100: 895.8 µs  (was   1.16 ms) -23%\n\n  null_delim/5:    17.4 µs  (was  64.1 µs)  -73%\n  null_delim/20:   63.0 µs  (was 233.4 µs)  -73%\n  null_delim/100: 280.2 µs  (was   1.12 ms) -75%\n\n  columnar_delim/5:    65.2 µs  (was  60.2 µs)  +8%\n  columnar_delim/20:  217.2 µs  (was 224.1 µs)  -3%\n  columnar_delim/100:   1.02 ms  (was   1.05 ms) -3%\n```\n\n## What changes are included in this PR?\n\n* Add benchmark for `string_to_array`\n* Implement optimizations described above\n* Refactor columnar (fallback) path to get rid of a lot of type dispatch\nboilerplate\n* Improve SLT test coverage for the \"columnar string, scalar other-args\"\ncase\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "0bf9defb1d9587ab2810e6e8adff512f4db58037",
      "tree": "3bb560e7796804f9000d34489027f577098bd923",
      "parents": [
        "2d9e268bc7f8462ebb08106e4d55d37a8a9dfb24"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Mar 31 09:15:15 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 13:15:15 2026 +0000"
      },
      "message": "fix: Fix three bugs in query decorrelation (#21208)\n\n## Which issue does this PR close?\n\n- Closes #21205.\n- Closes #21206.\n- Closes #20315.\n\n## Rationale for this change\n\nThis PR fixes three separate bugs in query decorrelation:\n\n1. When removing duplicate filters as part of pulling up `IN`\nsubqueries, an operator precedence error meant that we would consider\ntwo filters to be duplicates even if they involved different operators\n(e.g., `\u003d` and `\u003e`).\n2. When generating the `CASE` used to implement \"count bug\" handling, we\nreferenced the subquery output column without qualifying it by the\nsubquery alias. This could result in name-collisions with unrelated\nidentifiers in the parent query.\n3. After generating the `CASE` used for \"count bug\" handling, we rewrote\nthe parent query to replace references to the subquery output column\nwith the generated `CASE` expression. This rewrite only matched on\nunqualified column name only, which meant that unrelated parent query\nidentifiers that happened to share the same column name as subquery\naggregate aliases could been rewritten by mistake.\n\nThe first and third issues could result in incorrect query results; the\nsecond would only cause spurious errors, as far as I can see.\n\n## What changes are included in this PR?\n\n* Fix all three bugs\n* Add SLT tests\n* Add a `debug_assert!` to document/check that\n`remove_duplicated_filter` is called with a commutative operator\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo, except in the sense that they fix user-visible bugs."
    },
    {
      "commit": "2d9e268bc7f8462ebb08106e4d55d37a8a9dfb24",
      "tree": "d729eb9fcd14057cffd1e6c66107728658914859",
      "parents": [
        "6412c3aaa0e7187b20bb219856f594f1c5e69fef"
      ],
      "author": {
        "name": "Eren Avsarogullari",
        "email": "eren@apache.org",
        "time": "Tue Mar 31 06:14:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 13:14:58 2026 +0000"
      },
      "message": "docs: Add `RESET` Command Documentation (#21245)\n\n## Which issue does this PR close?\n- Closes #21244.\n\n## Rationale for this change\n`datafusion.catalog/execution/optimizer/explain/sql_parser/format.*` and\n`datafusion.runtime.*` configurations can be set by using `SET` Command.\nAlso, they can be reset to their default value by using `RESET` Command.\nSET command has documentation but RESET does not have so this PR aims to\nadd RESET Command documentation like SET Command.\n\n## What changes are included in this PR?\nRESET Command Documentation is being added.\n\n## Are these changes tested?\nNot required.\n\n## Are there any user-facing changes?\nYes"
    },
    {
      "commit": "6412c3aaa0e7187b20bb219856f594f1c5e69fef",
      "tree": "bf50efbf5eaa95b37a302673f38579303957c42b",
      "parents": [
        "9c1e7abd2fedfc52525ce1662dd9f650171d0c5c"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Tue Mar 31 17:07:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 09:07:19 2026 +0000"
      },
      "message": "Add end-to-end Parquet tests for List and LargeList struct schema evolution (#20840)\n\n## Which issue does this PR close?\n\n* Part of #20835\n\n## Rationale for this change\n\nWhile the core fixes for nested struct schema evolution have landed in\n#20907, existing coverage is primarily at the unit/helper level. This PR\nadds end-to-end Parquet-based integration tests to validate that\nList\u003cStruct\u003e and LargeList\u003cStruct\u003e schema evolution behaves correctly\nthrough the full execution pipeline (planning, scanning, and\nprojection).\n\nThis ensures that real-world query paths such as `SELECT *` and nested\nfield projection behave consistently and that previous repro cases are\nno longer failing.\n\n## What changes are included in this PR?\n\n### 1. End-to-end Rust integration tests\n\nAdded comprehensive tests in:\n\n* `datafusion/core/tests/parquet/expr_adapter.rs`\n\nThese tests:\n\n* Generate old/new Parquet files with differing nested struct schemas\n* Cover both `List\u003cStruct\u003c...\u003e\u003e` and `LargeList\u003cStruct\u003c...\u003e\u003e`\n* Validate:\n\n  * `SELECT *` correctness\n  * Nested field projection via `get_field(...)`\n  * NULL backfilling for missing nullable fields\n  * Ignoring extra source-only fields\n\n### 2. Error-path coverage\n\nAdded failure tests for both `List` and `LargeList`:\n\n* Non-nullable missing field → error\n* Incompatible nested field type → error\n\nEnsures parity across both list encodings and prevents partial\nregressions.\n\n### 3. Test utilities and refactoring\n\nIntroduced reusable helpers to simplify nested test setup:\n\n* `NestedListKind` abstraction for List vs LargeList\n* `NestedMessageRow` test fixture struct\n* Batch builders and schema helpers\n* Macro `test_struct_schema_evolution_pair!` to generate paired tests\n\nThese reduce duplication and make it easier to extend the test matrix.\n\n### 4. End-user API coverage via `.slt`\n\nAdded:\n\n* `datafusion/sqllogictest/test_files/schema_evolution_nested.slt`\n\nThis validates behavior through SQL-only workflows:\n\n* Uses `COPY ... TO PARQUET` to generate test files\n* Uses `CREATE EXTERNAL TABLE` to query them\n\nCovers:\n\n* Mixed-schema reads\n* Nested projection queries\n* Both `List` and `LargeList`\n\n---\n\n## Are these changes tested?\n\nYes.\n\nThis PR adds both:\n\n1. **Rust integration tests**\n\n   * End-to-end Parquet scan behavior\n   * Success and failure scenarios\n   * Covers both `List` and `LargeList`\n\n2. **sqllogictest (`.slt`) tests**\n\n   * Validates behavior through end-user SQL interface\n   * Uses generated Parquet fixtures (no checked-in binaries)\n\nAll tests pass locally, including:\n\n* `test_list_struct_schema_evolution_end_to_end`\n* `test_large_list_struct_schema_evolution_end_to_end`\n* Error-path variants for both list encodings\n\n## Are there any user-facing changes?\n\nNo direct user-facing changes.\n\nThis PR improves correctness guarantees and test coverage for nested\nschema evolution, ensuring more predictable behavior for users working\nwith evolving Parquet schemas.\n\n## LLM-generated code disclosure\n\nThis PR includes LLM-generated code and comments. All LLM-generated\ncontent has been manually reviewed and tested."
    },
    {
      "commit": "9c1e7abd2fedfc52525ce1662dd9f650171d0c5c",
      "tree": "8181173a63f9499cb149d0b2c28789130312ab24",
      "parents": [
        "ccaf8022da368052d8a1d910c28ccc8af8422e03"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Tue Mar 31 16:41:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 08:41:24 2026 +0000"
      },
      "message": "Refactor: expose predicate constant inference from physical-expr (#21167)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\nThe predicate constant inference logic is helpful, we also use it in in\nour product, but we just copied that becuase it\u0027s now in the filter\u0027s\nmethod.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\nThe PR extracts the related logic into a helper method in physical expr.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "ccaf8022da368052d8a1d910c28ccc8af8422e03",
      "tree": "fcda9144cf2bb80150d8de9e3cf9226d25ccd813",
      "parents": [
        "14a85fa3838951f957f81a6a2936694a1bfeeef1"
      ],
      "author": {
        "name": "Matthew Kim",
        "email": "38759997+friendlymatthew@users.noreply.github.com",
        "time": "Mon Mar 30 16:27:08 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 20:27:08 2026 +0000"
      },
      "message": "Add flat vs. struct field projection benchmarks (#21257)\n\n## Rationale for this change\n\nThis PR adds a benchmark comparing top-level column access against\nstruct field access for the same logical data\n\n#20925 introduced leaf level projection masking so that projecting a\nsingle struct field skips decoding its siblings. #21180 added benchmarks\nmeasuring that improvement across different strcut shapes. But neither\nbenchmark answers how struct field access compare to reading the same\ncolumn at the top level. Without that baseline, it\u0027s hard to know how\nmuch overhead the struct access path itself adds"
    },
    {
      "commit": "14a85fa3838951f957f81a6a2936694a1bfeeef1",
      "tree": "8bdd2fdeacc6b44b94404edfadc33b790c590f12",
      "parents": [
        "5ff80e4340873c7b9f31bad3bb4c8a4a235cd589"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Mon Mar 30 16:20:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 20:20:39 2026 +0000"
      },
      "message": "chore: remove as_any from aggregate and window functions (#21209)\n\n## Which issue does this PR close?\n\nThis is a follow on to https://github.com/apache/datafusion/pull/20812\nbut treats aggregate and window functions.\n\n## Rationale for this change\n\nThis PR reduces the amount of boilerplate code that users need to write\nfor aggregate and window functions.\n\n## What changes are included in this PR?\n\nNow that we have [trait\nupcasting](https://blog.rust-lang.org/2025/04/03/Rust-1.86.0/) since\nrust 1.86, we no longer need every implementation of these functions to\nhave the as_any function that returns \u0026self. This PR makes Any an\nsupertrait and makes the appropriate casts when necessary.\n\n## Are these changes tested?\n\nExisting unit tests.\n\n## Are there any user-facing changes?\n\nYes, the users simply need to remove the `as_any` function. The upgrade\nguide is updated.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "5ff80e4340873c7b9f31bad3bb4c8a4a235cd589",
      "tree": "3a0fa157edf09fa190beb82a4199b98dac7bfc18",
      "parents": [
        "f830ee39df83afe69a234d0e7714318410f8399c"
      ],
      "author": {
        "name": "Albert Skalt",
        "email": "133099191+askalt@users.noreply.github.com",
        "time": "Mon Mar 30 22:27:25 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 19:27:25 2026 +0000"
      },
      "message": "Provide session to the udtf call (#20222)\n\n## Rationale for this change\n\nIn our project, we have several UDTFs that depend on the session from\nwhich they are called -- for example, functions to list views, tables\nand functions that wrap scan of another table (like composition). To\nimplement them, we need a way to provide the current session state to\nthe UDTF. It would be nice to add the session as an argument to the UDTF\ncall.\n\n## What changes are included in this PR?\n\n1. Introduce `TableFunctionImpl::call_with_args`: it takes struct\n`TableFunctionArgs`, doing arguments extendable without breaking\nbackward compatibility.\n2. Deprecate `TableFunctionImpl::call`.\n3. Switch to `call_with_args` for each UDTF in DF.\n4. Add an example of the UDTF `table_list()` that depends on the session\nstate."
    },
    {
      "commit": "f830ee39df83afe69a234d0e7714318410f8399c",
      "tree": "27af7f9c963dbe27901aee692d3f4b6194815ccb",
      "parents": [
        "4a366752acab71b5ea1a72f64a1fa2a8de1fd02a"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Mar 30 15:14:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 19:14:21 2026 +0000"
      },
      "message": "Refactor parquet datasource into an explicit state machine (#21190)\n\n## Which issue does this PR close?\n\n- part of https://github.com/apache/datafusion/issues/20529\n- Broken out of https://github.com/apache/datafusion/pull/20820\n\n## Rationale for this change\n\n1. I am trying to break https://github.com/apache/datafusion/pull/20820\ninto smaller chunks\n2. I want to isolate the changes to the parquet opener to see if they\nare causing regressions)\n\nAt a high level, the parquet opener in DataFusion potentially does\nseveral IOs as part of its reading pipeline. However, those IOs are all\nsomewhat implicit and hidden in a large 400 line `async` closure:\n\n\nhttps://github.com/apache/datafusion/blob/37cd3de82fcfa7619b04cfb9f19607ff55d44bc4/datafusion/datasource-parquet/src/opener.rs#L232-L641\n\nAs part of morselizing the FileStream we are trying to make the IO and\nCPU split clearer (so they can be scheduled explicitly)\n\n## What changes are included in this PR?\n1. Extract the code in the parquet opener into an explicit state\nmachine, so\n\n## Are these changes tested?\n\nFunctionally by existing tests\n\nI also ran performance tests and they didn\u0027t show any substantial\nperformance change\n\n## Are there any user-facing changes?\n\nNo, this is internal code reorganization\n\n\n## Follow on tasks\n- [ ] Split BloomFilter into CPU and IO states\n- [ ] Split decoder reading into CPU and IO states"
    },
    {
      "commit": "4a366752acab71b5ea1a72f64a1fa2a8de1fd02a",
      "tree": "846dbe6de3a532496b608c53300e0f9461632a69",
      "parents": [
        "11c2fbcb15bbe514abd26409a429fbaf1f89fc39"
      ],
      "author": {
        "name": "Thomas Tanon",
        "email": "thomas@pellissier-tanon.fr",
        "time": "Mon Mar 30 21:07:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 19:07:44 2026 +0000"
      },
      "message": "chore: Replace `TryInto` impl by `TryFrom` (#21203)\n\n`TryInto` is automatically implemented using `TryFrom` leading to a\ncommon convention to only implement `TryFrom` explicitly\n\nThis does not break the API outside of adding a new `TryFrom`\nimplementation"
    },
    {
      "commit": "11c2fbcb15bbe514abd26409a429fbaf1f89fc39",
      "tree": "9b92459d4b81c5eaf9ecb014b723a0e7e9a83554",
      "parents": [
        "2c08ddb4fe1e056d23baeab22855f4674904b019"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Mon Mar 30 19:54:39 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:54:39 2026 +0000"
      },
      "message": "Misc minor optimization in the Physical Optimizer (#21216)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\nSimilar to #21128, just trying to shave time off the optimizer. Locally,\nit improves some sql-planner benchmarks by up to 10% but they seem\nrelatively noisy on my laptop.\n\n## What changes are included in this PR?\n\n1. Avoid allocation `plan.children()` in a loop in `sort_pushdown.rs`.\n2. Try and avoid some expensive tree rewrites in `join_selection.rs`\n3. Avoid deep clones of exec limit nodes in `limit_pushdown.rs`, and\nonly mutate the plan if it was actually changed.\n4. Use cheaper code path to change the limit on an `AggregateExec` in\n`limited_distinct_aggregation.rs`.\n5. Use a read-only traversal in `sanity_checker.rs`. Its read only and\n`transform_up` is always more expensive. I\u0027ve considered extending\n`TreeNode` but this seems to be basically the only place in the codebase\nthat does something like this.\n\nThere are a few places where we unconditionally return\n`Transformed::yes` which might unintended downstream consequences\nbecause it breaks pointer equality and I think it also just end up\nallocating more memory, but they are harder to untangle so I\u0027ll try and\ndo them in followups.\n\n## Are these changes tested?\n\nOne new test for limits, otherwise the existing tests.\n\n## Are there any user-facing changes?\n\nRemoves the `LimitExec` type, I can\u0027t imagine why someone would use it,\nand its only used in one place. Happy to bring it back as a deprecated\ntype.\n\n---------\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "2c08ddb4fe1e056d23baeab22855f4674904b019",
      "tree": "1c6683905317c68fc149d62d3881344b6d931325",
      "parents": [
        "355532244055cdf98f91e59cd3fbcde2ecbbd7a5"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Mon Mar 30 14:24:28 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:24:28 2026 +0000"
      },
      "message": "ci: Add datafusion/sql as a folder to trigger extended tests for on changes (#21255)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- N/A.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n#21126 merged a change that broke the extended tests because its changes\nwere scoped to a folder that isn\u0027t watched for extended tests on PRs. We\nshould watch this folder for changes as well.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n- Watch `datafusion/sql` changes on PRs to trigger extended CI tests as\nwell.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n- Existing CI.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n- No."
    },
    {
      "commit": "355532244055cdf98f91e59cd3fbcde2ecbbd7a5",
      "tree": "605493a8e4e5faa21a3e51f7b372bbe503a60a0c",
      "parents": [
        "9385c70c77e57b10e7aa869450a2786fae69fbb6"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Mon Mar 30 21:14:49 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:14:49 2026 +0000"
      },
      "message": "[Minor] add non topk benchmarks for utf8/utf8view string aggregates (#21073)\n\n## Which issue does this PR close?\n- Closes #19713.\n\n## Rationale for this change\nDetails are in #19713 but main idea is to compare non-topk and topk test\nresults so that we can compare performances\n\n## What changes are included in this PR?\nAdded non topk benchmark tests. \n\n## Are these changes tested?\nOnly test changes\n\n## Are there any user-facing changes?\nNo"
    },
    {
      "commit": "9385c70c77e57b10e7aa869450a2786fae69fbb6",
      "tree": "4f8d7fedcc55bf6b7b96fe00cf36ab92b0c5415b",
      "parents": [
        "0be5982a913e14bb0d41bd459b956ac4b6e04dae"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Mon Mar 30 19:09:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:09:46 2026 +0000"
      },
      "message": "kill `check_run_id` and `pr_number` from extended tests (#21228)\n\nfollow up on https://github.com/apache/datafusion/pull/17119"
    },
    {
      "commit": "0be5982a913e14bb0d41bd459b956ac4b6e04dae",
      "tree": "52709644375d0209abbc8ef1d387d81b0d65cbe7",
      "parents": [
        "010e5ee04bb51689ca31c99a133f33809dfc1bed"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Mon Mar 30 11:40:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 15:40:29 2026 +0000"
      },
      "message": "perf: sort-merge join (SMJ) batch deferred filtering and move mark joins to bitwise stream. Near-unique LEFT and FULL SMJ 20-50x faster (#21184)\n\n## Which issue does this PR close?\n\nPartially addresses #20910. Fixes #21197.\n\n## Rationale for this change\n\nSort-merge join with a filter on outer joins (LEFT/RIGHT/FULL) runs\n`process_filtered_batches()` on every key transition in the Init state.\nWith near-unique keys (1:1 cardinality), this means running the full\ndeferred filtering pipeline (concat + `get_corrected_filter_mask` +\n`filter_record_batch_by_join_type`) once per row — making filtered\nLEFT/RIGHT/FULL **55x slower** than INNER for 10M unique keys.\n\nAdditionally, mark join logic in `MaterializingSortMergeJoinStream`\nmaterializes full `(streamed, buffered)` pairs only to discard most of\nthem via `get_corrected_filter_mask()`. Mark joins are structurally\nidentical to semi joins (one output row per outer row with a boolean\nresult) and belong in `BitwiseSortMergeJoinStream`, which avoids pair\nmaterialization entirely using a per-outer-batch bitset.\n\n## What changes are included in this PR?\n\nThree areas of improvement, building on the specialized semi/anti stream\nfrom #20806:\n\n**1. Move mark joins to `BitwiseSortMergeJoinStream`**\n- Match on join type; `emit_outer_batch()` emits all rows with the match\nbitset as a boolean column (vs semi\u0027s filter / anti\u0027s invert-and-filter)\n- Route `LeftMark`/`RightMark` from `SortMergeJoinExec::execute()` to\nthe bitwise stream\n- Remove all mark-specific logic from `MaterializingSortMergeJoinStream`\n(`mark_row_as_match`, `is_not_null` column generation, mark arms in\nfilter correction)\n\n**2. Batch filter evaluation in `freeze_streamed()`**\n- Split `freeze_streamed()` into null-joined classification +\n`freeze_streamed_matched()` for batched materialization\n- Collect indices across chunks, materialize left/right columns once\nusing tiered Arrow kernels (`slice` → `take` → `interleave`)\n- Single `RecordBatch` construction and single `expression.evaluate()`\nper freeze instead of per chunk\n- Vectorize `append_filter_metadata()` using builder `extend()` instead\nof per-element loop\n\n**3. Batch deferred filtering in Init state** (this is the big win for\nQ22 and Q23)\n- Gate `process_filtered_batches()` on accumulated rows \u003e\u003d `batch_size`\ninstead of running on every Init entry\n- Accumulated data bounded to ~2×batch_size (one from\n`freeze_dequeuing_buffered`, one accumulating toward next freeze) — does\nnot reintroduce unbounded buffering fixed by PR #20482\n- `Exhausted` state flushes any remainder\n\n**Cleanup:**\n- Rename `SortMergeJoinStream` → `MaterializingSortMergeJoinStream`\n(materializes explicit row pairs for join output) and\n`SemiAntiMarkSortMergeJoinStream` → `BitwiseSortMergeJoinStream` (tracks\nmatches via boolean bitset)\n- Consolidate `semi_anti_mark_sort_merge_join/` into `sort_merge_join/`\nas `bitwise_stream.rs` / `bitwise_tests.rs`; rename `stream.rs` →\n`materializing_stream.rs` and `tests.rs` → `materializing_tests.rs`\n- Consolidate `SpillManager` construction into\n`SortMergeJoinExec::execute()` (shared across both streams); move\n`peak_mem_used` gauge into `BitwiseSortMergeJoinStream::try_new`\n- `MaterializingSortMergeJoinStream` now handles only\nInner/Left/Right/Full — all semi/anti/mark branching removed\n- `get_corrected_filter_mask()`: merge identical Left/Right/Full\nbranches; add null-metadata passthrough for already-null-joined rows\n- `filter_record_batch_by_join_type()`: rewrite from `filter(true) +\nfilter(false) + concat` to `zip()` for in-place null-joining — preserves\nrow ordering and removes `create_null_joined_batch()` entirely; add\nearly return for empty batches\n- `filter_record_batch_by_join_type()`: use `compute::filter()` directly\non `BooleanArray` instead of wrapping in temporary `RecordBatch`\n\n## Benchmarks\n\n`cargo run --release --bin dfbench -- smj`\n\n| Query | Join Type | Rows | Keys | Filter | Main (ms) | PR (ms) |\nSpeedup |\n\n|-------|-----------|------|------|--------|-----------|---------|---------|\n| Q1 | INNER | 1M×1M | 1:1 | — | 16.3 | 14.4 | 1.1x |\n| Q2 | INNER | 1M×10M | 1:10 | — | 117.4 | 120.1 | 1.0x |\n| Q3 | INNER | 1M×1M | 1:100 | — | 74.2 | 66.6 | 1.1x |\n| Q4 | INNER | 1M×10M | 1:10 | 1% | 17.1 | 15.1 | 1.1x |\n| Q5 | INNER | 1M×1M | 1:100 | 10% | 18.4 | 14.4 | 1.3x |\n| Q6 | LEFT | 1M×10M | 1:10 | — | 129.3 | 122.7 | 1.1x |\n| Q7 | LEFT | 1M×10M | 1:10 | 50% | 150.2 | 142.2 | 1.1x |\n| Q8 | FULL | 1M×1M | 1:10 | — | 16.6 | 16.7 | 1.0x |\n| Q9 | FULL | 1M×10M | 1:10 | 10% | 153.5 | 136.2 | 1.1x |\n| Q10 | LEFT SEMI | 1M×10M | 1:10 | — | 53.1 | 53.1 | 1.0x |\n| Q11 | LEFT SEMI | 1M×10M | 1:10 | 1% | 15.5 | 14.7 | 1.1x |\n| Q12 | LEFT SEMI | 1M×10M | 1:10 | 50% | 65.0 | 67.3 | 1.0x |\n| Q13 | LEFT SEMI | 1M×10M | 1:10 | 90% | 105.7 | 109.8 | 1.0x |\n| Q14 | LEFT ANTI | 1M×10M | 1:10 | — | 54.3 | 53.9 | 1.0x |\n| Q15 | LEFT ANTI | 1M×10M | 1:10 | partial | 51.5 | 50.5 | 1.0x |\n| Q16 | LEFT ANTI | 1M×1M | 1:1 | — | 10.3 | 11.3 | 0.9x |\n| Q17 | INNER | 1M×50M | 1:50 | 5% | 75.9 | 79.0 | 1.0x |\n| Q18 | LEFT SEMI | 1M×50M | 1:50 | 2% | 50.2 | 49.0 | 1.0x |\n| Q19 | LEFT ANTI | 1M×50M | 1:50 | partial | 336.4 | 344.2 | 1.0x |\n| Q20 | INNER | 1M×10M | 1:100 | GROUP BY | 763.7 | 803.9 | 1.0x |\n| Q21 | INNER | 10M×10M | 1:1 | 50% | 186.1 | 187.8 | 1.0x |\n| Q22 | LEFT | 10M×10M | 1:1 | 50% | 10,193.8 | 185.8 | **54.9x** |\n| Q23 | FULL | 10M×10M | 1:1 | 50% | 10,194.7 | 233.6 | **43.6x** |\n| Q24 | LEFT MARK | 1M×10M | 1:10 | 1% | FAILS | 15.1 | — |\n| Q25 | LEFT MARK | 1M×10M | 1:10 | 50% | FAILS | 67.3 | — |\n| Q26 | LEFT MARK | 1M×10M | 1:10 | 90% | FAILS | 110.0 | — |\n\nGeneral workload (Q1-Q20, various join\ntypes/cardinalities/selectivities): no regressions.\n\n## Are these changes tested?\n\nIn addition to existing unit and sqllogictests:\n\n- I ran 50 iterations of the fuzz tests (modified to only test against\nhash join as the baseline because nested loop join takes too long)\n`cargo test -p datafusion --features extended_tests --test fuzz --\njoin_fuzz`\n- One new sqllogictest for #21197 that fails on main\n- Four new unit tests: three for full join with filter that spills\n- One new fuzz test to exercise full join with filter that spills\n- New benchmark queries Q21-Q23: 10M×10M unique keys with 50% join\nfilter for INNER/LEFT/FULL — exercises the degenerate case this PR fixes\n- New benchmark queries Q24-Q26 duplicated Q11-Q13 but for Mark joins,\nshowing that they have the same performance as other joins (`LeftSemi`)\nthat use this stream\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "010e5ee04bb51689ca31c99a133f33809dfc1bed",
      "tree": "51714e47b5c1893f4e6a14ca37c704794758bf78",
      "parents": [
        "0a8bb2933aeb81a1b61cb634b52927a7c0562d69"
      ],
      "author": {
        "name": "Yu-Chuan Hung",
        "email": "86523891+CuteChuanChuan@users.noreply.github.com",
        "time": "Mon Mar 30 23:07:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 15:07:24 2026 +0000"
      },
      "message": "ci: use ubuntu-slim runner for lightweight CI jobs (#21252)\n\n## Which issue does this PR close?\n\n- Closes #20870.\n\n## Rationale for this change\n\n`ubuntu-slim` is a cost-efficient runner that can save ASF\ninfrastructure resources for lightweight CI jobs. This was raised in the\nApache ORC project and adopted by other Apache projects like\niceberg-rust (apache/iceberg-rust#2187).\n\n## What changes are included in this PR?\n\nSwitch 6 lightweight CI jobs from `ubuntu-latest` to `ubuntu-slim`:\n- `take.yml`: `issue_assign` — curl API calls only\n- `large_files.yml`: `check-files` — git commands only\n- `stale.yml`: `close-stale-prs` — actions/stale\n- `labeler.yml`: `process` — actions/labeler\n- `codeql.yml`: `analyze` — codeql-action on Actions YAML\n- `dev.yml`: `prettier` — setup-node + prettier\n\n## Are these changes tested?\n\nCI only — this changes the runner type, not workflow logic.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "0a8bb2933aeb81a1b61cb634b52927a7c0562d69",
      "tree": "eccee872616949b675b318c2563512f0a72bcda0",
      "parents": [
        "2aab55941db3f47c6fedafc8a539eacfb70b2f32"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Mon Mar 30 11:06:08 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 15:06:08 2026 +0000"
      },
      "message": "fix: Revert \"Fix/support duplicate column names #6543 (#21126)\" (#21254)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #21253.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n- Get extended CI tests running again.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n- This reverts commit aadae6bda34f8b5bb33ef7d70b44404e5730e2ea.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nExisting CI.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\nNo change since a released version. #21126 fixed a bug that this will\nreintroduce, but we\u0027ll need to fix test files first.\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "2aab55941db3f47c6fedafc8a539eacfb70b2f32",
      "tree": "57bebb89077b66163e5d56a4cd0731eeba4e9e99",
      "parents": [
        "51d06df0433f2fecae9ff4f90900516a243c74f2"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Mon Mar 30 15:46:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:46:25 2026 +0000"
      },
      "message": "Fix FilterExec tree render missing fetch display (#21230)\n\n## Which issue does this PR close?\n\nCloses #21229\n\n## Rationale for this change\n\nWhen `FilterExec` has a `fetch` value (from limit pushdown), `EXPLAIN\nFORMAT TREE` does not show it, while `EXPLAIN` (default/verbose)\ncorrectly shows `fetch\u003dN`. This makes the tree format output incomplete\nand can be confusing when debugging query plans.\n\n## What changes are included in this PR?\n\n- Add `fetch` display to `FilterExec::fmt_as` for `TreeRender` format\n- Add sqllogictest to verify `fetch` appears in tree format output\n\n## How are these changes tested?\n\n- Existing `limit` sqllogictests pass\n- New sqllogictest added to verify `fetch` is shown in `EXPLAIN FORMAT\nTREE`\n\n## Are these changes safe?\n\nYes — display-only change, no execution logic affected.\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "51d06df0433f2fecae9ff4f90900516a243c74f2",
      "tree": "f021196ce9c7329952bb68c7f7c686add776605a",
      "parents": [
        "eb68cf3aba45b282a5ad110b62a5b243b24741f9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 30 10:39:58 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:39:58 2026 +0000"
      },
      "message": "chore(deps): bump cryptography from 46.0.5 to 46.0.6 (#21224)\n\nBumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5\nto 46.0.6.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e46.0.6 - 2026-03-25\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**: Fixed a bug where name constraints were not\napplied\n  to peer names during verification when the leaf certificate contains a\nwildcard DNS SAN. Ordinary X.509 topologies are not affected by this\nbug,\nincluding those used by the Web PKI. Credit to **Oleh Konko (1seal)**\nfor\n  reporting the issue. **CVE-2026-34073**\n\u003cp\u003e.. _v46-0-5:\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pyca/cryptography/commit/91d728897bdad30cd5c79a2b23e207f1f050d587\"\u003e\u003ccode\u003e91d7288\u003c/code\u003e\u003c/a\u003e\nCherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/pyca/cryptography/issues/14542\"\u003e#14542\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/pyca/cryptography/issues/14543\"\u003e#14543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/pyca/cryptography/compare/46.0.5...46.0.6\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dcryptography\u0026package-manager\u003duv\u0026previous-version\u003d46.0.5\u0026new-version\u003d46.0.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts\npage](https://github.com/apache/datafusion/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "eb68cf3aba45b282a5ad110b62a5b243b24741f9",
      "tree": "6ad2a856853ac47803e06745977e02f3f0578038",
      "parents": [
        "3b42dcf76f27a7ea971b94f124e6a34f2a775467"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 30 10:38:56 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:38:56 2026 +0000"
      },
      "message": "chore(deps-dev): bump node-forge from 1.3.2 to 1.4.0 in /datafusion/wasmtest/datafusion-wasm-app (#21225)\n\nBumps [node-forge](https://github.com/digitalbazaar/forge) from 1.3.2 to\n1.4.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md\"\u003enode-forge\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.0 - 2026-03-24\u003c/h2\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: Denial of Service in\n\u003ccode\u003eBigInteger.modInverse()\u003c/code\u003e\n\u003cul\u003e\n\u003cli\u003eA Denial of Service (DoS) vulnerability exists due to an infinite\nloop in\nthe \u003ccode\u003eBigInteger.modInverse()\u003c/code\u003e function (inherited from the\nbundled jsbn\nlibrary). When \u003ccode\u003emodInverse()\u003c/code\u003e is called with a zero value as\ninput, the\ninternal Extended Euclidean Algorithm enters an unreachable exit\ncondition,\ncausing the process to hang indefinitely and consume 100% CPU.\u003c/li\u003e\n\u003cli\u003eReported by Kr0emer.\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca\nhref\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-33891\"\u003eCVE-2026-33891\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-5m6q-g25r-mvwx\"\u003eGHSA-5gfm-wpxj-wjgq\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: Signature forgery in RSA-PKCS due to ASN.1\nextra field.\n\u003cul\u003e\n\u003cli\u003eRSASSA PKCS#1 v1.5 signature verification accepts forged signatures\nfor low\npublic exponent keys (e\u003d3). Attackers can forge signatures by stuffing\n\u0026quot;garbage\u0026quot; bytes within the ASN.1 structure in order to\nconstruct a\nsignature that passes verification, enabling Bleichenbacher style\nforgery.\nThis issue is similar to CVE-2022-24771, but adds bytes in an addition\nfield within the ASN.1 structure, rather than outside of it.\u003c/li\u003e\n\u003cli\u003eAdditionally, forge does not validate that signatures include a\nminimum of\n8 bytes of padding as defined by the specification, providing attackers\nadditional space to construct Bleichenbacher forgeries.\u003c/li\u003e\n\u003cli\u003eReported as part of a U.C. Berkeley security research project by:\n\u003cul\u003e\n\u003cli\u003eAustin Chu, Sohee Kim, and Corban Villa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca\nhref\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-33894\"\u003eCVE-2026-33894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-ppp5-5v6c-4jwp\"\u003eGHSA-ppp5-5v6c-4jwp\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: Signature forgery in Ed25519 due to missing S\n\u0026lt; L check.\n\u003cul\u003e\n\u003cli\u003eEd25519 signature verification accepts forged non-canonical\nsignatures\nwhere the scalar S is not reduced modulo the group order (S \u0026gt;\u003d L). A\nvalid\nsignature and its S + L variant both verify in forge, while Node.js\ncrypto.verify (OpenSSL-backed) rejects the S + L variant, as defined by\nthe\nspecification. This class of signature malleability has been exploited\nin\npractice to bypass authentication and authorization logic (see\nCVE-2026-25793, CVE-2022-35961). Applications relying on signature\nuniqueness (i.e., dedup by signature bytes, replay tracking,\nsigned-object\ncanonicalization checks) may be bypassed.\u003c/li\u003e\n\u003cli\u003eReported as part of a U.C. Berkeley security research project by:\n\u003cul\u003e\n\u003cli\u003eAustin Chu, Sohee Kim, and Corban Villa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca\nhref\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-33895\"\u003eCVE-2026-33895\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-q67f-28xg-22rw\"\u003eGHSA-q67f-28xg-22rw\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHIGH\u003c/strong\u003e: \u003ccode\u003ebasicConstraints\u003c/code\u003e bypass in\ncertificate chain verification.\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epki.verifyCertificateChain()\u003c/code\u003e does not enforce RFC 5280\n\u003ccode\u003ebasicConstraints\u003c/code\u003e\nrequirements when an intermediate certificate lacks both the\n\u003ccode\u003ebasicConstraints\u003c/code\u003e and \u003ccode\u003ekeyUsage\u003c/code\u003e extensions. This\nallows any leaf\ncertificate (without these extensions) to act as a CA and sign other\ncertificates, which node-forge will accept as valid.\u003c/li\u003e\n\u003cli\u003eReported by Doruk Tan Ozturk (\u003ca\nhref\u003d\"https://github.com/peaktwilight\"\u003e\u003ccode\u003e@​peaktwilight\u003c/code\u003e\u003c/a\u003e)\n- doruk.ch\u003c/li\u003e\n\u003cli\u003eCVE ID: \u003ca\nhref\u003d\"https://www.cve.org/CVERecord?id\u003dCVE-2026-33896\"\u003eCVE-2026-33896\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGHSA ID: \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/security/advisories/GHSA-2328-f5f3-gj25\"\u003eGHSA-2328-f5f3-gj25\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/fa385f92440879601240020f158bed68e444e83a\"\u003e\u003ccode\u003efa385f9\u003c/code\u003e\u003c/a\u003e\nRelease 1.4.0.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/07d4e162762ed4fdab5caca9ebf78237fcf85339\"\u003e\u003ccode\u003e07d4e16\u003c/code\u003e\u003c/a\u003e\nUpdate changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/cb90fd92091ee34e4abab3ad0c835eeea3d06c3e\"\u003e\u003ccode\u003ecb90fd9\u003c/code\u003e\u003c/a\u003e\nUpdate changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/963e7c5c7b0f03de1b28a1e5a42a6bafda4cf711\"\u003e\u003ccode\u003e963e7c5\u003c/code\u003e\u003c/a\u003e\nAdd unit test for \u0026quot;pseudonym\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/f0b6f5b7c5d1c918240e975e0cade4f47d005446\"\u003e\u003ccode\u003ef0b6f5b\u003c/code\u003e\u003c/a\u003e\nAdd pseudonym OID\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/3df48a311d4b53dc6493b7a47a8d07f3669957d9\"\u003e\u003ccode\u003e3df48a3\u003c/code\u003e\u003c/a\u003e\nFix missing CVE ID.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/2e492832fb25227e6b647cbe1ac981c123171e90\"\u003e\u003ccode\u003e2e49283\u003c/code\u003e\u003c/a\u003e\nAdd x509 \u003ccode\u003ebasicConstraints\u003c/code\u003e check.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/bdecf11571c9f1a487cc0fe72fe78ff6dfa96b85\"\u003e\u003ccode\u003ebdecf11\u003c/code\u003e\u003c/a\u003e\nAdd canonical signature scaler check for S \u0026lt; L.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/af094e69c60ac5f7b29f2b1957c53ae5e12fd4a0\"\u003e\u003ccode\u003eaf094e6\u003c/code\u003e\u003c/a\u003e\nAdd RSA padding and DigestInfo length checks.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/commit/796eeb1673f6ec636fda02dfc295047d9f7aefe0\"\u003e\u003ccode\u003e796eeb1\u003c/code\u003e\u003c/a\u003e\nImprove jsbn fix.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/digitalbazaar/forge/compare/v1.3.2...v1.4.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dnode-forge\u0026package-manager\u003dnpm_and_yarn\u0026previous-version\u003d1.3.2\u0026new-version\u003d1.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts\npage](https://github.com/apache/datafusion/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "3b42dcf76f27a7ea971b94f124e6a34f2a775467",
      "tree": "d9b499a5525fa52fa6f7bd9d8a865793c304d50f",
      "parents": [
        "81faba329373a99443757f5cd1017820cc81b32d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 30 10:37:10 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:37:10 2026 +0000"
      },
      "message": "chore(deps): bump serialize-javascript, terser-webpack-plugin and copy-webpack-plugin in /datafusion/wasmtest/datafusion-wasm-app (#21235)\n\nRemoves\n[serialize-javascript](https://github.com/yahoo/serialize-javascript).\nIt\u0027s no longer used after updating ancestor dependencies\n[serialize-javascript](https://github.com/yahoo/serialize-javascript),\n[terser-webpack-plugin](https://github.com/webpack/terser-webpack-plugin)\nand\n[copy-webpack-plugin](https://github.com/webpack/copy-webpack-plugin).\nThese dependencies need to be updated together.\n\nRemoves `serialize-javascript`\n\nUpdates `terser-webpack-plugin` from 5.3.16 to 5.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/releases\"\u003eterser-webpack-plugin\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.4.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/compare/v5.3.17...v5.4.0\"\u003e5.4.0\u003c/a\u003e\n(2026-03-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded ability to minimize \u003ccode\u003eJSON\u003c/code\u003e using\n\u003ccode\u003ejsonMinify\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/terser-webpack-plugin/issues/657\"\u003e#657\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/29ac915e58ec2ff81346d936ee2cf63ac6e300b8\"\u003e29ac915\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.3.17\u003c/h2\u003e\n\u003ch3\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/compare/v5.3.16...v5.3.17\"\u003e5.3.17\u003c/a\u003e\n(2026-03-03)\u003c/h3\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate \u003ccode\u003eserialize-javascript\u003c/code\u003e (\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/37c490c326ffe3416b50028a91bfba5661e1344e\"\u003e37c490c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/blob/main/CHANGELOG.md\"\u003eterser-webpack-plugin\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/compare/v5.3.17...v5.4.0\"\u003e5.4.0\u003c/a\u003e\n(2026-03-10)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadded ability to minimizer \u003ccode\u003eJSON\u003c/code\u003e using\n\u003ccode\u003ejsonMinify\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/terser-webpack-plugin/issues/657\"\u003e#657\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/29ac915e58ec2ff81346d936ee2cf63ac6e300b8\"\u003e29ac915\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/compare/v5.3.16...v5.3.17\"\u003e5.3.17\u003c/a\u003e\n(2026-03-03)\u003c/h3\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate \u003ccode\u003eserialize-javascript\u003c/code\u003e (\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/37c490c326ffe3416b50028a91bfba5661e1344e\"\u003e37c490c\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/543da6e282d654d804c8d9d86acdd5fde23d80bf\"\u003e\u003ccode\u003e543da6e\u003c/code\u003e\u003c/a\u003e\nchore(release): 5.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/29ac915e58ec2ff81346d936ee2cf63ac6e300b8\"\u003e\u003ccode\u003e29ac915\u003c/code\u003e\u003c/a\u003e\nfeat: added ability to minimizer \u003ccode\u003eJSON\u003c/code\u003e using\n\u003ccode\u003ejsonMinify\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/terser-webpack-plugin/issues/657\"\u003e#657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/e505deecb9230357b77532b88eda9392a682ba9e\"\u003e\u003ccode\u003ee505dee\u003c/code\u003e\u003c/a\u003e\nfix: align with code\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/6f911ffba16ccd2bcfa99cd0bd7e956cab53d147\"\u003e\u003ccode\u003e6f911ff\u003c/code\u003e\u003c/a\u003e\nchore(release): 5.3.17\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/37c490c326ffe3416b50028a91bfba5661e1344e\"\u003e\u003ccode\u003e37c490c\u003c/code\u003e\u003c/a\u003e\nfix: update \u003ccode\u003eserialize-javascript\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/207764f3ccbab62130b30a97d2df2780faf1bccd\"\u003e\u003ccode\u003e207764f\u003c/code\u003e\u003c/a\u003e\nchore: deps update (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/terser-webpack-plugin/issues/652\"\u003e#652\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/commit/a85ab47e575f8ce5e750dad714f2a98382de1774\"\u003e\u003ccode\u003ea85ab47\u003c/code\u003e\u003c/a\u003e\nchore(deps-dev): bump ajv from 6.12.6 to 6.14.0 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/terser-webpack-plugin/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/webpack/terser-webpack-plugin/compare/v5.3.16...v5.4.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `copy-webpack-plugin` from 12.0.2 to 14.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/releases\"\u003ecopy-webpack-plugin\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev14.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/compare/v13.0.1...v14.0.0\"\u003e14.0.0\u003c/a\u003e\n(2026-03-02)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eminimum supported \u003ccode\u003eNode.js\u003c/code\u003e version is\n\u003ccode\u003e20.9.0\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/819\"\u003e#819\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/28812036cea4aa3e76e75597b0cd72eec53fe70d\"\u003e2881203\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate \u003ccode\u003eserialize-javascript\u003c/code\u003e to fix security\nproblems\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev13.0.1\u003c/h2\u003e\n\u003ch3\u003e\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/compare/v13.0.0...v13.0.1\"\u003e13.0.1\u003c/a\u003e\n(2025-08-12)\u003c/h3\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebetter handling globs for watching (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/808\"\u003e#808\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/a527c8985ab1fcd32b9a581df26653268e12ce2c\"\u003ea527c89\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev13.0.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/compare/v12.0.2...v13.0.0\"\u003e13.0.0\u003c/a\u003e\n(2025-02-27)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eswitch from \u003ccode\u003eglobby\u003c/code\u003e and \u003ccode\u003efast-glob\u003c/code\u003e to\n\u003ccode\u003etinyglobby\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/795\"\u003e#795\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/19fd937705ccb2161619e1e919f0b37b47453368\"\u003e19fd937\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor more information please visit \u003ca\nhref\u003d\"https://github.com/SuperchupuDev/tinyglobby\"\u003e\u003ccode\u003etinyglobby\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe breaking change only affects the developer who used these options\n- \u003ca\nhref\u003d\"https://github.com/sindresorhus/globby#gitignore\"\u003e\u003ccode\u003egitignore\u003c/code\u003e\u003c/a\u003e\nand \u003ca\nhref\u003d\"https://github.com/sindresorhus/globby#gitignore\"\u003e\u003ccode\u003eignoreFiles\u003c/code\u003e\u003c/a\u003e\nin the \u003ccode\u003eglobOptions\u003c/code\u003e option.\u003c/p\u003e\n\u003cp\u003ePlease migrate to the \u003ca\nhref\u003d\"https://github.com/SuperchupuDev/tinyglobby#options\"\u003e\u003ccode\u003eignore\u003c/code\u003e\u003c/a\u003e\noption.\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econcurrency option is limited to files now (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/796\"\u003e#796\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/d42469cfdc99a81f0f0ba97f6561f0e0db143994\"\u003ed42469c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ethe order of patterns provided by the developer is respected\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/blob/main/CHANGELOG.md\"\u003ecopy-webpack-plugin\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/compare/v13.0.1...v14.0.0\"\u003e14.0.0\u003c/a\u003e\n(2026-03-02)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eminimum supported \u003ccode\u003eNode.js\u003c/code\u003e version is\n\u003ccode\u003e20.9.0\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/819\"\u003e#819\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/28812036cea4aa3e76e75597b0cd72eec53fe70d\"\u003e2881203\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eupdate \u003ccode\u003eserialize-javascript\u003c/code\u003e to fix security\nproblems\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/compare/v13.0.0...v13.0.1\"\u003e13.0.1\u003c/a\u003e\n(2025-08-12)\u003c/h3\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebetter handling globs for watching (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/808\"\u003e#808\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/a527c8985ab1fcd32b9a581df26653268e12ce2c\"\u003ea527c89\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/compare/v12.0.2...v13.0.0\"\u003e13.0.0\u003c/a\u003e\n(2025-02-27)\u003c/h2\u003e\n\u003ch3\u003e⚠ BREAKING CHANGES\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eswitch from \u003ccode\u003eglobby\u003c/code\u003e and \u003ccode\u003efast-glob\u003c/code\u003e to\n\u003ccode\u003etinyglobby\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/795\"\u003e#795\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/19fd937705ccb2161619e1e919f0b37b47453368\"\u003e19fd937\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor more information please visit \u003ca\nhref\u003d\"https://github.com/SuperchupuDev/tinyglobby\"\u003e\u003ccode\u003etinyglobby\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe breaking change only affects the developer who used these options\n- \u003ca\nhref\u003d\"https://github.com/sindresorhus/globby#gitignore\"\u003e\u003ccode\u003egitignore\u003c/code\u003e\u003c/a\u003e\nand \u003ca\nhref\u003d\"https://github.com/sindresorhus/globby#gitignore\"\u003e\u003ccode\u003eignoreFiles\u003c/code\u003e\u003c/a\u003e\nin the \u003ccode\u003eglobOptions\u003c/code\u003e option.\u003c/p\u003e\n\u003cp\u003ePlease migrate to the \u003ca\nhref\u003d\"https://github.com/SuperchupuDev/tinyglobby#options\"\u003e\u003ccode\u003eignore\u003c/code\u003e\u003c/a\u003e\noption.\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econcurrency option is limited to files now (\u003ca\nhref\u003d\"https://redirect.github.com/webpack-contrib/copy-webpack-plugin/issues/796\"\u003e#796\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://github.com/webpack-contrib/copy-webpack-plugin/commit/d42469cfdc99a81f0f0ba97f6561f0e0db143994\"\u003ed42469c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ethe order of patterns provided by the developer is respected\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/18eb9d9fd4d01bfb886ae60ead7df184d75ba265\"\u003e\u003ccode\u003e18eb9d9\u003c/code\u003e\u003c/a\u003e\nchore(release): 14.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/28812036cea4aa3e76e75597b0cd72eec53fe70d\"\u003e\u003ccode\u003e2881203\u003c/code\u003e\u003c/a\u003e\nrefactor!: minimum supported \u003ccode\u003eNode.js\u003c/code\u003e version is\n\u003ccode\u003e20.9.0\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/819\"\u003e#819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/9dc3d31182b6b240c14f38134f11960cdafda613\"\u003e\u003ccode\u003e9dc3d31\u003c/code\u003e\u003c/a\u003e\nchore(deps-dev): bump ajv from 6.12.6 to 6.14.0 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/815\"\u003e#815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/5cf5a1dc8f6d2c4c6d36825eb252109f1b763cd7\"\u003e\u003ccode\u003e5cf5a1d\u003c/code\u003e\u003c/a\u003e\nchore(deps): update (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/814\"\u003e#814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/3dd5b6ee7be9ebd20c3bf12e7084e15a504ae3d8\"\u003e\u003ccode\u003e3dd5b6e\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump js-yaml (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/813\"\u003e#813\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/9ac38bb37f6fba3592f383fe880cd448119099a6\"\u003e\u003ccode\u003e9ac38bb\u003c/code\u003e\u003c/a\u003e\nchore(deps-dev): bump lodash from 4.17.21 to 4.17.23 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/812\"\u003e#812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/6a16bac55dafc6eaad71d36d5bf6fcdd214a0f63\"\u003e\u003ccode\u003e6a16bac\u003c/code\u003e\u003c/a\u003e\nUpdate link to contributing guidelines in README\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/a1625f9990f876753377cf4b90ea1aabce15f7c1\"\u003e\u003ccode\u003ea1625f9\u003c/code\u003e\u003c/a\u003e\nchore: migrate from contrib (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/810\"\u003e#810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/9f6f20444bb25924d3eabcf92feaeadf728b5ab7\"\u003e\u003ccode\u003e9f6f204\u003c/code\u003e\u003c/a\u003e\nchore: update github actions/checkout from v4 to v5 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/copy-webpack-plugin/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/commit/73a30bcabd31457674d818553aa64ebe54f4c064\"\u003e\u003ccode\u003e73a30bc\u003c/code\u003e\u003c/a\u003e\nchore(release): 13.0.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/webpack/copy-webpack-plugin/compare/v12.0.2...v14.0.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eInstall script changes\u003c/summary\u003e\n\u003cp\u003eThis version modifies \u003ccode\u003eprepare\u003c/code\u003e script that runs during\ninstallation. Review the package contents before updating.\u003c/p\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts\npage](https://github.com/apache/datafusion/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "81faba329373a99443757f5cd1017820cc81b32d",
      "tree": "19d6492d678f6013dfd6b044176b9e1819813093",
      "parents": [
        "a0869e95ed65b55bda79ce0d3067c43b4724b273"
      ],
      "author": {
        "name": "Tobias Schwarzinger",
        "email": "tobias.schwarzinger@tuwien.ac.at",
        "time": "Mon Mar 30 09:27:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:27:26 2026 +0000"
      },
      "message": "Basic Extension Type Registry Implementation (#20312)\n\n## Which issue does this PR close?\n\nThis is a PR based on https://github.com/apache/datafusion/pull/18552\nthat contains a basic implementation of an extension type registry. The\ndriving use case is pretty-printing data frames with custom types.\n\n- Closes https://github.com/apache/datafusion/issues/18223.\n\nPing @paleolimbot @adriangb if you\u0027re still interested.\n\n### Most Important Changes to the Old PR\n\n- We no longer use the Logical Type, as there is no real conses on how\nDataFusion should allow \"inline\" references to extension types. As a\nconsequence, the formatting query plans use case in the old PR no longer\nworks. Extension types can only be used where DataFusion has a reference\nto a registry (e.g., DataFrame pretty-printing). @paleolimbot I\u0027ve\ncalled it `DFExtensionType` instead of `BoundExtensionType` to avoid the\nneed of explaining \"bind\". If you think there is merit in the other\nterm, let me know. I think otherwise, this aligns with your proposal.\n- Added a more complex example with a parameterized type to demonstrate\nthe entire ability of the API\n- No extension types are registered by default, users must opt-in\n\n## Rationale for this change\n\n- Allow customized behavior based on extension type metadata.\n\n## What changes are included in this PR?\n\n- Add an `ExtensionTypeRegistry`\n- Add `DFArrayFormatterFactory` which creates custom pretty-printers\nwhen formatting data frames.\n- Add an extension type registry to the `SessionState` /\n`SessionContext`\n- A Full Example of using the API\n- An implementation for the UUID canonical extension type\n\n## Are these changes tested?\n\n- Yes, but only two end-to-end tests.\n  - One for pretty-printing UUID values\n  - One for pretty-printing in the example\n\nHappy to add more tests if this PR has a chance of being merged\n\n## Are there any user-facing changes?\n\nYes, the entire Extension Type API is new."
    },
    {
      "commit": "a0869e95ed65b55bda79ce0d3067c43b4724b273",
      "tree": "0449189cff8ab4688d794a4919dd0359135871d7",
      "parents": [
        "80a8bb8a7be146d01ee30255c8a7a082b370a694"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Mon Mar 30 15:19:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:19:59 2026 +0000"
      },
      "message": "chore(benchmark): Fix/update compile profile benchmark (#21223)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\nThe existing compile profile benchmark is not able to run due to the\nbenchmark binary change, and recently there are several new profiles\nadded. This PR updates the benchmark.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\nI have tested it locally\n```\nyongting@Yongtings-MacBook-Pro-2 ~/C/d/benchmarks (update-compile-prof…)\u003e ./bench.sh run compile_profile\n...\nSummary\nProfile             Compile         Run        Size\n---------------------------------------------------\ndev                  80.81s      11.26s     238.6MB\nrelease             370.69s       1.01s      62.4MB\nci                    7.51s       7.69s     194.5MB\nci-optimized        215.97s       1.13s     114.0MB\nrelease-nonlto       15.95s       1.05s     128.0MB\nprofiling           953.66s       0.98s      75.9MB\n```\n\nAlso, there is a ongoing work to run benchmarks in CI in case it break\nagain: https://github.com/apache/datafusion/issues/21165\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "80a8bb8a7be146d01ee30255c8a7a082b370a694",
      "tree": "e6c78b787cc7fc2fde2f17ce448307ccce2feb8c",
      "parents": [
        "06b4791d7f04ca0a2c7e8258d436cde48a98b784"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Mon Mar 30 15:18:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 07:18:32 2026 +0000"
      },
      "message": "feat: add sort pushdown benchmark and SLT tests (#21213)\n\n## Which issue does this PR close?\n\n- Related to https://github.com/apache/datafusion/issues/17348\n- Precursor to https://github.com/apache/datafusion/pull/21182\n\n## Rationale for this change\n\nAdd benchmark and integration tests for sort pushdown optimization,\nsplit out from #21182 per [reviewer\nrequest](https://github.com/apache/datafusion/pull/21182#discussion_r3000089388).\nThis allows comparing benchmark results before and after the\noptimization lands, and the SLT diff in #21182 will clearly show which\ntest expectations changed due to the optimization.\n\n## What changes are included in this PR?\n\n### Benchmark\n\nNew `sort-pushdown` benchmark subcommand with 4 queries testing sort\nelimination:\n\n| Query | Description |\n|-------|-------------|\n| Q1 | `ORDER BY l_orderkey ASC` (full scan) |\n| Q2 | `ORDER BY l_orderkey ASC LIMIT 100` |\n| Q3 | `SELECT * ORDER BY l_orderkey ASC` (wide) |\n| Q4 | `SELECT * ORDER BY l_orderkey ASC LIMIT 100` (wide) |\n\nUsage:\n\\`\\`\\`bash\n./bench.sh data sort_pushdown\n./bench.sh run sort_pushdown          # baseline\n./bench.sh run sort_pushdown_sorted   # with sort elimination\n\\`\\`\\`\n\n### SLT Integration Tests (5 new groups)\n\n- **Test A**: Non-overlapping files + WITH ORDER → Sort eliminated\n(single partition)\n- **Test B**: Overlapping files → SortExec retained (baseline, files in\noriginal order)\n- **Test C**: LIMIT queries (ASC sort elimination + DESC reverse scan)\n- **Test D**: \\`target_partitions\u003d2\\` → SPM + per-partition sort\nelimination\n- **Test E**: Inferred ordering from Parquet metadata (no WITH ORDER) —\nsingle and multi partition\n\n### Files Changed\n\n| File | Change |\n|------|--------|\n| \\`benchmarks/src/sort_pushdown.rs\\` | New benchmark module |\n| \\`benchmarks/src/lib.rs\\` | Register module |\n| \\`benchmarks/src/bin/dfbench.rs\\` | Register subcommand |\n| \\`benchmarks/bench.sh\\` | Add data/run entries |\n| \\`datafusion/sqllogictest/test_files/sort_pushdown.slt\\` | 5 new SLT\ntest groups |\n\n## Test plan\n\n- [x] \\`cargo clippy -p datafusion-benchmarks\\` — 0 warnings\n- [x] \\`cargo test -p datafusion-sqllogictest -- sort_pushdown\\` — all\ntests pass\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "06b4791d7f04ca0a2c7e8258d436cde48a98b784",
      "tree": "442ac3c44d6a746dc6705bc6ecb46efaefbff0e7",
      "parents": [
        "cc5a3a70493e1b3d5c72903a18e3e46673b3c122"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Mon Mar 30 13:16:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 05:16:35 2026 +0000"
      },
      "message": "fix: Fix `main` compilation failure (#21242)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\nDue to parallel commits\u0027 conflict in #21211 and #21160, the CI is\nfailing, this PR fixes the issue.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "cc5a3a70493e1b3d5c72903a18e3e46673b3c122",
      "tree": "128308831bf849bba10704bf8b21d38a595c38ac",
      "parents": [
        "e57198ab926ab190817dd30dc4cdfeba17ab90a3"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Sun Mar 29 22:57:15 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 02:57:15 2026 +0000"
      },
      "message": "chore: Cleanup Cargo profiles (#21214)\n\n## Which issue does this PR close?\n\n- N/A\n\n## Rationale for this change\n\n* Don\u0027t explicitly set default values when configuring profiles. For\nexample, `release-nonlto` explicitly set several build settings (e.g.,\n`opt_level`, `overflow_checks`) to their default values, which could be\nmisleading.\n* Fix typos, reorder profile configuration, and other general cleanup\n\nNo functional changes.\n\n## What changes are included in this PR?\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "e57198ab926ab190817dd30dc4cdfeba17ab90a3",
      "tree": "6694e390af0908ca7c1291381c8436dd74a22916",
      "parents": [
        "e8831716f19083ecb293bc249db6a7094ac8e08a"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Mon Mar 30 10:39:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 02:39:16 2026 +0000"
      },
      "message": "feat(metric): Add output skewness metric to detect skewed plans easier (#21211)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #.\n\n## Rationale for this change\n\n### Output Skewness Metric\n\nThis introduces a metric to quantify execution skew across partitions,\ninspired by recent work on intra-partition parallelism for Parquet scans\n(https://github.com/apache/datafusion/issues/20529).\ncc @Dandandan and @alamb (I think this is related to your ongoing work)\n\nFor example, a Parquet scan with 4 partitions:\n```\npartition 1: output_rows \u003d 100\npartition 2: output_rows \u003d 0\npartition 3: output_rows \u003d 0\npartition 4: output_rows \u003d 0\n```\nrepresents a highly skewed workload, where most work is concentrated in\na single partition.\n\nThis metric normalizes skew into the range `[0%, 100%]`, where `0%`\nindicates a perfectly balanced distribution and `100%` indicates maximal\nskew. This makes it easy to detect skew via simple thresholds in\nautomated tooling.\n\n### Demo\nRun clickbench q41, the parquet exec has skew score 92%, from `EXPLAIN\nANALYZE VERBOSE` we can verify only 2 out of 14 partitions has output\nrows from the parquet scan.\n```sh\nDataFusion CLI v52.3.0\n\u003e CREATE or replace EXTERNAL TABLE hits STORED AS PARQUET LOCATION \u0027/Users/yongting/Code/datafusion/benchmarks/data/hits_partitioned\u0027;\n0 row(s) fetched.\nElapsed 0.338 seconds.\n\n-- Clickbench Q41\n\u003e explain analyze SELECT \"WindowClientWidth\", \"WindowClientHeight\", COUNT(*) AS PageViews FROM hits WHERE \"CounterID\" \u003d 62 AND \"EventDate\" \u003e\u003d \u00272013-07-01\u0027 AND \"EventDate\" \u003c\u003d \u00272013-07-31\u0027 AND \"IsRefresh\" \u003d 0 AND \"DontCountHits\" \u003d 0 AND \"URLHash\" \u003d 2868770270353813622 GROUP BY \"WindowClientWidth\", \"WindowClientHeight\" ORDER BY PageViews DESC LIMIT 10 OFFSET 10000;\n...\nDataSourceExec: ..., output_rows_skew\u003d92.35%...] |\n```\n---\n\n### Definition\n\nLet `r_i` be the output rows of partition `i`:\n```\n# ranges from [1, partition_count], if perfectly balanced, it reaches partition_count for maximum effective parallelism\neffective_parallelism \u003d (sum(r_i))^2 / sum(r_i^2)\n\n# convert effective parallelism to a skewness from 0%(perfectly balanced) to 100%(extreme skew)\noutput_rows_skew \u003d\n  (1 - (effective_parallelism - 1) / (partition_count - 1)) * 100%\n```\n\nExamples:\n- `[10, 10, 10, 10]` → skew \u003d `0%`\n- `[40, 0, 0, 0]` → skew \u003d `100%`\n\n---\n\n### Motivation\n\nI think there are several more further works to do to tackle the\nskewness, so this metric can help. Even with intra-partition parallelism\n(e.g., morsel-driven Parquet scan), skew can still propagate to\ndownstream operators:\n```\npartition 1: parquet_scan(output_rows\u003d100) → FilterExec(90)\npartition 2: parquet_scan(0)   → FilterExec(0)\npartition 3: parquet_scan(0)   → FilterExec(0)\npartition 4: parquet_scan(0)   → FilterExec(0)\n```\nDownstream operators like `FilterExec` may remain underutilized,\nsuggesting the need for additional techniques such as internal\nparallelism or repartitioning. This metric helps identify such cases and\nguide further optimization.\n\n---\n\n### Why calculate on output_rows\nIt\u0027s easy to implement since `output_rows` are already tracked, the\ndownside is it requires some knowledge to interpret, for instance if we\nsee a large skewness value on parquet DataSource, we want to ensure a)\nparquet has internal parallelism mechanism to evenly distribute the work\nb) the downstream won\u0027t be affected by the produced skewness\n\n## What changes are included in this PR?\n\nAdd a derived `output_rows_skew` to DataSourceExec with parquet source,\nin the follow-ups I think it\u0027s also useful to other datasources, and\nFilterExec (which might also introduce skewness during execution)\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\nsqllogictests\n\n## Are there any user-facing changes?\nNo\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "e8831716f19083ecb293bc249db6a7094ac8e08a",
      "tree": "0084837776487724e863bf7d4c17cde44dd61efe",
      "parents": [
        "aadae6bda34f8b5bb33ef7d70b44404e5730e2ea"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 21:03:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 29 20:03:57 2026 +0000"
      },
      "message": "Use spot instances for extended tests (#21221)\n\nI had `spot\u003dfalse` because those runs were slow. Now they are quite\nfast, so we can save up while running them:\n\n\n[Before](https://github.com/apache/datafusion/actions/runs/23683585934/job/68999421156):\n\u003cimg width\u003d\"523\" height\u003d\"366\" alt\u003d\"Zen Browser 2026-03-28 22 09 17\"\nsrc\u003d\"https://github.com/user-attachments/assets/27eb875f-b99a-4f12-a5ef-9bd5d13ae36b\"\n/\u003e\n\n\n[After](https://github.com/apache/datafusion/actions/runs/23694905456/job/69028518341#step:12:25):\n\u003cimg width\u003d\"452\" height\u003d\"379\" alt\u003d\"Zen Browser 2026-03-28 22 09 32\"\nsrc\u003d\"https://github.com/user-attachments/assets/c40a446e-3240-4b8c-b139-476b9a4a6a6f\"\n/\u003e\n\nInstance family differs between runs (runs-on [picks\none](https://runs-on.com/configuration/spot-instances/) based on current\ncost/availability), but the numbers should be illustrative nonetheless.\n\nI also put cpu to 32 since the tests are quite fast"
    },
    {
      "commit": "aadae6bda34f8b5bb33ef7d70b44404e5730e2ea",
      "tree": "2e286a35f6e0a166b5e6a3550ba4a1a678b65d38",
      "parents": [
        "1a0af76f780708ff9d9e1940686748bd743352d3"
      ],
      "author": {
        "name": "Rafael Herrero",
        "email": "84326903+RafaelHerrero@users.noreply.github.com",
        "time": "Sun Mar 29 21:51:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 29 19:51:27 2026 +0000"
      },
      "message": "Fix/support duplicate column names #6543 (#21126)\n\n## Which issue does this PR close?\n\n- Closes #6543.\n\n## Rationale for this change\n\nWe\u0027re building a SQL engine on top of DataFusion and hit this while\nrunning TPC-DS benchmarks — Q39 fails during planning with:\n\n```\nProjections require unique expression names but the expression\n\"CAST(inv1.cov AS Decimal128(30, 10))\" at position 4 and \"inv1.cov\"\nat position 10 have the same name.\n```\n\nThe underlying issue is that `CAST` is transparent to `schema_name()`,\nso both expressions resolve to `inv1.cov`. But this also affects simpler\ncases like `SELECT 1, 1` or `SELECT x, x FROM t` — all of which\nPostgreSQL, Trino, and SQLite handle without errors.\n\nLooking at the issue discussion, @alamb suggested adding auto-aliases in\nthe SQL planner:\n\n\u003e \"I think that is actually a pretty neat idea -- specifically add the\naliases in the SQL planner. I would be happy to review such a PR\"\n\nThat\u0027s what this PR does.\n\n### TPC-DS Q39 reproduction\n\nThe query joins two CTEs that both produce columns named `cov`, `mean`,\netc. When the planner applies implicit casts during type coercion, the\ncast-wrapped and original expressions end up with the same schema name:\n\n```sql\nWITH inv1 AS (\n    SELECT w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy,\n           stdev, mean, (CASE mean WHEN 0 THEN NULL ELSE stdev/mean END) AS cov\n    FROM (SELECT w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy,\n                 stddev_samp(inv_quantity_on_hand) AS stdev,\n                 avg(inv_quantity_on_hand) AS mean\n          FROM inventory, item, warehouse, date_dim\n          WHERE inv_item_sk \u003d i_item_sk AND inv_warehouse_sk \u003d w_warehouse_sk\n            AND inv_date_sk \u003d d_date_sk AND d_year \u003d 2001\n          GROUP BY w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy) foo\n    WHERE CASE mean WHEN 0 THEN 0 ELSE stdev/mean END \u003e 1\n),\ninv2 AS (\n    SELECT w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy,\n           stdev, mean, (CASE mean WHEN 0 THEN NULL ELSE stdev/mean END) AS cov\n    FROM (SELECT w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy,\n                 stddev_samp(inv_quantity_on_hand) AS stdev,\n                 avg(inv_quantity_on_hand) AS mean\n          FROM inventory, item, warehouse, date_dim\n          WHERE inv_item_sk \u003d i_item_sk AND inv_warehouse_sk \u003d w_warehouse_sk\n            AND inv_date_sk \u003d d_date_sk AND d_year \u003d 2001 AND d_moy \u003d 2\n          GROUP BY w_warehouse_name, w_warehouse_sk, i_item_sk, d_moy) foo\n    WHERE CASE mean WHEN 0 THEN 0 ELSE stdev/mean END \u003e 1\n)\nSELECT inv1.w_warehouse_sk, inv1.i_item_sk, inv1.d_moy, inv1.mean, inv1.cov,\n       inv2.w_warehouse_sk, inv2.i_item_sk, inv2.d_moy, inv2.mean, inv2.cov\nFROM inv1 JOIN inv2\n  ON inv1.i_item_sk \u003d inv2.i_item_sk AND inv1.w_warehouse_sk \u003d inv2.w_warehouse_sk\nORDER BY inv1.w_warehouse_sk, inv1.i_item_sk, inv1.d_moy, inv1.mean, inv1.cov,\n         inv2.d_moy, inv2.mean, inv2.cov;\n```\n\n## What changes are included in this PR?\n\nA dedup pass in `SqlToRel` that runs right after\n`prepare_select_exprs()` and before `self.project()`. It detects\nduplicate `schema_name()` values and wraps the second (and subsequent)\noccurrences in an `Alias` with a `:{N}` suffix:\n\n```sql\nSELECT x AS c1, y AS c1 FROM t;\n-- produces columns: c1, c1:1\n```\n\nThe actual code is small (~45 lines of logic across 2 files):\n\n- `datafusion/sql/src/utils.rs` — new `deduplicate_select_expr_names()`\nfunction\n- `datafusion/sql/src/select.rs` — one call site between\n`prepare_select_exprs()` and `self.project()`\n\nI intentionally kept this scoped to the SQL planner only:\n\n- `validate_unique_names(\"Projections\")` in `builder.rs` is untouched,\nso the Rust API (`LogicalPlanBuilder::project`) still rejects duplicates\n- No changes to the optimizer, physical planner, or DFSchema\n- `validate_unique_names(\"Windows\")` is unchanged\n\n**Known limitation:** `SELECT *, x FROM t` still errors when `x`\noverlaps with `*`, because wildcard expansion happens after this dedup\npass (inside `project_with_validation`). Happy to address that in a\nfollow-up if desired.\n\n## Are these changes tested?\n\nNew sqllogictest file (`duplicate_column_alias.slt`) with 13 test cases\ncovering:\n\n- Basic duplicate aliases, literals, and same-column-twice\n- Subquery with duplicate names\n- ORDER BY resolving to first occurrence\n- CTE join (TPC-DS Q39 pattern)\n- Three-way duplicates\n- CAST producing same schema_name as original column\n- GROUP BY and aggregates with duplicates\n- ORDER BY positional reference to the renamed column\n- `iszero(0.0), iszero(-0.0)` (reported in the issue by @jatin510)\n- UNION with duplicate column names\n- Wildcard limitation documented as explicit `query error` test\n\nUpdated existing tests in `sql_integration.rs` (5 tests),\n`aggregate.slt`, and `unnest.slt` that previously asserted the\n\"Projections require unique\" error.\n\n## Are there any user-facing changes?\n\nYes, this is a behavior change:\n\n- SQL queries with duplicate expression names now succeed instead of\nerroring\n- Duplicate columns get a `:{N}` suffix in the output (e.g., `cov`,\n`cov:1`)\n- First occurrence keeps its original name, so ORDER BY / HAVING\nreferences still work\n- The programmatic Rust API is unchanged"
    }
  ],
  "next": "1a0af76f780708ff9d9e1940686748bd743352d3"
}
