)]}'
{
  "log": [
    {
      "commit": "5b4507c1bb0b711f150351d34e184ad7dd64f9e6",
      "tree": "5ffec2a351bcd645857db8f0f633055b7182099a",
      "parents": [
        "d140d2a071dc81e4c9493474ec1df093fdc016dc"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "github@blaginin.me",
        "time": "Thu May 07 18:18:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 18:18:34 2026 +0100"
      },
      "message": "chore: remove dependabot config from sandbox (#235)\n\n## Summary\n- Delete `.github/dependabot.yml` so Dependabot stops opening\nversion-update PRs in this sandbox repo.\n\nThis repo only exists for CI testing, so we don\u0027t need automated\ndependency PRs at all. Security updates can still be enabled via repo\nSettings → Code security if desired (independent of this file).\n\nSupersedes #234.\n\n## Test plan\n- [ ] No new Dependabot PRs after merge\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "d140d2a071dc81e4c9493474ec1df093fdc016dc",
      "tree": "9ca3baf7f642d3f496e7a8af138fbaa5da1bb147",
      "parents": [
        "13884fe6c20c5f00e71f9587a04e7674ec3be779"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:20:21 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 29 19:20:21 2026 +0100"
      },
      "message": "add copilot ignore (#204)\n\nthis is just a sandbox repo, no copilot is needed here"
    },
    {
      "commit": "13884fe6c20c5f00e71f9587a04e7674ec3be779",
      "tree": "e1306953284decd8a1fecd0170ea6254dd523f44",
      "parents": [
        "d022cee1325831b8a39348f686fdb1ad63feba24"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:14:28 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 29 19:14:28 2026 +0100"
      },
      "message": "Merge queue: make dev checks required + add .asf.yaml validation (#197)\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": "d022cee1325831b8a39348f686fdb1ad63feba24",
      "tree": "e51d81563aae23d9be7dcb4cdf944ae2b4e92368",
      "parents": [
        "18e6d8e204fb95e5cf4b2f13ba6ef6478f5b98b0",
        "6b83141a35ba7cdeae6944c5fd9f749fdcde23af"
      ],
      "author": {
        "name": "blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:09:12 2026 +0100"
      },
      "committer": {
        "name": "blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:09:12 2026 +0100"
      },
      "message": "Merge remote-tracking branch \u0027sandbox/main\u0027 into sandbox-main\n\n# Conflicts:\n#\t.github/workflows/rust.yml\n"
    },
    {
      "commit": "18e6d8e204fb95e5cf4b2f13ba6ef6478f5b98b0",
      "tree": "e51d81563aae23d9be7dcb4cdf944ae2b4e92368",
      "parents": [
        "c4011e61fcb4ad0e98f6e095cef0b14836290a41",
        "1a0af76f780708ff9d9e1940686748bd743352d3"
      ],
      "author": {
        "name": "blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:08:51 2026 +0100"
      },
      "committer": {
        "name": "blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 19:08:51 2026 +0100"
      },
      "message": "Merge branch \u0027main\u0027 into sandbox-main\n\n# Conflicts:\n#\t.asf.yaml\n#\t.github/workflows/rust.yml\n#\tREADME.md\n"
    },
    {
      "commit": "1a0af76f780708ff9d9e1940686748bd743352d3",
      "tree": "bc03e492c3b62e6bd27fdceeb89d0e553f46f31e",
      "parents": [
        "2c03881eaca7ac871fd7ef1b351841b75e15056c"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 29 08:40:23 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 29 07:40:23 2026 +0000"
      },
      "message": "No cargo test for `sort_mem_validation` (#21222)\n\nEvery time I run tests with `sort_mem_validation` i\u0027m forced to\nrecompile those tests several times, as those trigger `cargo\ntest` (\u003drecompilation with different features). I made it use the\nexisting compiled binary\n\nShould save us 2-3 minutes on recompiling code on CI"
    },
    {
      "commit": "2c03881eaca7ac871fd7ef1b351841b75e15056c",
      "tree": "8a6b457563e5f9f361020d0de97cdc36d9b571fa",
      "parents": [
        "b09205afcb9b522d97d12c0c7e0efa86f2d64cc1"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Sat Mar 28 16:38:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 28 23:38:19 2026 +0000"
      },
      "message": "Add metric category filtering for EXPLAIN ANALYZE (#21160)\n\n## Summary\n\n- Adds `MetricCategory` enum (`Rows`, `Bytes`, `Timing`) classifying\nmetrics by what they measure and, critically, their **determinism**:\nrows/bytes are deterministic given the same plan+data; timing varies\nacross runs.\n- Each `Metric` can now declare its category via\n`MetricBuilder::with_category()`. Well-known builder methods\n(`output_rows`, `elapsed_compute`, `output_bytes`, etc.) set the\ncategory automatically. Custom counters/gauges default to \"always\nincluded\".\n- New session config `datafusion.explain.analyze_categories` accepts\n`all` (default), `none`, or comma-separated `rows`, `bytes`, `timing`.\n- This is orthogonal to the existing `analyze_level` (summary/dev) which\ncontrols verbosity.\n\n## Motivation\n\nRunning `EXPLAIN ANALYZE` in `.slt` tests currently requires liberal use\nof `\u003cslt:ignore\u003e` for every non-deterministic timing metric. With this\nchange, a test can simply:\n\n```sql\nSET datafusion.explain.analyze_categories \u003d \u0027rows\u0027;\nEXPLAIN ANALYZE SELECT ...;\n-- output contains only row-count metrics — fully deterministic, no \u003cslt:ignore\u003e needed\n```\n\nIn particular, for dynamic filters we have relatively complex\nintegration tests that exist mostly to assert the plan shapes and state\nof the dynamic filters after the plan has been executed. For example\n#21059. With this change I think most of those can be moved to SLT\ntests. I\u0027ve also wanted to e.g. make assertions about pruning\neffectiveness without having timing information included.\n\n## Test plan\n\n- [x] New Rust integration test `explain_analyze_categories` covering\nall combos (rows, none, all, rows+bytes)\n- [x] New `.slt` tests in `explain_analyze.slt` for `rows`, `none`,\n`rows,bytes`, and `rows` with dev level\n- [x] Existing `explain_analyze` integration tests pass (24/24)\n- [x] Proto roundtrip test updated and passing\n- [x] `information_schema` slt updated for new config entry\n- [x] Full `core_integration` suite passes (918 tests)\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": "b09205afcb9b522d97d12c0c7e0efa86f2d64cc1",
      "tree": "eda733a16ddc8aba6598002764b24505ee029188",
      "parents": [
        "a910b039dc95dc2cf0d4c6a96a001b310bf0eded"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Sat Mar 28 13:47:27 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 28 10:47:27 2026 +0000"
      },
      "message": "fix: propagate errors for unsupported table function arguments instead of silently dropping them (#21135)\n\n## Which issue does this PR close?\n- Closes #21125.\n\n## Rationale for this change\n`flat_map` swallows error since it results into an iterator that yields\nno elements. Instead of this this PR uses `map` and propagates error.\n\n## What changes are included in this PR?\nerror propagation and related tests\n\n## Are these changes tested?\nYes I\u0027ve added both unit and slt test\n\n## Are there any user-facing changes?\nUser\u0027s will see propagated error"
    },
    {
      "commit": "a910b039dc95dc2cf0d4c6a96a001b310bf0eded",
      "tree": "1eff155ba67779fe9b2cc754bf3895a0613a97b1",
      "parents": [
        "9f893a4241155f3d65f859450ccd86cca7a68d16"
      ],
      "author": {
        "name": "Sergei Grebnov",
        "email": "sergei.grebnov@gmail.com",
        "time": "Fri Mar 27 20:48:07 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 17:48:07 2026 +0000"
      },
      "message": "fix(unparser): Fix BigQuery timestamp literal format in SQL unparsing (#21103)\n\n## Which issue does this PR close?\n\nThe default `Dialect::timestamp_with_tz_to_string` uses `dt.to_string()`\nwhich produces timestamps with a space before the TimeZone offset. This\ncauses filter pushdown to fail when unparsing timestamp predicates for\nBigQuery.\n\n\u003e2016-08-06 20:05:00 +00:00 \u003c- invalid for BigQuery: \ninvalid timestamp: \u00272016-08-06 20:05:00 +00:00\u0027; while executing the\nfilter on column \u0027startTime\u0027 (query) (sqlstate: [0, 0, 0, 0, 0],\nvendor_code: -2147483648)\n\nBigQuery rejects this format. Per the [BigQuery timestamp\ndocs](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp_type),\nthe offset must be attached directly to the time:\n\n\u003e2016-08-06 20:05:00+00:00 \u003c- valid\n\n## What changes are included in this PR?\n\nFollowing similar to [DuckDB pattern/fix\n](https://github.com/apache/datafusion/pull/17653) override\n`timestamp_with_tz_to_string` for `BigQueryDialect` to produce valid\ntimestamp format\n\n**Before (default `dt.to_string()`):**\n\n```sql\nCAST(\u00272016-08-06 20:05:00 +00:00\u0027 AS TIMESTAMP)  -- BigQuery error\n```\nAfter (%:z format):\n\n```sql\nCAST(\u00272016-08-06 20:05:00+00:00\u0027 AS TIMESTAMP)  -- valid BigQuery timestamp\n```\n\n\n## Are these changes tested?\n\nAdded unit test and manual e2e test with Google BigQuery instance.\n\n## Are there any user-facing changes?\n\nNo"
    },
    {
      "commit": "9f893a4241155f3d65f859450ccd86cca7a68d16",
      "tree": "79f0ee15e18fe4d895c23181b85d12cff27e192d",
      "parents": [
        "e913557fe9e08e26978acc258cf670821d7b6d8b"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Fri Mar 27 13:47:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 17:47:21 2026 +0000"
      },
      "message": "perf: Optimize `split_part`, support `Utf8View` (#21119)\n\n## Which issue does this PR close?\n\n- Closes #21117.\n- Closes #21118 .\n\n## Rationale for this change\n\n`split_part` currently accepts `Utf8View` but always returns `Utf8`.\nWhen given `Utf8View` input, it should instead return `Utf8View` output.\n\nWhile we\u0027re at it, optimize `split_part` for single-character delimiters\n(the common case): `str::split(\u0026str)` is significantly slower than\n`str::split(char)` for single-character ASCII delimiters, because the\nformer uses a general string matching algorithm but the latter uses\n`memchr::memchr`.\n\nBenchmark results (M4 Max):\n\n  - `utf8_single_char/pos_first`: 142 µs → 104 µs (-26%)\n  - `utf8_single_char/pos_middle`: 389 µs → 365 µs (-6%)\n  - `utf8_single_char/pos_negative`: 154 µs → 109 µs (-29%)\n  - `utf8_multi_char/pos_middle`: 356 µs → 361 µs (~0%, noise)\n  - `utf8view_single_char/pos_first`: 143 µs → 111 µs (-22%)\n  - `utf8_long_strings/pos_middle`: 2568 µs → 1984 µs (-23%)\n  - `utf8view_long_parts/pos_middle`: 998 µs → 470 µs (-53%)\n\n## What changes are included in this PR?\n\n* Revise `split_part` benchmarks to reduce redundancy and improve\n`Utf8View` coverage\n* Support `Utf8View` -\u003e `Utf8View` in `split_part`\n* Refactor `split_part` to cleanup some redundant code\n* Optimize `split_part` for single-character delimiters\n* Add SLT test coverage for `split_part` with `Utf8View` input\n\n## Are these changes tested?\n\nYes. New tests and benchmarks added.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "e913557fe9e08e26978acc258cf670821d7b6d8b",
      "tree": "f5f147a6b0551c8ec6a5dca1a6b343d4dfb5e4c5",
      "parents": [
        "37c1b75263aad44d17f3c30259c5b81b79e5722f"
      ],
      "author": {
        "name": "Ramakrishna Chilaka",
        "email": "49393831+RamakrishnaChilaka@users.noreply.github.com",
        "time": "Fri Mar 27 22:27:45 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 16:57:45 2026 +0000"
      },
      "message": "Fix: MemTable LIMIT ignored with reordered projections (#21177)\n\n## Which issue does this PR close?\n\n- Closes #21176\n\n## Rationale for this change\n\nWhen `SELECT` projects columns in a different order than the table\nschema (e.g., `SELECT col_c, col_b` vs schema order `col_a, col_b,\ncol_c`), the `LIMIT` clause is silently ignored — all rows are returned\ninstead of the requested limit.\n\nThe physical optimizer runs `LimitPushdown` (which correctly sets\n`fetch\u003dN` on `MemorySourceConfig`) **before** `ProjectionPushdown`. When\nthe projection is pushed down, `try_swapping_with_projection()` creates\na new `MemorySourceConfig` via `try_new()`, which resets `fetch` to\n`None`, silently dropping the limit.\n\n## What changes are included in this PR?\n\nOne-line fix in `MemorySourceConfig::try_swapping_with_projection` to\npreserve `self.fetch` on the newly created config:\n\n```rust\n// Before:\n.map(|s| Arc::new(s) as Arc\u003cdyn DataSource\u003e)\n// After:\n.map(|s| Arc::new(s.with_limit(self.fetch)) as Arc\u003cdyn DataSource\u003e)\n```\n\n## Are these changes tested?\n\nYes.\n\n- **Unit test** (`try_swapping_with_projection_preserves_fetch`):\ndirectly verifies `fetch` is preserved after projection pushdown.\nConfirmed it fails without the fix (`None` vs `Some(5)`).\n- **SQL logic test** (`limit.slt`, table `t21176`): end-to-end\nregression test for `SELECT col_c, col_b FROM t LIMIT 5` with reverse\ncolumn order.\n\n## Are there any user-facing changes?\n\nNo API changes. This is a correctness fix — `LIMIT` now works correctly\nregardless of `SELECT` column order against in-memory tables."
    },
    {
      "commit": "37c1b75263aad44d17f3c30259c5b81b79e5722f",
      "tree": "accc3696f61355a6c9da5bc08c51d59e7dc392b5",
      "parents": [
        "580b0abdb487e1e226f5236e605ec5c75ec729b9"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Fri Mar 27 11:36:11 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 15:36:11 2026 +0000"
      },
      "message": "test: scale remaining sort-merge join (SMJ) benchmark queries (#21200)\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\nOur SMJ benchmark queries finish too quickly to demonstrate improvements\nthat aren\u0027t massive. For example, I am working on an optimization that\nintroduces `DynComparator` (part of #20910) and it\u0027s about a 10%\nimprovement, but only when you actually make the queries run long\nenough. The new queries for #21184 are scaled enough to see\nimprovements, but we need to scale the older queries.\n\nI am also continuing to see SMJ issues with Comet when running joins\nwith billions (sometimes trillions) of rows. We can\u0027t do that for\nmicrobenchmarks, but we can at least start hitting millions of rows to\nlook at more than a handful of batches.\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\nBring our SMJ queries into alignment with some of the newer ones\n(Q21-23) to demonstrate further performance wins.\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\nI ran the benchmark. On my M3 Max, here\u0027s how long it takes:\n\n| Query | Join Type | Rows | Keys | Filter | Median (ms) |\n|-------|-----------|------|------|--------|-------------|\n| Q1 | INNER | 1M×1M | 1:1 | — | 16.3 |\n| Q2 | INNER | 1M×10M | 1:10 | — | 117.4 |\n| Q3 | INNER | 1M×1M | 1:100 | — | 74.2 |\n| Q4 | INNER | 1M×10M | 1:10 | 1% | 17.1 |\n  | Q5 | INNER | 1M×1M | 1:100 | 10% | 18.4 |\n  | Q6 | LEFT | 1M×10M | 1:10 | — | 129.3 |\n  | Q7 | LEFT | 1M×10M | 1:10 | 50% | 150.2 |\n  | Q8 | FULL | 1M×1M | 1:10 | — | 16.6 |\n  | Q9 | FULL | 1M×10M | 1:10 | 10% | 153.5 |\n  | Q10 | LEFT SEMI | 1M×10M | 1:10 | — | 53.1 |\n  | Q11 | LEFT SEMI | 1M×10M | 1:10 | 1% | 15.5 |\n  | Q12 | LEFT SEMI | 1M×10M | 1:10 | 50% | 65.0 |\n  | Q13 | LEFT SEMI | 1M×10M | 1:10 | 90% | 105.7 |\n  | Q14 | LEFT ANTI | 1M×10M | 1:10 | — | 54.3 |\n  | Q15 | LEFT ANTI | 1M×10M | 1:10 | partial | 51.5 |\n  | Q16 | LEFT ANTI | 1M×1M | 1:1 | — | 10.3 |\n  | Q17 | INNER | 1M×50M | 1:50 | 5% | 75.9 |\n  | Q18 | LEFT SEMI | 1M×50M | 1:50 | 2% | 50.2 |\n  | Q19 | LEFT ANTI | 1M×50M | 1:50 | partial | 336.4 |\n  | Q20 | INNER | 1M×10M | 1:100 | GROUP BY | 763.7 |\n  | Q21 | INNER | 10M×10M | 1:1 | 50% | 186.1 |\n  | Q22 | LEFT | 10M×10M | 1:1 | 50% | 10,193.8 |\n  | Q23 | FULL | 10M×10M | 1:1 | 50% | 10,194.7 |\n\nNote that Q22 and Q23 will be about 20x faster when #21184 merges, so\ntaking 10 seconds to run is just a short-term issue.\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."
    },
    {
      "commit": "580b0abdb487e1e226f5236e605ec5c75ec729b9",
      "tree": "56a6d4ceb6852f22e1a92a817e9c0c19dc24087a",
      "parents": [
        "37cd3de82fcfa7619b04cfb9f19607ff55d44bc4"
      ],
      "author": {
        "name": "Matthew Kim",
        "email": "38759997+friendlymatthew@users.noreply.github.com",
        "time": "Fri Mar 27 11:30:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 15:30:41 2026 +0000"
      },
      "message": "Use leaf level `ProjectionMask` for parquet projections (#20925)\n\n- Added on from https://github.com/apache/datafusion/pull/20913\n\nPlease review from the third commit\n\n## Rationale for this change\n\nThis PR reuses the `ParquetReadPlan` (introduced for the row filter\npushdown) to also resolve projection expressions to parquet leaf column\nindices\n\nPreviously, projecting a single field from a struct with many children\nwould read all leaves of that struct. This aligns the projection path\nwith the row filter path, which already had leaf-level struct pruning"
    },
    {
      "commit": "37cd3de82fcfa7619b04cfb9f19607ff55d44bc4",
      "tree": "25cd419dc17b0be56226ea7e80db4241bab9f5c2",
      "parents": [
        "0359a3ce08f0063bb72f8576f7abb265d1a03cfb"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Mar 27 07:18:56 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 11:18:56 2026 +0000"
      },
      "message": "[main] add 52.4.0 changelog (#21053)\n\n~(Draft until we have actually released 52.4.0)~\n\n## Which issue does this PR close?\n\n- part of #20855 \n\n## Rationale for this change\n\nGet the changelog and version update on main\n\n## What changes are included in this PR?\n\n- Forward ports #21004\n- Fix changelog issue noticed by @Omega359 in\nhttps://github.com/apache/datafusion/pull/20878#issuecomment-4083222793\n\n## Are these changes tested?\n\nBy CI\n\n## Are there any user-facing changes?\n\nNew version / Change log"
    },
    {
      "commit": "0359a3ce08f0063bb72f8576f7abb265d1a03cfb",
      "tree": "19ab1cb9adc73fbf1efd9c136e10c64214064620",
      "parents": [
        "1e3b956fa79b279bdf02197eb5b35c99a21eb6b4"
      ],
      "author": {
        "name": "Alfonso Subiotto Marqués",
        "email": "alfonso.subiotto@polarsignals.com",
        "time": "Fri Mar 27 11:55:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 10:55:29 2026 +0000"
      },
      "message": "fix[physical-plan/aggregates]: fix grouping by Ree\u003cDict\u003e (#21195)\n\nThere was a match arm missing, so the inner dictionary was not\nreconstructed, resulting in a schema mismatch downstream.\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 #21194 \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\nFix a bug\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\nMatch arm + memtable test verifying the fix\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\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\nQueries that would previously error now do not\n\nSigned-off-by: Alfonso Subiotto Marques \u003calfonso.subiotto@polarsignals.com\u003e"
    },
    {
      "commit": "1e3b956fa79b279bdf02197eb5b35c99a21eb6b4",
      "tree": "0c9b449367b1704462bd3b9ab548824f66fed486",
      "parents": [
        "20434b01721905769c9a8f85e8b497a245ccf07c"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Fri Mar 27 11:55:40 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 08:55:40 2026 +0000"
      },
      "message": "Minor: compute qualify window expressions only when QUALIFY clause is present (#21173)\n\n## Which issue does this PR close?\nDoes not close but related #608\n\n\n## Rationale for this change\nFollowup to #20963\n@jonahgao had a feedback in\nhttps://github.com/apache/datafusion/pull/20963#discussion_r2988447937\nto try to find qualify only if we are inside QUALIFY block. I did not\nthink it was this minor so thought followup would be better but this is\nsimply moving to if block to prevent unnecessary computation\n\n\n## What changes are included in this PR?\nMove `qualify_window_func_exprs` computation inside the QUALIFY block\n\n## Are these changes tested?\nCovered by existing tests from #20963.\n\n## Are there any user-facing changes?\nNo\n\nCo-authored-by: Jonah Gao \u003cjonahgao@msn.com\u003e"
    },
    {
      "commit": "20434b01721905769c9a8f85e8b497a245ccf07c",
      "tree": "0cb22a54e7b97aa52b2d15452eb42ae36dfd9598",
      "parents": [
        "07ddfd7a22bf17a3cdcb188509ecc7b8dceab259"
      ],
      "author": {
        "name": "Matthew Kim",
        "email": "38759997+friendlymatthew@users.noreply.github.com",
        "time": "Fri Mar 27 00:34:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 04:34:17 2026 +0000"
      },
      "message": "Reduce parquet struct projection benchmark data volume (#21187)\n\nThis PR reduces the data volume in the parquet struct projection\nbenchmark so it runs faster.\nIt amends the recently introduced benchmarks in\nhttps://github.com/apache/datafusion/pull/21180.\n\n---------\n\nCo-authored-by: Adrian Garcia Badaracco \u003c1755071+adriangb@users.noreply.github.com\u003e\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "07ddfd7a22bf17a3cdcb188509ecc7b8dceab259",
      "tree": "5d489e48b33f67a28fbb82099e51f20f2d3f2a6b",
      "parents": [
        "627fabaa7795ae654114882d6714f7f1065e926d"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Fri Mar 27 12:01:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 04:01:32 2026 +0000"
      },
      "message": "Fix sort merge interleave overflow (#20922)\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\nWhen SortPreservingMergeStream merges batches containing large\nstring/binary columns whose combined offsets exceed i32::MAX, Arrow\u0027s\ninterleave panics with .expect(\"overflow\"). This PR catches that panic\nand retries with progressively fewer rows, producing smaller output\nbatches that fit within i32 offset limits.\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\nYes UT\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": "627fabaa7795ae654114882d6714f7f1065e926d",
      "tree": "b51feeabc874920df39628fd07e7b301c71769fc",
      "parents": [
        "37978e32af4fbb5c26a41db3062f0f3e69a0ac47"
      ],
      "author": {
        "name": "Namgung Chan",
        "email": "33323415+getChan@users.noreply.github.com",
        "time": "Fri Mar 27 07:14:49 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 22:14:49 2026 +0000"
      },
      "message": "Migrate Avro reader to arrow-avro and remove internal conversion code (#17861)\n\n## Which issue does this PR close?\n\n- Closes #14097\n\n## Rationale for this change\n\nDataFusion previously maintained custom Avro-to-Arrow conversion logic.\nThis PR migrates Avro reading to `arrow-avro` to align behavior with\nupstream Arrow and remove duplicated implementation.\n\n## What changes are included in this PR?\n\n- Switched DataFusion Avro reader path to `arrow-avro` (`ReaderBuilder`)\n- Removed internal/legacy Avro conversion paths that are no longer\nneeded\n- Updated crate wiring to use `arrow-avro` and removed prior\n`apache-avro` dependency usage in affected paths\n- Updated Avro projection flow to use `arrow-avro` projection support\n- Added/updated upgrade documentation for Avro API and behavior changes\n\n## Are these changes tested?\n\nYes.\n\n- Added/updated Avro reader unit tests in `datafusion/datasource-avro`\n(including projection and timestamp logical types)\n- Updated SQL logic tests in\n`datafusion/sqllogictest/test_files/avro.slt`\n- Integration is covered by existing CI/test suites for affected crates\n\n## Are there any user-facing changes?\n\nYes.\n\n1. `DataFusionError::AvroError` is removed.\n2. `From\u003capache_avro::Error\u003e for DataFusionError` is removed.\n3. Re-export changed from `datafusion::apache_avro` to\n`datafusion::arrow_avro`.\n4. Avro feature wiring changed:\n- `datafusion` crate `avro` feature no longer enables\n`datafusion-common/avro`\n- `datafusion-proto` crate `avro` feature no longer enables\n`datafusion-common/avro`\n5. Avro decoding behavior now follows `arrow-avro` semantics, including:\n   - Avro `string` values being read as Arrow `Binary` in this path\n- `timestamp-*` logical types read as UTC timezone-aware timestamps\n(`Timestamp(..., Some(\"+00:00\"))`)\n- `local-timestamp-*` remaining timezone-naive (`Timestamp(..., None)`)\n\nUpgrade notes are documented in:\n`docs/source/library-user-guide/upgrading/53.0.0.md`\n\n---------\n\nCo-authored-by: Connor Sanders \u003c170039284+jecsand838@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "37978e32af4fbb5c26a41db3062f0f3e69a0ac47",
      "tree": "045f277d6316a2bb43725be2bd4d3a0cf86aa660",
      "parents": [
        "38cc8e68745f4f955d9a458a4dfabfe5085a94ea"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Mar 26 17:08:03 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 21:08:03 2026 +0000"
      },
      "message": "[main] Update version to 53.0.0 and bring changelog (#21189)\n\n## Which issue does this PR close?\n\n- Part of https://github.com/apache/datafusion/issues/19692\n\n\n\n## Rationale for this change\n\nLet\u0027s get main to reflect changes on the 53 branch\n\n\n## What changes are included in this PR?\n\nForward ports the following two PRs\n- 23e7a19186 / https://github.com/apache/datafusion/pull/20649 from\n@comphead\n- 28fc91a  / https://github.com/apache/datafusion/pull/20952 from @alamb\n\n## Are these changes tested?\nBy CI\n\n## Are there any user-facing changes?\n\nNew version / release notes\n\n---------\n\nCo-authored-by: Oleks V \u003ccomphead@users.noreply.github.com\u003e"
    },
    {
      "commit": "38cc8e68745f4f955d9a458a4dfabfe5085a94ea",
      "tree": "d890be9b674ddfcd72c433e74937e191db02d495",
      "parents": [
        "1624d63070c05dde448a14727bd20764fc7887ad"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Thu Mar 26 17:03:33 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 21:03:33 2026 +0000"
      },
      "message": "test: add SMJ benchmarks from #21184 (#21188)\n\nSee #21184 for reason of this benchmark."
    },
    {
      "commit": "1624d63070c05dde448a14727bd20764fc7887ad",
      "tree": "f7f1d8d8c7d29d3ecd9a42257617584c10f2b302",
      "parents": [
        "fb12029e70b0c7e30ed8e03443d0a8b3d35ac999"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Thu Mar 26 16:51:15 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 20:51:15 2026 +0000"
      },
      "message": "perf: Add support for `GroupsAccumulator` to `string_agg` (#21154)\n\n## Which issue does this PR close?\n\n- Closes #17789.\n\n## Rationale for this change\n\n`string_agg` previously didn\u0027t support the `GroupsAccumulator` API;\nadding support for it can significantly improve performance,\nparticularly when there are many groups.\n\nBenchmarks (M4 Max):\n\n - string_agg_query_group_by_few_groups (~10): 645 µs → 564 µs, -11%\n- string_agg_query_group_by_mid_groups (~1,000): 2,692 µs → 871 µs, -68%\n- string_agg_query_group_by_many_groups (~65,000): 16,606 µs → 1,147 µs,\n-93%\n\n## What changes are included in this PR?\n\n* Add end-to-end benchmark for `string_agg`\n* Implement `GroupsAccumulator` API for `string_agg`\n* Add unit tests\n* Minor code cleanup for existing `string_agg` code paths\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo, other than a change to an error message string.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "fb12029e70b0c7e30ed8e03443d0a8b3d35ac999",
      "tree": "6806ffbc8a881d54755df436bb0dd1c743aa80b4",
      "parents": [
        "1416ed4d5007180136dae0aaeb921f0681ec001e"
      ],
      "author": {
        "name": "Raz Luvaton",
        "email": "16746759+rluvaton@users.noreply.github.com",
        "time": "Thu Mar 26 21:57:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 19:57:10 2026 +0000"
      },
      "message": "chore: re-export projection in datafusion::datasource (#21185)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nSo I won\u0027t have to specify another crate\n\n## What changes are included in this PR?\n\nre-export\n\n## Are these changes tested?\nNo\n\n## Are there any user-facing changes?\n\nYes, can be used from `datafusion::datasource`"
    },
    {
      "commit": "1416ed4d5007180136dae0aaeb921f0681ec001e",
      "tree": "36c98c4ff8a8ae356795980870175ae181983eb6",
      "parents": [
        "ba399a80f9ffcb0563adf2b67add13d0476f6291"
      ],
      "author": {
        "name": "Matthew Kim",
        "email": "38759997+friendlymatthew@users.noreply.github.com",
        "time": "Thu Mar 26 15:19:16 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 19:19:16 2026 +0000"
      },
      "message": "Add benchmarks for Parquet struct leaf-level projection pruning (#21180)\n\n## Rationale for this change\n\nThis PR adds benchmarks that measure the perf of projecting individual\nfields from struct columns in Parquet files. #20925 introduced\nleaf-level projection masking so that `select s[\u0027small_int\u0027]` on a\nstruct with large string fields only reads the small integer leaf,\nskipping the expensive string decoding entirely\n\n3 dataset shapes are coevered, each with ~262K rows of 8kb string\npayloads: a narrow struct (2 leaves), a wide struct (5 leaves), and a\nnested struct. Each shape benchmarks full-struct reads against\nsingle-field projections"
    },
    {
      "commit": "ba399a80f9ffcb0563adf2b67add13d0476f6291",
      "tree": "88e264c9d9ba209f25217d7d2da6162a1a987a54",
      "parents": [
        "7cbc6b4383e6998b6a3a94ce1018a01e03c50be8"
      ],
      "author": {
        "name": "Jamal Saad",
        "email": "137282926+jamals86@users.noreply.github.com",
        "time": "Thu Mar 26 18:56:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 16:56:08 2026 +0000"
      },
      "message": "docs: add KalamDB to known users (#21181)\n\n## Which issue does this PR close?\n\n- N/A. This is a small documentation-only update adding KalamDB to the\nKnown Users list.\n\n## Rationale for this change\n\nKalamDB uses DataFusion as part of its SQL execution layer. Adding it to\nthe documentation helps keep the Known Users section accurate and shows\nanother real-world DataFusion adoption example.\n\n## What changes are included in this PR?\n\n- Added `KalamDB` to the active projects list in\n`docs/source/user-guide/introduction.md`.\n- Described KalamDB as an SQL-first realtime state database for AI\nagents, chat products, and multi-tenant SaaS.\n\n## Are these changes tested?\n\nNo code or behavior changed. This PR only updates documentation text, so\nno additional tests were needed.\n\n## Are there any user-facing changes?\n\nYes. The DataFusion user guide will list KalamDB in the Known Users\nsection."
    },
    {
      "commit": "7cbc6b4383e6998b6a3a94ce1018a01e03c50be8",
      "tree": "661801dab6688013683766f2290d22ac3c100434",
      "parents": [
        "4f13319b1472dce0c5b71b2b9807d75aebacf1f6"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Thu Mar 26 08:07:01 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 12:07:01 2026 +0000"
      },
      "message": "Remove as_any from scalar UDF trait definition (#20812)\n\n## Which issue does this PR close?\n\nNone.\n\n## Rationale for this change\n\nThis PR reduces the amount of boilerplate code that users need to write\nfor scalar UDFs. I didn\u0027t address aggregate or window functions yet just\nto keep the size of the PR manageable.\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 `ScalarUDFImpl` to\nhave the `as_any` function that returns `\u0026self`. This PR makes `Any` an\nsupertrait for `ScalarUDFImpl` and makes the appropriate casts when\nnecessary. The overall diff is about 1200 lines of code removed.\n\n## Are these changes tested?\n\nExisting unit tests.\n\n## Are there any user-facing changes?\n\nUsers simply need to remove the `as_any()` function from their\nimplementations."
    },
    {
      "commit": "4f13319b1472dce0c5b71b2b9807d75aebacf1f6",
      "tree": "368030427cf44b1a1a07de6332be2f841f6cd3b3",
      "parents": [
        "6980fcf1e3ab036fe920f61047b740bd62f7cd02"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Thu Mar 26 07:54:18 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 11:54:18 2026 +0000"
      },
      "message": "feat: implement PhysicalOptimizerRule in FFI crate (#20451)\n\n## Which issue does this PR close?\n\n- Closes #20450\n\n## Rationale for this change\n\nThis PR is a pure addition to implement a FFI safe\nPhysicalOptimizerRule. With this change downstream projects, such as\n`datafusion-python` can share optimizer rules across libraries.\n\n## What changes are included in this PR?\n\nImplement physical optimizer rule following same pattern as the rest of\nthe FFI crate.\n\n## Are these changes tested?\n\nBoth unit and integration tests are provided.\n\n## Are there any user-facing changes?\n\nNone"
    },
    {
      "commit": "6980fcf1e3ab036fe920f61047b740bd62f7cd02",
      "tree": "64cab6e8b1aac7009e16aa5a1f81b945f4c39712",
      "parents": [
        "4e2e4e84d501b0344ac7d4212c7f3b0f0ce05dd5"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "qi.zhu@polygon.io",
        "time": "Thu Mar 26 17:44:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 09:44:41 2026 +0000"
      },
      "message": "docs: Add explicit fmt and clippy commands to AGENTS.md (#21171)\n\n## Which issue does this PR close?\n\nN/A - minor documentation improvement.\n\n## Rationale for this change\n\nThe \"Before Committing\" section in `AGENTS.md` (symlinked as\n`CLAUDE.md`) tells agents to follow the contributor guide but does not\nlist the concrete commands. Agents may skip `cargo fmt` or `cargo\nclippy` and submit PRs with formatting/lint errors that fail CI.\n\n## What changes are included in this PR?\n\nAdds explicit `cargo fmt --all` and `cargo clippy` commands that agents\nMUST run before committing, along with a pointer to the full\n`./dev/rust_lint.sh` suite.\n\n## Are these changes tested?\n\nDocumentation only — no code changes.\n\n## Are there any user-facing changes?\n\nNo.\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4e2e4e84d501b0344ac7d4212c7f3b0f0ce05dd5",
      "tree": "cc503dc646b7bcc829e2dc5ef3640db23cb12e1a",
      "parents": [
        "509ad090b4805d835156adae57f9a74d60cbdd42"
      ],
      "author": {
        "name": "Bhargava Vadlamani",
        "email": "11091419+coderfender@users.noreply.github.com",
        "time": "Wed Mar 25 21:42:26 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 04:42:26 2026 +0000"
      },
      "message": "fix: Df int timestamp cast fix failing CI  (#21163)\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 #.\nFixes CI failures caused by PR :\nhttps://github.com/apache/datafusion/pull/20555\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": "509ad090b4805d835156adae57f9a74d60cbdd42",
      "tree": "83c2aa1e984bb6cd9001e1ef976f33af5b2308ab",
      "parents": [
        "757ce78496fc528b8b0cb4f435e9dcb29de0ba7e"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Thu Mar 26 11:46:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 03:46:49 2026 +0000"
      },
      "message": "Improvement: keep order-preserving repartitions for streaming aggregates (#21107)\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\nThis PR updates `EnforceDistribution` to keep order-preserving\nrepartition variants when preserving input ordering allows the parent\noperator to remain incremental/streaming.\n\nPreviously, order-preserving variants could be removed when\n`prefer_existing_sort \u003d false` or when there was no explicit ordering\nrequirement, even if dropping the ordering would force a parent operator\nsuch as `AggregateExec` to fall back to blocking execution. This change\nadds a targeted `preserving_order_enables_streaming` check and uses it\nto avoid replacing `RepartitionExec(..., preserve_order\u003dtrue)` /\n`SortPreservingMergeExec` when that preserved ordering is what enables\nstreaming behavior.\n\nAs a result, the optimizer now prefers keeping order-preserving\nrepartitioning in these cases, and the updated sqllogictests reflect the\nnew physical plans: instead of inserting a `SortExec` above a plain\nrepartition, plans now retain `RepartitionExec(... preserve_order\u003dtrue)`\nso sorted or partially sorted aggregates can continue running\nincrementally.\n\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\nNo extra sort needed for these cases\n\n---------\n\nCo-authored-by: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "757ce78496fc528b8b0cb4f435e9dcb29de0ba7e",
      "tree": "b28191ba52e702a31aaf1ff0459b50148380361b",
      "parents": [
        "69cd6665019e782cb2eb226d8e866c5c61e7d01e"
      ],
      "author": {
        "name": "Oleks V",
        "email": "comphead@users.noreply.github.com",
        "time": "Wed Mar 25 20:37:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 03:37:56 2026 +0000"
      },
      "message": "chore: Optimize schema rewriter usages (#21158)\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\nThe rewriter actually has 3 responsibilities:\n1. Index remapping — column indices in expressions may not match the\nfile schema\n  2. Type casting — when logical and physical field types differ\n3. Missing column handling — replacing references to absent columns with\nnulls\n\nDo not use cycles for schema rewrite if predicate is not set or logic\nschema equal to physical schema\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": "69cd6665019e782cb2eb226d8e866c5c61e7d01e",
      "tree": "4af725032069e1fd960804c4a4ecf0a3382c89f4",
      "parents": [
        "c4562dc7fc961618f3c4c30b4a1037276ee8ba68"
      ],
      "author": {
        "name": "Rafael Herrero",
        "email": "84326903+RafaelHerrero@users.noreply.github.com",
        "time": "Thu Mar 26 01:14:19 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 00:14:19 2026 +0000"
      },
      "message": "fix: skip empty metadata in intersect_metadata_for_union to prevent s… (#21127)\n\n## Which issue does this PR close?\n\n- Closes #19049.\n\n## Rationale for this change\n\nWe\u0027re building a SQL engine on top of DataFusion and hit this while\nrunning benchmarks. A `UNION ALL` query against Parquet files that carry\nfield metadata (like `PARQUET:field_id` or InfluxDB\u0027s\n`iox::column::type`). When one branch of the union has a NULL literal,\n`intersect_metadata_for_union` intersects the metadata from the data\nsource with the empty metadata from the NULL — and since intersecting\nanything with an empty set gives empty, all metadata gets wiped out.\n\nLater, when `optimize_projections` prunes columns and `recompute_schema`\nrebuilds the Union schema, the logical schema has `{}` while the\nphysical schema still has the original metadata from Parquet. This\ncauses:\n\n```\nInternal error: Physical input schema should be the same as the one\nconverted from logical input schema.\nDifferences:\n  - field metadata at index 0 [usage_idle]: (physical) {\"iox::column::type\": \"...\"} vs (logical) {}\n```\n\nAs @erratic-pattern and @alamb discussed in the issue, empty metadata\nfrom NULL literals isn\u0027t saying \"this field has no metadata\" — it\u0027s\nsaying \"I don\u0027t know.\" It shouldn\u0027t erase metadata from branches that\nactually have it.\n\nI fixed this in `intersect_metadata_for_union` directly rather than\npatching `optimize_projections` or `recompute_schema`, since that\u0027s\nwhere the bad intersection happens and it covers all code paths that\nderive Union schemas.\n\n## What changes are included in this PR?\n\nOne change to `intersect_metadata_for_union` in\n`datafusion/expr/src/expr.rs`: branches with empty metadata are skipped\nduring intersection instead of participating. Non-empty branches still\nintersect normally (conflicting values still get dropped). If every\nbranch is empty, the result is empty — same as before.\n\n## Are these changes tested?\n\nAdded 7 unit tests for `intersect_metadata_for_union`:\n\n- Same metadata across branches — preserved\n- Conflicting non-empty values — dropped (existing behavior, unchanged)\n- One branch has metadata, other is empty — metadata preserved (the fix)\n- Empty branch comes first — still works\n- All branches empty — empty result\n- Mix of empty and conflicting non-empty — intersects only the non-empty\nones\n- No inputs — empty result\n\nThe full end-to-end reproduction needs Parquet files with field metadata\nas described in the issue. The unit tests cover the intersection logic\ndirectly.\n\n## Are there any user-facing changes?\n\nNo API changes. `UNION ALL` queries combining metadata-carrying sources\nwith NULL literals will stop failing with schema mismatch errors."
    },
    {
      "commit": "c4562dc7fc961618f3c4c30b4a1037276ee8ba68",
      "tree": "f35dbdeeb77f28d4fc83769ce1969260a7d3b981",
      "parents": [
        "139b0b4ac8119a4321d346837b9ac56e2eb441eb"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Thu Mar 26 00:15:46 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 21:15:46 2026 +0000"
      },
      "message": "[Minor]: support window functions in order by expressions (#20963)\n\n## Which issue does this PR close?\n\n\n- Closes #608.\n\n## Rationale for this change\n#608 has details but as @alamb describes in\nhttps://github.com/apache/datafusion/issues/608#issuecomment-4034162591\n```\nSELECT c2\n  FROM test\n  ORDER BY max(c3) OVER (ORDER BY c9);\n```\n\nfails with:\n\n```\nThis feature is not implemented: Physical plan does not support logical expression WindowFunction(WindowFunction { fun: AggregateUDF(AggregateUDF { inner: Max { signature: Signature { type_signature: UserDefined, volatility: Immutable, parameter_names: None } } }), params: WindowFunctionParams { args: [Column(Column { relation: Some(Bare { table: \"test\" }), name: \"c3\" })], partition_by: [], order_by: [Sort { expr: Column(Column { relation: Some(Bare { table: \"test\" }), name: \"c9\" }), asc: true, nulls_first: false }], window_frame: WindowFrame { units: Range, start_bound: Preceding(Int32(NULL)), end_bound: CurrentRow, is_causal: false }, filter: None, null_treatment: None, distinct: false } })\n```\n## What changes are included in this PR?\n- relevant change\n- slt and unit tests\n\n## Are these changes tested?\nYes added both unit tests for plan and slt tests for checking output\n\n## Are there any user-facing changes?\nAdditive user changes that users can now use window in order by\nexpressions"
    },
    {
      "commit": "139b0b4ac8119a4321d346837b9ac56e2eb441eb",
      "tree": "1742949533f1875f4edff7e8d7c8116906bd4ee2",
      "parents": [
        "78820c510182c44d7a214b860749144ef14bbd16"
      ],
      "author": {
        "name": "Bhargava Vadlamani",
        "email": "11091419+coderfender@users.noreply.github.com",
        "time": "Wed Mar 25 14:03:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 21:03:39 2026 +0000"
      },
      "message": "feat : support spark compatible int to timestamp cast (#20555)\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 #20554 \n\nRef : https://github.com/apache/datafusion/pull/20555\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\n1. Created a new cast scalar UDF to support int to timestamp casts\n(spark compatible). The goal is to leverage this is as an entry point\nfor all spark compatible / df incompatible casts\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\n1. Yes (through series of unit tests testing various edge cases like\noverflow , null input etc)\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n3. 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\n1. Yes. We are bringing in ability to leverage spark compatible cast\noperations in DF through `spark_cast` as a first step. Next step would\nbe to make changes to the planner to leverage spark compatible cast\ninstead of regular cast operations\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": "78820c510182c44d7a214b860749144ef14bbd16",
      "tree": "b62117151328f8368cbe07e7f44626b89892899c",
      "parents": [
        "51f13d7435ccfd5ca38aa2d2d23ef0a04382ab74"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Mar 25 13:57:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 20:57:30 2026 +0000"
      },
      "message": "chore(deps): bump requests from 2.32.5 to 2.33.0 (#21153)\n\nBumps [requests](https://github.com/psf/requests) from 2.32.5 to 2.33.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/psf/requests/releases\"\u003erequests\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base\nthat uses Requests, please take a look at \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e.\nGive it a try, and report any gaps or feedback you may have in the\nissue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now\nextracts contents to a non-deterministic location to prevent malicious\nfile replacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause malformed\nauthentication to be applied to Requests on Python 3.11+. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\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/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\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/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\u003c/a\u003e\u003c/p\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/psf/requests/blob/main/HISTORY.md\"\u003erequests\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base\nthat\nuses Requests, please take a look at \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e.\nGive it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now\nextracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc 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/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e\nv2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e\nMerge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e\nMove badges to top of README (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e\nRemove unused extraction call (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e\ndocs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e\ndocs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e\nBump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e\nBump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e\ndocs: exclude Response.is_permanent_redirect from API docs (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e\ndocs: clarify Quickstart POST example (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/psf/requests/compare/v2.32.5...v2.33.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\u003drequests\u0026package-manager\u003duv\u0026previous-version\u003d2.32.5\u0026new-version\u003d2.33.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": "51f13d7435ccfd5ca38aa2d2d23ef0a04382ab74",
      "tree": "425310b61bc0c2e44368e319f769f1aae253090f",
      "parents": [
        "9b726bcf288e7779b855ead5b869b0a69aba5c92"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Wed Mar 25 16:11:27 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 20:11:27 2026 +0000"
      },
      "message": "perf: specialized SemiAntiSortMergeJoinStream (#20806)\n\n## Which issue does this PR close?\n\n- N/A.\n\n## Rationale for this change                              \nDataFusion\u0027s `SortMergeJoinExec` handles semi/anti joins by\nmaterializing `(outer, inner)` row pairs, applying a filter, then\ndeduplicating with a corrected filter mask. Semi/anti joins only need a\nboolean per outer row — not pairs. The pair-based approach allocates\nunnecessary intermediate batches and index arrays to materialize output.\n\nRecent PRs have improved SMJ performance within the existing pair-based\nframework — [#18875](https://github.com/apache/datafusion/pull/18875)\n(BatchCoalescer to reduce concatenation overhead),\n[#20463](https://github.com/apache/datafusion/pull/20463) (zero-copy\nslice instead of take for contiguous indices),\n[#20478](https://github.com/apache/datafusion/pull/20478) (cached row\ncounts to avoid O(n) recalculation) — but the fundamental mismatch\nremains: semi/anti joins don\u0027t need pairs at all. I think we\u0027re hitting\ndiminishing returns on filtered semi/anti sort-merge joins (TPC-H Q21)\nand need a specialized stream.\n\n## What changes are included in this PR?\n\nA new `SemiAntiSortMergeJoinStream` used internally by\n`SortMergeJoinExec` for `LeftSemi`, `LeftAnti`, `RightSemi`, and\n`RightAnti` joins. When `SortMergeJoinExec::execute()` encounters a\nsemi/anti join type, it instantiates this stream instead of the existing\n`SortMergeJoinStream`. This is transparent to the rest of the system —\nno planner changes, no config flags, no new operators.\n\nInstead of materializing row pairs, the stream maintains a\nper-outer-batch bitset (`BooleanBufferBuilder`) recording which outer\nrows have a matching inner row, then emits output via\n`filter_record_batch`.\n\n**Algorithm:** Merge-scan across two sorted inputs. On key match without\nfilter, set matched bits for the outer key group. With filter, buffer\nthe inner key group and evaluate the filter as outer_slice ×\ninner_scalar, OR-ing results into the bitset with\n`apply_bitwise_binary_op` (64 bits per iteration). Short-circuit when\nall outer rows in the group are matched.\n\n**Memory management:** The inner key group buffer is tracked via\n`MemoryReservation` and spilled to disk (via `SpillManager`) when the\nmemory pool limit is exceeded, matching existing `SortMergeJoinExec`\nbehavior. Metrics include `peak_mem_used`, `spill_count`,\n`spilled_bytes`, and `spilled_rows`.\n\n**Benchmark results** (best of 3, `dfbench smj`):\n\n| Query | Type | Old (ms) | New (ms) | Speedup |\n|-------|------|----------|----------|---------|\n| Q10 | LEFT SEMI, no filter | 4.79 | 4.27 | 1.12x |\n| Q11 | LEFT SEMI, 1% filter | 3.00 | 2.30 | 1.31x |\n| Q12 | LEFT SEMI, 50% filter | 38.1 | 5.52 | 6.9x |\n| Q13 | LEFT SEMI, 90% filter | 66.9 | 10.2 | 6.6x |\n| Q14 | LEFT ANTI, no filter | 4.96 | 4.13 | 1.20x |\n| Q15 | LEFT ANTI, partial match | 4.80 | 4.22 | 1.14x |\n| Q16 | LEFT ANTI, stress | 1.63 | 1.64 | 1.00x |\n| Q18 | LEFT SEMI, 2% filter | 7.61 | 5.34 | 1.42x |\n| Q19 | LEFT ANTI, partial match | 24.1 | 21.8 | 1.10x |\n\nNon-semi/anti queries are unaffected (same stream as before).\n\n## Are these changes tested?\n\n- 5 stream-level unit tests covering async re-entry (`PendingStream`),\nbatch boundary handling, filtered joins, and spill-to-disk edge cases\n- Fuzz tests (`join_fuzz.rs`) compare `SortMergeJoinExec` output against\n`HashJoinExec` for all semi/anti join types, with and without filters,\nacross multiple batch sizes and sort key combinations. Ran 1000+\niterations locally with random seeds.\n- Existing SMJ unit tests in `sort_merge_join/tests.rs` continue to\nexercise semi/anti join types through `SortMergeJoinExec`, now hitting\nthe new stream\n- Existing `sort_merge_join.slt` sqllogic tests pass (the stream change\nis transparent to the SQL layer)\n- I ported the operator to Comet\nhttps://github.com/apache/datafusion-comet/pull/3648 and saw good\nspeedup with TPC-H Q21 (SF10 on my laptop):\n\n**Current operator:**\n\n\u003cimg width\u003d\"1414\" height\u003d\"1158\" alt\u003d\"Screenshot 2026-03-08 at 5 38 17\nPM\"\nsrc\u003d\"https://github.com/user-attachments/assets/399c97e3-ef90-49c8-9c8d-220427636840\"\n/\u003e\n\n**PR #20806:**\n\n\u003cimg width\u003d\"1340\" height\u003d\"890\" alt\u003d\"Screenshot 2026-03-08 at 5 38 10 PM\"\nsrc\u003d\"https://github.com/user-attachments/assets/f57d331b-9894-4290-85b3-6526b04a8a61\"\n/\u003e\n\n(metrics and spilling were not hooked up in the version I ported to\nComet, but this query does not spill anyway)\n\n## Are there any user-facing changes?\nNo. The new stream is used automatically for semi/anti sort-merge joins.\nThere are no new config flags, no API changes, and no changes to query\nplans.\n\n**Known limitations to address in follow-up PRs:**\n- Remove semi/anti-specific logic from the existing\n`SortMergeJoinStream` (dead code for those join types now).\n- I am keeping an eye on\nhttps://github.com/apache/datafusion/pull/20455."
    },
    {
      "commit": "9b726bcf288e7779b855ead5b869b0a69aba5c92",
      "tree": "a101e801ce389f0063c8b6f44221a2944b26c6df",
      "parents": [
        "6e0dde0890ef967183f5fa828195a44cbf99b870"
      ],
      "author": {
        "name": "Stu Hood",
        "email": "stuhood@gmail.com",
        "time": "Wed Mar 25 10:07:12 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 17:07:12 2026 +0000"
      },
      "message": "Enable debug assertions in CI. (#20832)\n\n## Which issue does this PR close?\n\n- Closes #20831.\n\n## Rationale for this change\n\nCI uses release profiles to allow tests to run more quickly (and\npotentially also to provide more coverage for the most realistic case\nfor end users of the system). But debug assertions can expose real bugs\n/ mistaken assumptions, and so they should be covered in CI as well.\n\n## What changes are included in this PR?\n\nAdjust the Rust build profiles which are used in CI to enable debug\nassertions.\n\n## Are these changes tested?\n\nYes, by CI.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "6e0dde0890ef967183f5fa828195a44cbf99b870",
      "tree": "fe9c09a5c2d00f8a8b3fd4258cf0fbb5182f27eb",
      "parents": [
        "e62533b727f98d5c6ee5a222d522aad5606e5a28"
      ],
      "author": {
        "name": "Kumar Ujjawal",
        "email": "ujjawalpathak6@gmail.com",
        "time": "Wed Mar 25 20:49:26 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 15:19:26 2026 +0000"
      },
      "message": "fix(stats): widen sum_value integer arithmetic to SUM-compatible types (#20865)\n\n## Which issue does this PR close?\n\n\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 #20826.\n\n## Rationale for this change\n\nAs discussed in the review thread on #20768 and tracked by #20826,\n`sum_value` should not keep narrow integer column types during stats\naggregation, because merge/multiply paths can overflow before values are\nwidened.\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?\n\nThis PR updates statistics `sum_value` arithmetic to match SUM-style\nwidening for small integer types, and applies that behavior consistently\nacross merge and multiplication paths.\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"
    },
    {
      "commit": "e62533b727f98d5c6ee5a222d522aad5606e5a28",
      "tree": "62d84125ac435299442a16a3ec8489be140f585f",
      "parents": [
        "4084a18bc709d65f9901fa0d51932867ce9f6342"
      ],
      "author": {
        "name": "Haresh Khanna",
        "email": "kh.haresh@gmail.com",
        "time": "Wed Mar 25 14:41:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 14:41:40 2026 +0000"
      },
      "message": "Substrait join consumer should not merge nullability of join keys (#21121)\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 #21124 \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\nWhen a Substrait join expression contains both equal and\nis_not_distinct_from predicates (e.g. Spark pushes a null-safe filter\ninto a join that already has a regular equality key), the\n`split_eq_and_noneq_join_predicate_with_nulls_equality` function uses a\nsingle `nulls_equal_nulls` boolean that gets overwritten per-predicate.\nWhichever operator is processed last determines the `NullEquality` for\nall keys, silently dropping NULL-matching rows.\n\nSince NullEquality is a join-level setting (not per-key) across all\nphysical join implementations (HashJoinExec, SortMergeJoinExec,\nSymmetricHashJoinExec), the correct fix is to match DataFusion\u0027s own SQL\nplanner behavior: demote IS NOT DISTINCT FROM keys to the join filter\nwhen mixed with Eq keys. This is already correctly handled for SQL as\nshown in\n[join_is_not_distinct_from.slt:L188](https://sourcegraph.com/r/github.com/apache/datafusion@2b7d4f9a5b005905b23128274ad37c3306ffcd15/-/blob/datafusion/sqllogictest/test_files/join_is_not_distinct_from.slt?L188)\n```\n# Test mixed equal and IS NOT DISTINCT FROM conditions\n# The `IS NOT DISTINCT FROM` expr should NOT in HashJoin\u0027s `on` predicate\nquery TT\nEXPLAIN SELECT t1.id AS t1_id, t2.id AS t2_id, t1.val, t2.val\nFROM t1\nJOIN t2 ON t1.id \u003d t2.id AND t1.val IS NOT DISTINCT FROM t2.val\n----\nlogical_plan\n01)Projection: t1.id AS t1_id, t2.id AS t2_id, t1.val, t2.val\n02)--Inner Join: t1.id \u003d t2.id Filter: t1.val IS NOT DISTINCT FROM t2.val\n03)----TableScan: t1 projection\u003d[id, val]\n04)----TableScan: t2 projection\u003d[id, val]\n```\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`datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs`:\n- Collect eq_keys and indistinct_keys separately instead of using a\nsingle vec with an overwritable boolean\n- When both are present (mixed case), use eq_keys as equijoin keys with\nNullEqualsNothing and reconstruct the IsNotDistinctFrom expressions into\nthe join filter\n  - Return NullEquality directly instead of converting from bool\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\nYes, three levels of coverage:\n\n1. Unit tests (join_rel.rs) — directly assert the output of\nsplit_eq_and_noneq_join_predicate_with_nulls_equality for eq-only,\nindistinct-only, mixed, and non-column-operand cases\n2. Integration test (consumer_integration.rs) — loads a JSON-encoded\nSubstrait plan with a JoinRel containing both operators through\nfrom_substrait_plan, executes it, and asserts 6 rows (including\nNULL\u003dNULL matches)\n3. Existing SLT (join_is_not_distinct_from.slt:179-205) — confirms the\nSQL planner already exhibits the same demotion behavior that this PR\nadds to the Substrait consumer\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\nNo API changes. Substrait plans with mixed equal/is_not_distinct_from\njoin predicates now correctly preserve null-safe semantics instead of\nsilently dropping NULL-matching rows."
    },
    {
      "commit": "4084a18bc709d65f9901fa0d51932867ce9f6342",
      "tree": "652399115283c371b7b4901487c62b22b5b122c5",
      "parents": [
        "a07490236c66d03b06b288bdda6f0c9e787c5d7b"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Wed Mar 25 18:09:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 10:09:41 2026 +0000"
      },
      "message": "Simplify sqllogictest timing summary to boolean flag and remove top-N modes (#20598)\n\n## Which issue does this PR close?\n\n- [Follow up action on #20569\n](https://github.com/apache/datafusion/pull/20569#pullrequestreview-3861207592)\n\n## Rationale for this change\n\nThe previous implementation introduced multiple timing summary modes\n(`auto`, `off`, `top`, `full`) and a dedicated `--timing-top-n` flag.\nUpon review, this additional complexity does not appear necessary.\n\nThe only functionality that requires internal support within\n`sqllogictests` is deterministic per-file timing capture and reporting.\nOutput shaping (such as limiting results to the top N entries) can be\nachieved using standard Unix tooling, for example:\n\n```bash\ncargo test --test sqllogictests -- --timing-summary | head -n 10\n```\n\nThis approach:\n\n* Keeps the core implementation simpler\n* Reduces the number of specialized flags and modes\n* Aligns with the Unix philosophy of composable tools\n* Improves long-term maintainability by avoiding feature creep\n\nIn short, this change streamlines the timing functionality to focus\nsolely on deterministic per-file timing output, while delegating output\nfiltering to external tools.\n\n## What changes are included in this PR?\n\n* Replaced `TimingSummaryMode` enum (`auto|off|top|full`) with a simple\nboolean `--timing-summary` flag\n* Removed `--timing-top-n` and related parsing logic\n* Removed environment variable `SLT_TIMING_TOP_N`\n* Simplified `print_timing_summary` to:\n\n  * Print full deterministic per-file timing output when enabled\n  * Write directly to stdout using a locked handle\n  * Remove truncation and omission logic\n* Suppressed periodic CI progress output when deterministic timing\nsummary is enabled to keep output stable\n* Updated README documentation to reflect:\n\n  * Timing summary is disabled by default\n  * Enabled via `--timing-summary` or `SLT_TIMING_SUMMARY\u003d1`\n* Examples using shell tools (e.g., `head -n 10`) instead of built-in\ntop-N modes\n\n## Are these changes tested?\n\nNo new tests were added.\n\nThis change refactors CLI behavior and output formatting but does not\nalter core test execution logic. Existing `sqllogictest` coverage\ncontinues to validate execution behavior. The timing summary\nfunctionality can be manually verified by running:\n\n```bash\ncargo test --test sqllogictests -- --timing-summary\n```\n\nBecause the implementation is simplified (removing conditional branches\nand modes), overall surface area for bugs is reduced.\n\n## Are there any user-facing changes?\n\nYes.\n\n* The following flags and modes have been removed:\n\n  * `--timing-summary auto|off|top|full`\n  * `--timing-top-n`\n  * `SLT_TIMING_TOP_N`\n* `--timing-summary` is now a boolean flag (disabled by default).\n* When enabled, it prints the full deterministic per-file timing\nsummary.\n* Users who want only the top N results should use standard shell\ntooling (e.g., `head`, `tail`).\n\nThis is a CLI behavior change but results in a simpler and more\npredictable interface.\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.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "a07490236c66d03b06b288bdda6f0c9e787c5d7b",
      "tree": "e01f3d51886cdc66e31fc1037ba3a06369398107",
      "parents": [
        "a3dc8fa0c6b28b159ca0dcbb5cbd06f279eb3945"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Wed Mar 25 05:46:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 09:46:20 2026 +0000"
      },
      "message": "Update to arrow/parquet `58.1.0` (#21044)\n\n~Note this is a draft PR until I have completed the release of arrow 58~\n\n## Which issue does this PR close?\n- Part of https://github.com/apache/arrow-rs/issues/9108\n- Closes https://github.com/apache/datafusion/issues/20689\n- Closes https://github.com/apache/datafusion/issues/20831\n\n## Rationale for this change\n\nUpdate to latest release of arrow\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\nBy CI\n\nI also manually ran\n```shell\ncargo test --test sqllogictests\n```\n\nAnd it passes (vs failing with asserts on main):\n\n```\n...\n\n```\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": "a3dc8fa0c6b28b159ca0dcbb5cbd06f279eb3945",
      "tree": "9b1b9181254143e602fcff482193398bdfb8a3c9",
      "parents": [
        "0294c6ca746c41365a71138299ca9286b1a112b7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Mar 25 10:35:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 08:35:02 2026 +0000"
      },
      "message": "chore(deps): bump github/codeql-action from 4.33.0 to 4.34.1 (#21132)\n\nBumps [github/codeql-action](https://github.com/github/codeql-action)\nfrom 4.33.0 to 4.34.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.34.1\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\u003ev4.34.0\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\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.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\u003cli\u003eReduced log levels for best-effort private package registry\nconnection check failures to reduce noise from workflow annotations. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3516\"\u003e#3516\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which lowers the minimum disk space\nrequirement for \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e, enabling it to run on standard GitHub Actions\nrunners. We expect to roll this change out to everyone in March. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3498\"\u003e#3498\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which allows the\n\u003ccode\u003estart-proxy\u003c/code\u003e action to resolve the CodeQL CLI version from\nfeature flags instead of using the linked CLI bundle version. We expect\nto roll this change out to everyone in March. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3512\"\u003e#3512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe previously experimental changes from versions 4.32.3, 4.32.4,\n3.32.3 and 3.32.4 are now enabled by default. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3503\"\u003e#3503\u003c/a\u003e,\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3504\"\u003e#3504\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.32.4 - 20 Feb 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.2\"\u003e2.24.2\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3493\"\u003e#3493\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which improves how certificates are\ngenerated for the authentication proxy that is used by the CodeQL Action\nin Default Setup when \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 are configured\u003c/a\u003e. This is expected to generate more\nwidely compatible certificates and should have no impact on analyses\nwhich are working correctly already. We expect to roll this change out\nto everyone in February. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3473\"\u003e#3473\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/38697555549f1db7851b81482ff19f1fa5c4fedc\"\u003e\u003ccode\u003e3869755\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3763\"\u003e#3763\u003c/a\u003e\nfrom github/update-v4.34.1-095e0fe50\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/20e68ac12bc8d1eb16a56d3ef4e78263197d2e47\"\u003e\u003ccode\u003e20e68ac\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/095e0fe505bb5ab6198675d021352632c2c69a46\"\u003e\u003ccode\u003e095e0fe\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3762\"\u003e#3762\u003c/a\u003e\nfrom github/henrymercer/downgrade-default-bundle\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/47b94fe61cd788995769140a7a8adffec0738aa1\"\u003e\u003ccode\u003e47b94fe\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/51a1d6917f5d33f400200c675401974da443b2ea\"\u003e\u003ccode\u003e51a1d69\u003c/code\u003e\u003c/a\u003e\nDowngrade default bundle to codeql-bundle-v2.24.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/510cf736e330d7eb9bc471636d65aaa180118824\"\u003e\u003ccode\u003e510cf73\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3589\"\u003e#3589\u003c/a\u003e\nfrom github/mergeback/v4.34.0-to-main-c6f93110\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/89f0c86efa3acf01faeff510383f0c4a4152760a\"\u003e\u003ccode\u003e89f0c86\u003c/code\u003e\u003c/a\u003e\nRebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c3f90ba975e427c1913b529a89ef97a2442493f2\"\u003e\u003ccode\u003ec3f90ba\u003c/code\u003e\u003c/a\u003e\nUpdate changelog and version after v4.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c6f931105cb2c34c8f901cc885ba1e2e259cf745\"\u003e\u003ccode\u003ec6f9311\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3588\"\u003e#3588\u003c/a\u003e\nfrom github/update-v4.34.0-30c555a52\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/eeb9b3f4244c2945a20b9761dfa77f19d468d35f\"\u003e\u003ccode\u003eeeb9b3f\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.34.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/b1bff81932f5cdfc8695c7752dcee935dcd061c8...38697555549f1db7851b81482ff19f1fa5c4fedc\"\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.33.0\u0026new-version\u003d4.34.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": "0294c6ca746c41365a71138299ca9286b1a112b7",
      "tree": "bd0c4ff0f4087e423bc4c052ed322ff572c4f2ed",
      "parents": [
        "d5302768c9cc0b0c79622985c847018bc9f5abbc"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Mar 25 10:34:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 08:34:14 2026 +0000"
      },
      "message": "chore(deps): bump taiki-e/install-action from 2.68.34 to 2.69.7 (#21133)\n\nBumps\n[taiki-e/install-action](https://github.com/taiki-e/install-action) from\n2.68.34 to 2.69.7.\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.69.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eprek@latest\u003c/code\u003e to 0.3.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-valgrind@latest\u003c/code\u003e to 2.4.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport signature verification for \u003ccode\u003emise\u003c/code\u003e and\n\u003ccode\u003esyft\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1611\"\u003e#1611\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eknope@latest\u003c/code\u003e to 0.22.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-binstall@latest\u003c/code\u003e to 1.17.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ecargo-nextest@latest\u003c/code\u003e to 0.9.132.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.4\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport artifact attestations verification for \u003ccode\u003ebiome\u003c/code\u003e,\n\u003ccode\u003ecargo-cyclonedx\u003c/code\u003e, \u003ccode\u003ecargo-hack\u003c/code\u003e,\n\u003ccode\u003ecargo-llvm-cov\u003c/code\u003e, \u003ccode\u003ecargo-minimal-versions\u003c/code\u003e,\n\u003ccode\u003ecargo-no-dev-deps\u003c/code\u003e, \u003ccode\u003emartin\u003c/code\u003e,\n\u003ccode\u003eparse-changelog\u003c/code\u003e, \u003ccode\u003eparse-dockerfile\u003c/code\u003e,\n\u003ccode\u003eprek\u003c/code\u003e, \u003ccode\u003euv\u003c/code\u003e, \u003ccode\u003ewasmtime\u003c/code\u003e,\n\u003ccode\u003ezizmor\u003c/code\u003e, and \u003ccode\u003ezola\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1606\"\u003e#1606\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eparse-dockerfile@latest\u003c/code\u003e to 0.1.5.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eparse-changelog@latest\u003c/code\u003e to 0.6.16.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-llvm-cov@latest\u003c/code\u003e to 0.8.5.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasmtime@latest\u003c/code\u003e to 43.0.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-no-dev-deps@latest\u003c/code\u003e to 0.2.23.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-minimal-versions@latest\u003c/code\u003e to 0.1.37.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-hack@latest\u003c/code\u003e to 0.6.44.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.10.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eprotoc@latest\u003c/code\u003e to 3.34.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDowngrade \u003ccode\u003etrivy@latest\u003c/code\u003e to 0.69.3. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1602\"\u003e#1602\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.69.2\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\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\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.48.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.11.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003erclone@latest\u003c/code\u003e to 1.73.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.13.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.7] - 2026-03-23\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eprek@latest\u003c/code\u003e to 0.3.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-valgrind@latest\u003c/code\u003e to 2.4.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.6] - 2026-03-21\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport signature verification for \u003ccode\u003emise\u003c/code\u003e and\n\u003ccode\u003esyft\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1611\"\u003e#1611\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eknope@latest\u003c/code\u003e to 0.22.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-binstall@latest\u003c/code\u003e to 1.17.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 0.9.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.5] - 2026-03-21\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003ecargo-nextest@latest\u003c/code\u003e to 0.9.132.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.69.4] - 2026-03-20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSupport artifact attestations verification for \u003ccode\u003ebiome\u003c/code\u003e,\n\u003ccode\u003ecargo-cyclonedx\u003c/code\u003e, \u003ccode\u003ecargo-hack\u003c/code\u003e,\n\u003ccode\u003ecargo-llvm-cov\u003c/code\u003e, \u003ccode\u003ecargo-minimal-versions\u003c/code\u003e,\n\u003ccode\u003ecargo-no-dev-deps\u003c/code\u003e, \u003ccode\u003emartin\u003c/code\u003e,\n\u003ccode\u003eparse-changelog\u003c/code\u003e, \u003ccode\u003eparse-dockerfile\u003c/code\u003e,\n\u003ccode\u003eprek\u003c/code\u003e, \u003ccode\u003euv\u003c/code\u003e, \u003ccode\u003ewasmtime\u003c/code\u003e,\n\u003ccode\u003ezizmor\u003c/code\u003e, and \u003ccode\u003ezola\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/taiki-e/install-action/pull/1606\"\u003e#1606\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.4.8.\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/0d865d5cc6d507df4765f1f866bfae8bab4e2a73\"\u003e\u003ccode\u003e0d865d5\u003c/code\u003e\u003c/a\u003e\nRelease 2.69.7\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/78e479f93381aa7a88871ed473757a32158972e5\"\u003e\u003ccode\u003e78e479f\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003eprek@latest\u003c/code\u003e to 0.3.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/3da8dc3058462c6dec53463f2d04d65998ac769f\"\u003e\u003ccode\u003e3da8dc3\u003c/code\u003e\u003c/a\u003e\nUpdate cspell dictionary\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/dcad28ece20a148ca13d628754e681c1da4ca264\"\u003e\u003ccode\u003edcad28e\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.3.12\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/2c637c3acd58d858d7d0b2978a98bd432c7e488f\"\u003e\u003ccode\u003e2c637c3\u003c/code\u003e\u003c/a\u003e\nRemove duplicated retry\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/ef1e8ec3f0d595400d826f4a1d93cf90f7810935\"\u003e\u003ccode\u003eef1e8ec\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/0673e7604ed838fbaaef48dffa6747bea1c3b3b8\"\u003e\u003ccode\u003e0673e76\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecargo-valgrind@latest\u003c/code\u003e to 2.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/06203676c62f0d3c765be3f2fcfbebbcb02d09f5\"\u003e\u003ccode\u003e0620367\u003c/code\u003e\u003c/a\u003e\nRelease 2.69.6\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/c35d18270ed5854e49216c966eeba9fefcf55940\"\u003e\u003ccode\u003ec35d182\u003c/code\u003e\u003c/a\u003e\nSupport signature verification for mise and syft\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/525387f7062a7226eca3ba0d9feb0ab74b838756\"\u003e\u003ccode\u003e525387f\u003c/code\u003e\u003c/a\u003e\ncodegen: Clean up error handling and move some checks to\nappropriate\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/compare/de6bbd1333b8f331563d54a051e542c7dfef81c3...0d865d5cc6d507df4765f1f866bfae8bab4e2a73\"\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.68.34\u0026new-version\u003d2.69.7)](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": "d5302768c9cc0b0c79622985c847018bc9f5abbc",
      "tree": "e13741b284381b471635f5b0334781872378319f",
      "parents": [
        "f30b85ccf55ca990a70577a4f074fc1dbe502985"
      ],
      "author": {
        "name": "Ernest Provo",
        "email": "53497290+ernestprovo23@users.noreply.github.com",
        "time": "Tue Mar 24 17:27:32 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 21:27:32 2026 +0000"
      },
      "message": "Fix `elapsed_compute` metric for Parquet DataSourceExec (#20767)\n\n## Which issue does this PR close?\n\nCloses part of https://github.com/apache/datafusion/issues/18195 —\nspecifically the `elapsed_compute` baseline metric sub-item for Parquet\nscans.\n\n## Rationale\n\n`EXPLAIN ANALYZE` on Parquet scans reports `elapsed_compute` values like\n`14ns` for full table scans, which is misleading. The metric was never\nbeing populated because no timer wrapped the per-batch compute work in\nthe Parquet scan path.\n\n## What changes are included in this PR?\n\nFollows the same pattern established in PR #18901 (CSV fix):\n\n1. Added `BaselineMetrics` instantiation in `ParquetOpener::open()`\nusing the existing `metrics` and `partition_index` fields\n2. Wrapped the per-batch stream `.map()` closure with an\n`elapsed_compute` timer that measures projection, schema replacement,\nand metrics copy work\n\nSingle file changed: `datafusion/datasource-parquet/src/opener.rs` (+7,\n-3 lines)\n\n## Are these changes tested?\n\n- All 81 existing tests in `datafusion-datasource-parquet` pass\n- The metric correctness is verified by observing realistic\n`elapsed_compute` values in `EXPLAIN ANALYZE` output (no longer showing\nnanosecond-level values for real scans)\n- Per maintainer guidance from @2010YOUY01: \"Testing if we have the time\nmeasured correct is tricky, I don\u0027t think there is a good way to do it.\nBut for a large parquet file scan, several nanoseconds is definitely not\nreasonable.\"\n\n## Are there any user-facing changes?\n\n`EXPLAIN ANALYZE` output for Parquet scans will now show accurate\n`elapsed_compute` values reflecting actual CPU time spent on per-batch\nprocessing.\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "f30b85ccf55ca990a70577a4f074fc1dbe502985",
      "tree": "77b01bc4da278f883e3393b9f429c0e3af12ee29",
      "parents": [
        "8d47fc6034ff8a2da72ecb3e9602a4357100cd54"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 24 16:47:32 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:47:32 2026 +0000"
      },
      "message": "chore(deps): bump env_logger from 0.11.9 to 0.11.10 in the all-other-cargo-deps group across 1 directory (#21136)\n\nBumps the all-other-cargo-deps group with 1 update in the / directory:\n[env_logger](https://github.com/rust-cli/env_logger).\n\nUpdates `env_logger` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/releases\"\u003eenv_logger\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch2\u003e[0.11.10] - 2026-03-23\u003c/h2\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies\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-cli/env_logger/blob/main/CHANGELOG.md\"\u003eenv_logger\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] - 2026-03-23\u003c/h2\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependencies\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-cli/env_logger/commit/41320bf391e3d62cc0171f83403c6d684686ac98\"\u003e\u003ccode\u003e41320bf\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/de8c74f47cb137541ac3c740b1fa77f46554dc25\"\u003e\u003ccode\u003ede8c74f\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/d550741cdcd1d64f8a564158d9d0b2554f5d900d\"\u003e\u003ccode\u003ed550741\u003c/code\u003e\u003c/a\u003e\ndocs(gh): Add sponsor link\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/458b07544b86495075418e4d81cc048c98f362b6\"\u003e\u003ccode\u003e458b075\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Rust Stable to v1.94 (\u003ca\nhref\u003d\"https://redirect.github.com/rust-cli/env_logger/issues/401\"\u003e#401\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/8bc3fc3e1db40d82a40b485e4c7971ac257d17a2\"\u003e\u003ccode\u003e8bc3fc3\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/rust-cli/env_logger/issues/400\"\u003e#400\u003c/a\u003e\nfrom epage/update\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/143fa647ab33ed3acc9f160dfa3cb075cc62b5a3\"\u003e\u003ccode\u003e143fa64\u003c/code\u003e\u003c/a\u003e\nchore: Upgrade incompatible\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/b687a2418ab8eeb031a55f561be50742ede27baf\"\u003e\u003ccode\u003eb687a24\u003c/code\u003e\u003c/a\u003e\nchore: Upgrade compatible\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/8cf1ba99129eeccc9914f9c3059ac6acc0686ba4\"\u003e\u003ccode\u003e8cf1ba9\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/rust-cli/env_logger/issues/397\"\u003e#397\u003c/a\u003e\nfrom rust-cli/renovate/crate-ci-typos-1.x\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/094ecf7a8adbf013877f7e0883774008a95dbe3d\"\u003e\u003ccode\u003e094ecf7\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/rust-cli/env_logger/issues/396\"\u003e#396\u003c/a\u003e\nfrom rust-cli/renovate/crate-ci-committed-1.x\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/commit/34ad62679742adceb156ce5a59b0a277a8b67771\"\u003e\u003ccode\u003e34ad626\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update pre-commit hook crate-ci/typos to v1.44.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/rust-cli/env_logger/compare/v0.11.9...v0.11.10\"\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\u003denv_logger\u0026package-manager\u003dcargo\u0026previous-version\u003d0.11.9\u0026new-version\u003d0.11.10)](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 \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\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "8d47fc6034ff8a2da72ecb3e9602a4357100cd54",
      "tree": "4cac9e4878c78c3cecc0d0d03405507268831cd6",
      "parents": [
        "aa9d8195ac3565b4cb4b07d112c52ae1a793460f"
      ],
      "author": {
        "name": "Kazantsev Maksim",
        "email": "kazantsev.maksim.n@gmail.com",
        "time": "Wed Mar 25 00:47:00 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:47:00 2026 +0000"
      },
      "message": "Spark soundex function implementation (#20725)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nAdd new spark function:\nhttps://spark.apache.org/docs/latest/api/sql/index.html#soundex\n\n## What changes are included in this PR?\n\n- Implementation\n- SLT tests\n\n## Are these changes tested?\n\nYes, tests added as part of this PR.\n\n## Are there any user-facing changes?\n\nNo, these are new function.\n\n---------\n\nCo-authored-by: Kazantsev Maksim \u003cmn.kazantsev@gmail.com\u003e"
    },
    {
      "commit": "aa9d8195ac3565b4cb4b07d112c52ae1a793460f",
      "tree": "62d952bb151876dc31cf6d585a06f6ade94b8c3e",
      "parents": [
        "4d5aea4b5ad3f3e172f9b7dafae30069c4204bfb"
      ],
      "author": {
        "name": "lyne",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Wed Mar 25 04:43:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:43:49 2026 +0000"
      },
      "message": "perf: optimize map validation for common key types (#20805)\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  This PR optimizes `map` key validation for common key types.\n\nPreviously, `map` validation always used the generic\n`ScalarValue::try_from_array` path, which is more expensive than\nnecessary for common key types such as primitive integers, strings, and\nbinary values.\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- specialize `map` key validation for primitive, string, and binary key\ntypes\n- keep the generic fallback for unsupported key types\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. current unit tests and slts test passed. benchmark added.\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\nNo.\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: Neil Conway \u003cneil.conway@gmail.com\u003e"
    },
    {
      "commit": "4d5aea4b5ad3f3e172f9b7dafae30069c4204bfb",
      "tree": "c375a75234000bd42a3d3ddd539ac7e22f806244",
      "parents": [
        "10fae81bf6e34eb0b0229b3dd39335cb3429270e"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Mar 24 16:41:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:41:55 2026 +0000"
      },
      "message": "perf: Optimize `array_min`, `array_max` for arrays of primitive types (#21101)\n\n## Which issue does this PR close?\n\n- Closes #21100.\n\n## Rationale for this change\n\nIn the current implementation, we construct a `PrimitiveArray` for each\nrow, feed it to the Arrow `min` / `max` kernel, and then collect the\nresulting `ScalarValue`s in a `Vec`. We then construct a final\n`PrimitiveArray` for the result via `ScalarValue::iter_to_array` of the\n`Vec`.\n\nWe can do better for ListArrays of primitive types. First, we can\niterate directly over the flat values buffer of the `ListArray` for the\nbatch and compute the min/max from each row\u0027s slice directly. Second,\nArrow\u0027s `min` / `max` kernels have a reasonable amount of per-call\noverhead; for small arrays, it is more efficient to compute the min/max\nourselves via direct iteration.\n\nBenchmarks (8192 rows, arrays of int64 values, M4 Max):\n\n  - no_nulls / list_size\u003d10: 309 µs → 26.6 µs (11.6x faster)\n  - no_nulls / list_size\u003d100: 392 µs → 150 µs (2.6x faster)\n  - no_nulls / list_size\u003d1000: 1.20 ms → 951 µs (1.26x faster)\n  - nulls / list_size\u003d10: 385 µs → 69.0 µs (5.6x faster)\n  - nulls / list_size\u003d100: 790 µs → 616 µs (1.28x faster)\n  - nulls / list_size\u003d1000: 5.34 ms → 5.21 ms (1.02x faster)\n\n## What changes are included in this PR?\n\n* Add benchmark for `array_max`\n* Expand SLT test coverage\n* Implement optimization\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "10fae81bf6e34eb0b0229b3dd39335cb3429270e",
      "tree": "7d4a9dd8e15453f4c10e97a94ce9674879d75148",
      "parents": [
        "dc9098ef66d03e5e14584382844367febec80c4c"
      ],
      "author": {
        "name": "Shiv Bhatia",
        "email": "shivbhatia10@gmail.com",
        "time": "Tue Mar 24 20:21:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:21:18 2026 +0000"
      },
      "message": "Fix push_down_filter for children with non-empty fetch fields (#21057)\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/21063\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\nCurrently if we see a filter with a limit underneath, we don\u0027t push the\nfilter past the limit. However, sort nodes and table scan nodes can have\nfetch fields which do essentially the same thing, and we don\u0027t stop\nfilters being pushed past them. This is a correctness bug that can lead\nto undefined behaviour.\n\nI added checks for exactly this condition so we don\u0027t push the filter\ndown. I think the prior expectation was that there would be a limit node\nbetween any of these nodes, but this is also not true. In\n`push_down_limit.rs`, there\u0027s code that does this optimisation when a\nlimit has a sort under it:\n \n ```\n            LogicalPlan::Sort(mut sort) \u003d\u003e {\n                let new_fetch \u003d {\n                    let sort_fetch \u003d skip + fetch;\nSome(sort.fetch.map(|f| f.min(sort_fetch)).unwrap_or(sort_fetch))\n                };\n                if new_fetch \u003d\u003d sort.fetch {\n                    if skip \u003e 0 {\noriginal_limit(skip, fetch, LogicalPlan::Sort(sort))\n                    } else {\n                        Ok(Transformed::yes(LogicalPlan::Sort(sort)))\n                    }\n                } else {\n                    sort.fetch \u003d new_fetch;\n                    limit.input \u003d Arc::new(LogicalPlan::Sort(sort));\n                    Ok(Transformed::yes(LogicalPlan::Limit(limit)))\n                }\n            }\n```\nThe first time this runs, it sets the internal fetch of the sort to new_fetch, and on the second optimisation pass it hits the branch where we just get rid of the limit node altogether, leaving the sort node exposed to potential filters which can now push down into it.\n\nThere is also a related fix in `gather_filters_for_pushdown` in `SortExec`, which does the same thing for physical plan nodes. If we see that a given execution plan has non-empty fetch, it should not allow any parent filters to be pushed down.\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 is sometimes worth providing a summary of the individual changes in this PR.\n--\u003e\n\nAdded checks in the optimisation rule to avoid pushing filters past children with built-in limits.\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, are they covered by existing tests)?\n--\u003e\n\nYes:\n- Unit tests in `push_down_filter.rs`\n- Fixed an existing test in `window.slt`\n- Unit tests for the physical plan change in `sort.rs`\n- New slt test in `push_down_filter_sort_fetch.slt` for this exact behaviour\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be updated before approving the PR.\n--\u003e\n\nNo\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api change` label.\n--\u003e\n\n---------\n\nCo-authored-by: Shiv Bhatia \u003csbhatia@palantir.com\u003e"
    },
    {
      "commit": "dc9098ef66d03e5e14584382844367febec80c4c",
      "tree": "c0ce44319a5c359f0fe1befadf760adddfe580f8",
      "parents": [
        "76075e2f359d309ec6baee2553ea538932a78979"
      ],
      "author": {
        "name": "Namgung Chan",
        "email": "33323415+getChan@users.noreply.github.com",
        "time": "Wed Mar 25 05:17:41 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:17:41 2026 +0000"
      },
      "message": "chore: update testcontainers and astral-tokio-tar for cargo audit (#21114)\n\n## Which issue does this PR close?\n\n- N/A\n\n## Rationale for this change\n\n`cargo audit --ignore RUSTSEC-2024-0014` started failing due to\n`RUSTSEC-2026-0066` in `astral-tokio-tar 0.5.6`, which was pulled in\ntransitively through `testcontainers`.\n\nAs a result, the `Security audit` GitHub Actions workflow is currently\nfailing on this dependency resolution.\n\nThis change only updates `Cargo.lock` because the existing version\nrequirements in `Cargo.toml` already allow a safe resolution.\nRe-resolving the lockfile is enough to move from `testcontainers 0.27.1`\nto `0.27.2`, which in turn updates `astral-tokio-tar` from `0.5.6` to\n`0.6.0`.\n\n## What changes are included in this PR?\n\n- Updated `Cargo.lock`\n- Resolved `testcontainers` from `0.27.1` to `0.27.2`\n- Updated transitive `astral-tokio-tar` from `0.5.6` to `0.6.0`\n\n## Are these changes tested?\n\nYes.\n\n- `cargo test -p datafusion-cli`\n- `cargo audit --ignore RUSTSEC-2024-0014`\n\n## Are there any user-facing changes?\n\nNo.\n\nThis PR was created with the help of a coding agent."
    },
    {
      "commit": "76075e2f359d309ec6baee2553ea538932a78979",
      "tree": "f9357b6f4a689eb648ec48ebfa6d80d2f2f33da4",
      "parents": [
        "98defe6f32d8671a26656abd1b10bf0209478313"
      ],
      "author": {
        "name": "Rohan Krishnaswamy",
        "email": "47869999+rkrishn7@users.noreply.github.com",
        "time": "Tue Mar 24 13:14:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:14:09 2026 +0000"
      },
      "message": "Preserve SPM when parent maintains input order (#21097)\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 #21096\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- Updates `enforce_distribution.rs`\n- Adds 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\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\nN/A"
    },
    {
      "commit": "98defe6f32d8671a26656abd1b10bf0209478313",
      "tree": "8a6b270b5b10335f5b599ee5ff0e78968ad4805a",
      "parents": [
        "7f29cb050acd055c5cb52d620282fe9cb8ac2af0"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Wed Mar 25 04:10:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:10:45 2026 +0000"
      },
      "message": "chore: Fix all sqllogictest dangling configs (#21108)\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\nFollow up to https://github.com/apache/datafusion/pull/20838\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\nin #20838 it adds a way to check and warn about dangling config\nsettings, it has detected several existing violations but has not fixed\nthem:\n```sh\nyongting@Yongtings-MacBook-Pro-2 ~/C/datafusion (cleanup-slt)\u003e git checkout main\nSwitched to branch \u0027main\u0027\nYour branch is up to date with \u0027upstream/main\u0027.\nyongting@Yongtings-MacBook-Pro-2 ~/C/datafusion (main\u003d)\u003e cargo test --profile\u003dci --test sqllogictests\n   Compiling datafusion-sqllogictest v52.3.0 (/Users/yongting/Code/datafusion/datafusion/sqllogictest)\n    Finished `ci` profile [unoptimized] target(s) in 2.09s\n     Running bin/sqllogictests.rs (target/ci/deps/sqllogictests-7e2a8cc6115b158a)\nRunning with 14 test threads (available parallelism: 14)\nSLT file aggregate_repartition.slt left modified configuration\n  datafusion.execution.target_partitions: 4 -\u003e 1\nSLT file arrow_files.slt left modified configuration\n  datafusion.sql_parser.map_string_types_to_utf8view: true -\u003e false\nSLT file datetime/current_date_timezone.slt left modified configuration\n  datafusion.execution.time_zone: NULL -\u003e +00:00\n...\n```\n\nThis PR does\n1. Fix all the old violations\n2. For future slt dangling configurations, it fails the test run instead\nof only warn about it.\n\nI tested to add a config statement at the end of one `slt` file, and run\nthe test, it runs and failed as expected\n```sh\nyongting@Yongtings-MacBook-Pro-2 ~/C/datafusion (cleanup-slt)\u003e cargo test --profile\u003dci --test sqllogictests\n   Compiling datafusion-sqllogictest v52.3.0 (/Users/yongting/Code/datafusion/datafusion/sqllogictest)\n    Finished `ci` profile [unoptimized] target(s) in 2.28s\n     Running bin/sqllogictests.rs (target/ci/deps/sqllogictests-7e2a8cc6115b158a)\nRunning with 14 test threads (available parallelism: 14)\nCompleted 416 test files in 5 seconds\nExternal error: Other Error: SLT file sort_pushdown.slt left modified configuration\n  datafusion.optimizer.max_passes: 3 -\u003e 10\nError: Execution(\"1 failures\")\nerror: test failed, to rerun pass `-p datafusion-sqllogictest --test sqllogictests`\n```\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\n4. 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\nUT\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\nno"
    },
    {
      "commit": "7f29cb050acd055c5cb52d620282fe9cb8ac2af0",
      "tree": "512cfbbc27d191104fe1a6e4a7147f06a16ac9bb",
      "parents": [
        "56e097a9b8ffe6a17922ae1dc720cbc9147956db"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Tue Mar 24 08:38:16 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 13:38:16 2026 +0000"
      },
      "message": "Add `arrow_try_cast` UDF (#21130)\n\n## Which issue does this PR close?\n\nN/A - new feature\n\n## Rationale for this change\n\n`arrow_cast(expr, \u0027DataType\u0027)` casts to Arrow data types specified as\nstrings but errors on failure. `try_cast(expr AS type)` returns NULL on\nfailure but only works with SQL types. There\u0027s currently no way to\nattempt a cast to a specific Arrow type and get NULL on failure instead\nof an error.\n\n## What changes are included in this PR?\n\nAdds a new `arrow_try_cast(expression, datatype)` scalar function that\ncombines the behavior of `arrow_cast` and `try_cast`:\n- Accepts Arrow data type strings (like `arrow_cast`)\n- Returns NULL on cast failure instead of erroring (like `try_cast`)\n\nImplementation details:\n- Reuses `arrow_cast`\u0027s `data_type_from_args` helper (made `pub(crate)`)\n- Simplifies to `Expr::TryCast` during optimization (vs `Expr::Cast` for\n`arrow_cast`)\n- Registered alongside existing core functions\n\n## Are these changes tested?\n\nYes — new sqllogictest file `arrow_try_cast.slt` covering:\n- Successful casts (Int64, Float64, LargeUtf8, Dictionary)\n- Failed cast returning NULL\n- Same-type passthrough\n- NULL input\n- Invalid type string errors\n- Multiple casts in one query\n\n## Are there any user-facing changes?\n\nNew `arrow_try_cast` SQL function available.\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": "56e097a9b8ffe6a17922ae1dc720cbc9147956db",
      "tree": "d5e6b5821fceb53fb40dbbe5af115f9679756c06",
      "parents": [
        "cdaecf0321b95867da57ea1026004b8389f9f263"
      ],
      "author": {
        "name": "Yu-Chuan Hung",
        "email": "86523891+CuteChuanChuan@users.noreply.github.com",
        "time": "Tue Mar 24 20:58:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 12:58:21 2026 +0000"
      },
      "message": "perf: optimize scatter with type-specific specialization (#20498)\n\n## Which issue does this PR close?\n\nRelated to #11570 (scatter optimization suggested in\nhttps://github.com/apache/datafusion/pull/19994#issuecomment-3860528711)\n\n## Rationale for this change\n\nProfiling shows scatter consumes 50%+ of elapsed time in the \"10%\nzeroes\" divide-by-zero protection benchmark. The current implementation\nuses the generic MutableArrayData path for all array types.\n\n## What changes are included in this PR?\n\nApply the same type-specific specialization strategy used in arrow-rs\nfilter.rs to scatter:\n\n- Selectivity-based iteration: set_slices() for high selectivity,\nset_indices() for low selectivity\n- Type-specific dispatch via downcast_primitive_array! for primitives,\nboolean, bytes, byte views, dictionary, etc.\n- Fast paths for all-true and all-false masks\n- Fallback to MutableArrayData for unsupported types\n\n## Are these changes tested?\n\nExisting 4 scatter tests preserved. Additional tests will be added.\n\n## Are there any user-facing changes?\n\nNo. Public API signature is unchanged."
    },
    {
      "commit": "cdaecf0321b95867da57ea1026004b8389f9f263",
      "tree": "86cc0f43d12de3226f43de8859aee8f172c6bb9b",
      "parents": [
        "2b986c887224d818ee30b111d6c9047a45d20c35"
      ],
      "author": {
        "name": "dd-david-levin",
        "email": "david.levin@datadoghq.com",
        "time": "Tue Mar 24 04:08:45 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 08:08:45 2026 +0000"
      },
      "message": "fix: string_to_array(\u0027\u0027, delim) returns empty array for PostgreSQL compatibility (#21104)\n\n## Problem\n\n`string_to_array` was returning incorrect results for empty string input\n— both when the delimiter is non-empty and when the delimiter is itself\nan empty string. This diverges from PostgreSQL behavior.\n\n| Query | DataFusion (before) | PostgreSQL (expected) |\n|---|---|---|\n| `string_to_array(\u0027\u0027, \u0027,\u0027)` | `[\u0027\u0027]` | `{}` |\n| `string_to_array(\u0027\u0027, \u0027\u0027)` | `[\u0027\u0027]` | `{}` |\n| `string_to_array(\u0027\u0027, \u0027,\u0027, \u0027x\u0027)` | `[\u0027\u0027]` | `{}` |\n| `string_to_array(\u0027\u0027, \u0027\u0027, \u0027x\u0027)` | `[\u0027\u0027]` | `{}` |\n\nResults from datafusion-cli\n\u003cimg width\u003d\"1435\" height\u003d\"104\" alt\u003d\"Screenshot 2026-03-23 at 9 14 08 AM\"\nsrc\u003d\"https://github.com/user-attachments/assets/2eaae366-7f8a-4220-87d2-f0b311c26712\"\n/\u003e\n\n**Root cause:** Rust\u0027s `str::split()` on an empty string always yields\none empty-string element, so `\"\".split(\",\")` produces `[\"\"]`.\nAdditionally, the empty-delimiter branch unconditionally appended the\n(empty) string value. This is subtle because Arrow\u0027s text display format\nappears not to quote strings, so `[\"\"]` renders as `[]` —\nindistinguishable from an actual empty array. Using `cardinality()`\nreveals the current length is 1, not 0.\n\n**PostgreSQL reference:**\n[db-fiddle](https://www.db-fiddle.com/f/oCF8EPaZFkDNKSg28rVVWy/3)\n\n## Fix\n\nIn `datafusion/functions-nested/src/string.rs`:\n\n- **Non-empty delimiter** `(Some(string), Some(delimiter))`: added `if\n!string.is_empty()` guard to skip splitting when input is empty.\n- **Empty delimiter** `(Some(string), Some(\"\"))`: added `if\n!string.is_empty()` guard so the string value is only appended when\nnon-empty.\n\nBoth the plain variant and the `null_value` variant are fixed (4 checks\ntotal).\n\n## Tests\n\nAdded sqllogictest cases in\n`datafusion/sqllogictest/test_files/array.slt` using `cardinality()` to\nunambiguously verify the arrays are truly empty (not just displaying as\nempty):\n\n```sql\nSELECT cardinality(string_to_array(\u0027\u0027, \u0027,\u0027))    -- 0\nSELECT cardinality(string_to_array(\u0027\u0027, \u0027\u0027))     -- 0\nSELECT cardinality(string_to_array(\u0027\u0027, \u0027,\u0027, \u0027x\u0027))  -- 0\nSELECT cardinality(string_to_array(\u0027\u0027, \u0027\u0027, \u0027x\u0027))   -- 0\n```\n\nEach test covers one of the four `is_empty` guard checks. All four fail\nwithout the fix (returning 1 instead of 0)."
    },
    {
      "commit": "2b986c887224d818ee30b111d6c9047a45d20c35",
      "tree": "3a6259929cf5d76cec427b7a48e275bcbd67e103",
      "parents": [
        "bec6714d8a0251af3beb9967a21174290da0a318"
      ],
      "author": {
        "name": "Matthew Kim",
        "email": "38759997+friendlymatthew@users.noreply.github.com",
        "time": "Mon Mar 23 14:03:53 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 18:03:53 2026 +0000"
      },
      "message": "Fix index panic in unparser with mismatched stacked projections (#21094)\n\n## Rationale for this change\n\nThis PR adds a length guard in `subquery_alias_inner_query_and_columns`\nto prevent a panic when outer and inner projections have different\nexpression counts\n\nWithout this fix, optimizer passes like `CommonSubexprEliminate` can\nproduce stacked projections where the inner projections has more exprs\nthan the outer. The function iterates over `inner_projection.expr` by\nindex and uses the _same_ index to access `outer_projections.expr`,\ncausing an index oob panic\n\nThis PR bails out early when the lengths don\u0027t match. This is consistent\nwith all the other early returns in the function that reject\nnon-matching plan shapes"
    },
    {
      "commit": "bec6714d8a0251af3beb9967a21174290da0a318",
      "tree": "7bfd39a2448b2c3dce7e700dbbe6692abda463da",
      "parents": [
        "dfc8bb7dd65ba6a96b2a259dec5776945b361767"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Mar 23 14:02:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 18:02:58 2026 +0000"
      },
      "message": "docs: Document the TableProvider evaluation order for filter, limit and projection (#21091)\n\n## Which issue does this PR close?\n\n- Follow on to https://github.com/apache/datafusion/pull/21057\n\n## Rationale for this change\n\nAs mentioned by @hareshkh on\nhttps://github.com/apache/datafusion/pull/21057#discussion_r2966432536:\n\nIt is not clear from the existing documentation that the (logical)\nevaluation order for push down operations is \u0027filter -\u003e limit -\u003e\nprojection\u0027\n\nthis is the actual order implemented by the built in providers, but it\nwasn\u0027t documented anywhere explicitly\n\n## What changes are included in this PR?\n\n1. Explicitly document the evaluation order on TableProvider\n2. Some drive by cleanups of the documentation \n\n## Are these changes tested?\n\nBy 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"
    },
    {
      "commit": "dfc8bb7dd65ba6a96b2a259dec5776945b361767",
      "tree": "4819af53b685e6e2ac1e9cb83f6265b9428c626a",
      "parents": [
        "293a880fc49475315813a2d9985751106558ac55"
      ],
      "author": {
        "name": "Kumar Ujjawal",
        "email": "ujjawalpathak6@gmail.com",
        "time": "Mon Mar 23 23:31:48 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 18:01:48 2026 +0000"
      },
      "message": "fix(sql): handle GROUP BY ALL with aliased aggregates (#20943)\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 #20909\n\n## Rationale for this change\n\nIssue #20909 reported that:\n\n  - SELECT COUNT(*) FROM t GROUP BY ALL works\n  - SELECT COUNT(*) AS c FROM t GROUP BY ALL fails at execution\n\nThe failure came from an incorrect plan that grouped by an aggregate\nalias expression.\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\nThis PR fixes GROUP BY ALL when the select list has an aliased aggregate\nlike COUNT(*) AS c.\n\n  Changes:\n\n- Update GROUP BY ALL expansion logic to skip any select expression that\ncontains an aggregate, even if it is wrapped in aliases.\n  - Add SQL planner tests for:\n      - SELECT COUNT(*) FROM ... GROUP BY ALL\n      - SELECT COUNT(*) AS c FROM ... GROUP BY ALL\n  - Add core execution test for:\n      - SELECT COUNT(*) AS c FROM ... GROUP BY ALL\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"
    },
    {
      "commit": "293a880fc49475315813a2d9985751106558ac55",
      "tree": "adeb5bab3c51f026236020f45793a8b1c15a6241",
      "parents": [
        "4a7330fa309f5fd1614a032f87b9507c211b7d28"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Mar 23 14:01:25 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 18:01:25 2026 +0000"
      },
      "message": "Avoid creating new RecordBatches to simplify expressions (#20534)\n\n## Which issue does this PR close?\n\n- part of #19795 \n- follow on to https://github.com/apache/datafusion/pull/20234\n\n\n## Rationale for this change\n\n\nWhile reviewing https://github.com/apache/datafusion/pull/20234 from\n@AdamGS I wondered why we were creating new `RecordBatch`es to simplify\nexpressions. I looked into it a bit and I think we can avoid a bunch of\nsmall allocations / deallocations\n\n\n## What changes are included in this PR?\n\n1. Create the dummy batch once and reuse it\n## Are these changes tested?\n\nYes by CI. I will also run benchmarks on it \n## Are there any user-facing changes?\n\nNo this is entirely internal"
    },
    {
      "commit": "4a7330fa309f5fd1614a032f87b9507c211b7d28",
      "tree": "7fbdfd5eedda4f0ca070ec891e7f684bd7b8ddc0",
      "parents": [
        "ec7c9ab0af56917470c83694e9fb0efbd76c7d91"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Mon Mar 23 16:49:43 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 16:49:43 2026 +0000"
      },
      "message": "Add a builder to `SimplifyContext` to avoid allocating default values (#21092)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\nThis is a follow up to #21084, where @blaginin realized that allocating\n`ConfigOptions` has this surprising side effect. Reading through how its\nused I realized that on mode \"real\" code paths (and in many tests),\nDataFusion ends up allocating the default values of `SimplifyContext`\njust to immediately drop them and override them with pre-existing\nclone-able data.\n\n## What changes are included in this PR?\n\nAdds a new type `SimplifyContextBuilder` and `SimplifyContext::builder`\n\n## Are these changes tested?\n\nIncludes a couple of tests to make sure the builder makes sense, in\naddition to many existing tests.\n\n## Are there any user-facing changes?\n\nAs noted above, new type and a new function on an existing type.\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "ec7c9ab0af56917470c83694e9fb0efbd76c7d91",
      "tree": "264edd0fde208e9c923bb948a6f59c2d2eb2058d",
      "parents": [
        "2b7d4f9a5b005905b23128274ad37c3306ffcd15"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Mon Mar 23 12:04:14 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 16:04:14 2026 +0000"
      },
      "message": "chore: Add `substr()` benchmarks, refactor (#20803)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nI\u0027d like to optimize `substr` for scalar `start`/`count` inputs, but the\ncode would benefit from some refactoring and cleanup first. I also added\nbenchmarks for `substr` with scalar args.\n\n## What changes are included in this PR?\n\n- Refactor `string_view_substr` and `string_substr` to use a single loop\n- Change `get_true_start_end` to validate its own inputs, cleanup UTF8\npath\n- Add benchmark cases for scalar `start` and `count` arguments\n- Improve docs\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo, other than an error message wording change.\n\n## AI usage\n\nMultiple AI tools were used to iterate on this PR. I have reviewed and\nunderstand the resulting code."
    },
    {
      "commit": "2b7d4f9a5b005905b23128274ad37c3306ffcd15",
      "tree": "1c49c056c5b905b1d656d90e62fc92b7e5f21871",
      "parents": [
        "abf8f61062105eff4fac0da0a12b20c73144c200"
      ],
      "author": {
        "name": "Kumar Ujjawal",
        "email": "ujjawalpathak6@gmail.com",
        "time": "Mon Mar 23 17:30:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 12:00:16 2026 +0000"
      },
      "message": "feat: create a datafusion-example for in-memory file format (#20394)\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- Should close #18802 if we go this route.\n\n## Rationale for this change\n\nAs mentioned in the original issues: there has been few questions over\nin discussions about reading csv/json/parquet files from memory instead\nof from disk/object store. The proposal was to add support for this or\ncreate the example to show how to do that. I picked the latter.\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- Create example for this \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\nNo\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: Jax Liu \u003cliugs963@gmail.com\u003e\nCo-authored-by: Adrian Garcia Badaracco \u003c1755071+adriangb@users.noreply.github.com\u003e\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "abf8f61062105eff4fac0da0a12b20c73144c200",
      "tree": "0b734af64363d0595cda8b6196dcdfb502e228f8",
      "parents": [
        "6796053fa0b19070b558f1bd2f95b5a1f8e1c025"
      ],
      "author": {
        "name": "Alfonso Subiotto Marqués",
        "email": "alfonso.subiotto@polarsignals.com",
        "time": "Mon Mar 23 06:28:58 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 05:28:58 2026 +0000"
      },
      "message": "fix[physical-expr-adapter]: support casting structs nested inside complex types (#20907)\n\nPreviously, DefaultPhysicalExprAdapterRewriter.create_cast_column_expr\nwould only allow struct evolution for top-level structs. However, it is\nvalid to have structs that are nested inside other complex types (e.g.\nDictionary\u003c_, Struct\u003e, List\u003cStruct\u003e). These cases would previously\nreturn an error although they were valid.\n\nThis commit handles Structs that are arbitrarily nested within certain\ncomplex types (Lists, ListViews, and Dicts). Other complex types can be\nsupported in the future, but I think this is good enough for now.\n\n## Which issue does this PR close?\n- Closes #20906 \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\nStruct evolution is supported, this PR fixes an edge case where struct\nevolution is not supported when structs are nested inside other complex\ntypes.\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\nYes, I initially wrote parametrized tests, but I think that\u0027s probably\noverkill.\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\nQueries that would previously error, now complete successfully.\n\nSigned-off-by: Alfonso Subiotto Marques \u003calfonso.subiotto@polarsignals.com\u003e"
    },
    {
      "commit": "6796053fa0b19070b558f1bd2f95b5a1f8e1c025",
      "tree": "595d06317596ade9dfe324e733bf5703c1a3c36c",
      "parents": [
        "646d183e1d6f6e9884cb078fc5cad6a93c15cd8d"
      ],
      "author": {
        "name": "yaommen",
        "email": "myanstu@163.com",
        "time": "Mon Mar 23 08:08:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 00:08:47 2026 +0000"
      },
      "message": "test: update sqllogictest expectation for negation type coercion (#21102)\n\n## Which issue does this PR close?\n\n- Fixes CI breakage on main introduced by #20965.\n\nlink:\nhttps://github.com/apache/datafusion/actions/runs/23406116823/job/68085237860\n\n## Rationale for this change\n\n#20965 moved invalid negation validation into the analyzer/type coercion\npath.\n\nAfter that change, the `SELECT -\u0027100\u0027` sqllogictest case now reports the\nerror through `type_coercion`, but `scalar.slt` was still expecting the\nolder error form. This follow-up updates the sqllogictest expectation to\nmatch the current behavior.\n\n## What changes are included in this PR?\n\n- update the `scalar.slt` expectation for `SELECT -\u0027100\u0027`\n- keep the expected error aligned with the analyzer/type coercion error\nshape introduced by #20965\n\n## Are these changes tested?\n\nYes.\n\nI reproduced the failure locally and verified the updated expectation\nwith:\n- `cargo test -p datafusion-sqllogictest --test sqllogictests -- scalar`\n\n## Are there any user-facing changes?\n\nNo.\n\nSigned-off-by: yaommen \u003cmyanstu@163.com\u003e"
    },
    {
      "commit": "646d183e1d6f6e9884cb078fc5cad6a93c15cd8d",
      "tree": "860a6353eb2549733b7630062d397fa875c6733f",
      "parents": [
        "93724b0b8ea283e78f3ef9068bc0666c9af39e7e"
      ],
      "author": {
        "name": "Rizky Mirzaviandy Priambodo",
        "email": "142987522+Xavrir@users.noreply.github.com",
        "time": "Mon Mar 23 00:35:42 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 17:35:42 2026 +0000"
      },
      "message": "docs: clarify NULL handling for array_remove functions (#21014) (#21018)\n\n## Summary\n- clarify how `array_remove`, `array_remove_n`, and `array_remove_all`\nbehave when the input array contains `NULL` values\n- document that a `NULL` `element` argument returns `NULL` instead of\nremoving `NULL` entries from the array\n- add examples that show existing `NULL` array elements are preserved\nwhen removing a non-`NULL` value\n\n## Testing\n- docs-only change, no code paths changed\n\nCloses #21014"
    },
    {
      "commit": "93724b0b8ea283e78f3ef9068bc0666c9af39e7e",
      "tree": "1fa9d95c36a11242e0db74d3bc42bd82813d1441",
      "parents": [
        "85a34e93d969d8994ba285e290a4a53023c1eb8c"
      ],
      "author": {
        "name": "yaommen",
        "email": "myanstu@163.com",
        "time": "Sun Mar 22 23:20:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 15:20:28 2026 +0000"
      },
      "message": "fix: validate wrapped negation during type coercion (#20965)\n\n## Which issue does this PR close?\n\n- Related to #20988 .\n\n## Rationale for this change\n\nInvalid wrapped negation expressions such as `(-\u0027a\u0027) IS NULL` could\nstill escape type validation during optimization.\n\nThis PR keeps the fix in the analyzer/type coercion path, which is where\nmost of DataFusion\u0027s type validation already happens, rather than adding\nSQL-planner-specific validation.\n\n## What changes are included in this PR?\n\n- add type validation for `Expr::Negative` in `TypeCoercionRewriter`\n- return an error for invalid negation operands during optimization\n- add focused regression tests for wrapped negation\n\n## Are these changes tested?\n\nYes.\n\nAdded:\n- a unit test for `(-\u0027a\u0027) IS NULL` in `type_coercion`\n- an integration test that verifies the same case fails during\n`into_optimized_plan()`\n\n## Are there any user-facing changes?\n\nYes. Invalid wrapped negation expressions now fail during optimization\ninstead of escaping type validation until later phases."
    },
    {
      "commit": "85a34e93d969d8994ba285e290a4a53023c1eb8c",
      "tree": "83813ba7a94042696411d79754042fb2494b9fcb",
      "parents": [
        "59e8a79ed9db9ae938d5881dbf09a6e111d51fcd"
      ],
      "author": {
        "name": "Jonah Gao",
        "email": "jonahgao@msn.com",
        "time": "Sun Mar 22 23:19:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 15:19:10 2026 +0000"
      },
      "message": "Fix CTE reference resolution slt tests (#21049)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nPR https://github.com/apache/datafusion/pull/19519 introduces new tests\nto verify that DataFusion won\u0027t unexpectedly lookup CTE names from the\ncatalog. It registers a strict SchemaProvider that panics with\nunexpected table lookups.\n\nhttps://github.com/apache/datafusion/blob/d138c36cb08c2dc028b29bbd20853b24cf0f3b8b/datafusion/sqllogictest/src/test_context.rs#L230-L241\n\nThe problem is that PR #19862 skips registering the strict\nSchemaProvider and bypasses the unexpected lookup check. Therefore,\nthere tests become meaningless.\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?\n\nRe-register the strict SchemaProvider into cte.slt.\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. \n\nI also backported these new tests to tag 52.0.0, which does not include\nthe fix in https://github.com/apache/datafusion/pull/19519, and they\nfailed as expected.\n```sh\n$ cargo test --profile release-nonlto --test sqllogictests -- cte\n   Compiling datafusion-sqllogictest v52.0.0 (/Users/jonah/Work/datafusion/datafusion/sqllogictest)\n    Finished `release-nonlto` profile [optimized] target(s) in 19.50s\n     Running bin/sqllogictests.rs (/Users/jonah/Work/datafusion/target/release-nonlto/deps/sqllogictests-f9c15c7896eb5af9)\n[00:00:00] ####------------------------------------       6/75      \"cte.slt\"\nthread \u0027tokio-runtime-worker\u0027 (486408) panicked at datafusion/sqllogictest/src/test_context.rs:215:22:\nunexpected table lookup: barbaz. This maybe indicates a CTE reference was incorrectly treated as a catalog table reference.\nnote: run with `RUST_BACKTRACE\u003d1` environment variable to display a backtrace\nCompleted 3 test files in 0 seconds                                                                                                                                                          failure in cte.slt for sql with barbaz as (select * from orders) select * from \"barbaz\";\ncaused by\nExternal error: task 13 panicked with message \"unexpected table lookup: barbaz. This maybe indicates a CTE reference was incorrectly treated as a catalog table reference.\"\nError: Execution(\"1 failures\")\nerror: test failed, to rerun pass `-p datafusion-sqllogictest --test sqllogictests`\n```\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?\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\n\n---------\n\nCo-authored-by: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "59e8a79ed9db9ae938d5881dbf09a6e111d51fcd",
      "tree": "494aef910354ffd3a8aac3cd29fc863dad85fcae",
      "parents": [
        "878b87911ec9c35aa74244a8b7535c6aced8ff20"
      ],
      "author": {
        "name": "David López",
        "email": "hola@devel0pez.com",
        "time": "Sun Mar 22 16:17:15 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 15:17:15 2026 +0000"
      },
      "message": "fix: use datafusion_expr instead of datafusion crate in spark  (#21043)\n\n## Which issue does this PR close?\n\nNA\n\n## Rationale for this change\n\nThree files in `datafusion-spark` import from `datafusion::logical_expr`\ninstead of `datafusion_expr` directly. This compiles fine in the full\nworkspace but fails when building the crate in isolation (`cargo clippy\n-p datafusion-spark `).\n\n\n## What changes are included in this PR?\n\nReplaced `use datafusion::logical_expr::{...}` with `use\ndatafusion_expr::{...}` in:\n- `datafusion/spark/src/function/bitmap/bitmap_bit_position.rs`\n- `datafusion/spark/src/function/bitmap/bitmap_bucket_number.rs`\n- `datafusion/spark/src/function/math/bin.rs`\n\nNo logic changes — imports only.\n\n## Are these changes tested?\n\nNA\n\n## Are there any user-facing changes?\n\nNA"
    },
    {
      "commit": "878b87911ec9c35aa74244a8b7535c6aced8ff20",
      "tree": "72279b45b089b64bf130591a2af76d81d86795a8",
      "parents": [
        "448a3958b2dadca98c073046fd5e63309cd0d861"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Sun Mar 22 08:19:57 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 12:19:57 2026 +0000"
      },
      "message": "docs: Improve getting started and testing guides for humans and agents (#20970)\n\n## Which issue does this PR close?\n\n  - Closes #.\n\n ## Rationale for this change\n\nThis PR is a follow-up to\nhttps://github.com/apache/datafusion/pull/20939 from @Dandandan.\n\nThe goal is to make it easier for both humans and agents to get started\nmaking changes in this repository and to create pull requests\nefficiently.\n\nThe repository already had the necessary contributor information, but it\nwas spread across multiple documents and not easy to discover quickly.\n\n  ## What changes are included in this PR?\n\nThis PR makes the most important setup, testing, and pre-PR checks\neasier to find from the contributor guide and from `AGENTS.md`:\n\n- Add a quick-start setup section to the contributor guide with the\nshortest path to a working local environment.\n- Add a testing quick-start section summarizing the most important tests\nto run before submitting a PR.\n- Add a “Before Submitting a PR” section to centralize formatting and\nlint guidance.\n- Update `AGENTS.md` to point to the canonical contributor guide\nsections instead of duplicating setup and testing instructions.\n\n  ## Are these changes tested?\n\n  This PR updates documentation only.\n\n\n  ## Are there any user-facing changes?\n\nThis improves contributor-facing documentation and makes setup / testing\nguidance easier to discover, but it does not change DataFusion runtime\nbehavior or public APIs.\n\n---------\n\nCo-authored-by: Yongting You \u003c2010youy01@gmail.com\u003e"
    },
    {
      "commit": "448a3958b2dadca98c073046fd5e63309cd0d861",
      "tree": "5c1db9a73a62394694cf285932e735df03a25933",
      "parents": [
        "e5c69a433e6354626ffca9663c1b62e32395b4d9"
      ],
      "author": {
        "name": "Dmitrii Blaginin",
        "email": "dmitrii@blaginin.me",
        "time": "Sun Mar 22 08:13:58 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 08:13:58 2026 +0000"
      },
      "message": "Super fast extended tests and improved planning speed linux (#21084)\n\nThis makes sqlite extended finish in 5 minutes:\nhttps://github.com/apache/datafusion/actions/runs/23362665318/job/67969547959\n\nCurrently on main it takes 20 minutes (and a month ago it would take two\nhours 🤯)\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "e5c69a433e6354626ffca9663c1b62e32395b4d9",
      "tree": "8bdd361d62333847810dad08c0e57a2c80e59374",
      "parents": [
        "3bdcdf5114b62fd98ce031038efe16c4ddfda4c4"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Sun Mar 22 01:08:51 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 22 05:08:51 2026 +0000"
      },
      "message": "perf: Optimize `array_sort()` (#21083)\n\n## Which issue does this PR close?\n\n- Closes #21005.\n- Closes #21041.\n\n## Rationale for this change\n\nThe previous `array_sort` implementation called the Arrow sort kernel\nfor every row, and then used `concat` to produce the final results. This\nwas quite inefficient. Instead, we employee three different techniques\ndepending on the input:\n\n(1) For arrays of primitives types without null elements, we copy all\nvalues into a single `Vec`, sort each row\u0027s slice of the `Vec` in-place,\nand then wrap the `Vec` in a `GenericListArray`.\n\n(2) For arrays of primitives types with null elements, we use a similar\napproach but we need to incur some more bookkeeping to place null\nelements in the right place and construct the null buffer.\n\n(3) For arrays of non-primitive types, we use `RowConverter` to convert\nthe entire input into the row format in one call, sort row indices by\ncomparing the encoded row values, and then use a single `take()` to\nconstruct the result of the sort.\n\nBenchmarks (8192 rows, vs main):\n\n    int32/5 elements:          886 µs →  57 µs  (-94%)\n    int32/20 elements:        1.64 ms → 846 µs  (-48%)\n    int32/100 elements:       4.03 ms → 3.22 ms (-20%)\n    int32_null_elements/5:    1.17 ms → 168 µs  (-86%)\n    int32_null_elements/1000: 47.2 ms → 44.1 ms  (-7%)\n    string/5 elements:        2.12 ms → 727 µs  (-66%)\n    string/1000 elements:      405 ms → 293 ms  (-28%)\n\n## What changes are included in this PR?\n\n* New `array_sort` benchmark\n* Extended unit test coverage\n* Improve docs\n* Implement optimizations as described above\n\n## Are these changes tested?\n\nNo.\n\n## Are there any user-facing changes?\n\nNo.\n\n---------\n\nCo-authored-by: Daniël Heres \u003cdanielheres@gmail.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "3bdcdf5114b62fd98ce031038efe16c4ddfda4c4",
      "tree": "2cd6fc85defd6692815ea4a04c15c31c0913ae6a",
      "parents": [
        "415bd42d6b81f40a19e447403d5a85eaf8878b54"
      ],
      "author": {
        "name": "Kumar Ujjawal",
        "email": "ujjawalpathak6@gmail.com",
        "time": "Sat Mar 21 23:57:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 18:27:01 2026 +0000"
      },
      "message": "perf: add in-place fast path for ScalarValue::add (#20959)\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 #20933\n\n\n## Rationale for this change\n\nIssue #20933 called out that `ScalarValue::add` was doing unnecessary\nwork in hot paths such as statistics merging.\n\nThe original suggestion was to mutate the lhs accumulator rather than\nalwaysbuilding a new scalar. This patch follows that direction and keeps\nthe optimization in `ScalarValue` itself, which is a better long-term\nfit than duplicating specialized addition logic only in the stats code.\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\nThis change adds an in-place fast path for `ScalarValue::add` /\n`add_checked` for same-type numeric and decimal values.\n\nThe patch also updates statistics merging to reuse the existing\n`sum_value` accumulator instead of creating a new `ScalarValue` for each\naddition.\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: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "415bd42d6b81f40a19e447403d5a85eaf8878b54",
      "tree": "409e6329d5b2aaf23b33da110345d48b2ff2430e",
      "parents": [
        "d6cffd72d38cbf0be12744cc7b0aca7e30f3d846"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Sat Mar 21 09:03:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 13:03:24 2026 +0000"
      },
      "message": "chore: Remove duplicate imports in test code (#21061)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\n`clippy` doesn\u0027t warn about `use` statements that re-import an item that\nis already available via a glob import (`use super::*`), but in many\ncases the `use` statement is redundant and can be safely removed. In\nparticular, there was a lot of test code that did both `use super::*`\nand also imported items that were imported by the module under test; the\ntest-specific import can be safely removed.\n\n## What changes are included in this PR?\n\n* Mechanical removal of duplicate imports between test code and code\nunder test\n\n## Are these changes tested?\n\nYes, via `cargo check` and `cargo clippy`\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "d6cffd72d38cbf0be12744cc7b0aca7e30f3d846",
      "tree": "2815a96884c5919610acd43dce4cbf8455e1ae9f",
      "parents": [
        "895d8522fbbfd4cefd11472f4635d66e3efa9f14"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Sat Mar 21 21:02:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 13:02:08 2026 +0000"
      },
      "message": "optimizer: Add configuration to disable join reordering (#21072)\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\nNow DataFusion has heuristics for join reordering based on plan\nstatistics\n\nhttps://github.com/apache/datafusion/blob/9885f4bfe88ae9e4df96466d7246b80244b8054a/datafusion/physical-optimizer/src/join_selection.rs#L59\n\nThis PR adds one option to disable it. If it\u0027s set to false, join\nreordering won\u0027t happen, and always be the same as the join order appear\nin the query.\n\n```sql\nset datafusion.optimizer.join_reordering \u003d false;\n\n-- always t1 on the left, t2 on the right regardless of t1/t2 statistics\nselect *\nfrom t1\njoin t2\non t1.v1\u003dt2.v1;\n```\n\nThe reasons are:\n- Heuristics can fail, this configuration makes it possible to hand-tune\njoin orders\n- Some tests assumes join order, if we can keep the join order fixed,\nthey\u0027re easier to maintain.\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\n1. Added a configuration\n2. Propagate the config into join swapping utility, and disable join\nre-ordering if the config is disabled.\n\n## Are these changes tested?\nsqllogictests\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n4. 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": "895d8522fbbfd4cefd11472f4635d66e3efa9f14",
      "tree": "a60eb4c36538d121fb777fc783f140f3b0fb9bf6",
      "parents": [
        "8fdac0f43bc2b8d8c558b7b1c482993307dcbaf3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Mar 21 08:58:43 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 12:58:43 2026 +0000"
      },
      "message": "chore(deps): bump rustls-webpki from 0.103.9 to 0.103.10 (#21089)\n\nBumps [rustls-webpki](https://github.com/rustls/webpki) from 0.103.9 to\n0.103.10.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rustls/webpki/releases\"\u003erustls-webpki\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.103.10\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eCorrect selection of candidate CRLs by Distribution Point and\nIssuing Distribution Point\u003c/strong\u003e. If a certificate had more than one\n\u003ccode\u003edistributionPoint\u003c/code\u003e, then only the first\n\u003ccode\u003edistributionPoint\u003c/code\u003e would be considered against each CRL\u0027s\n\u003ccode\u003eIssuingDistributionPoint\u003c/code\u003e \u003ccode\u003edistributionPoint\u003c/code\u003e,\nand then the certificate\u0027s subsequent \u003ccode\u003edistributionPoint\u003c/code\u003es\nwould be ignored.\u003c/p\u003e\n\u003cp\u003eThe impact was that correct provided CRLs would not be consulted to\ncheck revocation. With \u003ccode\u003eUnknownStatusPolicy::Deny\u003c/code\u003e (the\ndefault) this would lead to incorrect but safe\n\u003ccode\u003eError::UnknownRevocationStatus\u003c/code\u003e. With\n\u003ccode\u003eUnknownStatusPolicy::Allow\u003c/code\u003e this would lead to inappropriate\nacceptance of revoked certificates.\u003c/p\u003e\n\u003cp\u003eThis vulnerability is thought to be of limited impact. This is\nbecause both the certificate and CRL are signed -- an attacker would\nneed to compromise a trusted issuing authority to trigger this bug. An\nattacker with such capabilities could likely bypass revocation checking\nthrough other more impactful means (such as publishing a valid, empty\nCRL.)\u003c/p\u003e\n\u003cp\u003eMore likely, this bug would be latent in normal use, and an attacker\ncould leverage faulty revocation checking to continue using a revoked\ncredential.\u003c/p\u003e\n\u003cp\u003eThis vulnerability is identified by \u003ca\nhref\u003d\"https://github.com/rustls/webpki/security/advisories/GHSA-pwjx-qhcg-rvj4\"\u003eGHSA-pwjx-qhcg-rvj4\u003c/a\u003e.\nThank you to \u003ca href\u003d\"https://github.com/1seal\"\u003e\u003ccode\u003e@​1seal\u003c/code\u003e\u003c/a\u003e\nfor the report.\u003c/p\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFreshen up rel-0.103 by \u003ca\nhref\u003d\"https://github.com/ctz\"\u003e\u003ccode\u003e@​ctz\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/rustls/webpki/pull/455\"\u003erustls/webpki#455\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare 0.103.10 by \u003ca\nhref\u003d\"https://github.com/ctz\"\u003e\u003ccode\u003e@​ctz\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/rustls/webpki/pull/458\"\u003erustls/webpki#458\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/rustls/webpki/compare/v/0.103.9...v/0.103.10\"\u003ehttps://github.com/rustls/webpki/compare/v/0.103.9...v/0.103.10\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/rustls/webpki/commit/348ce01c01cf8ce21199090c98853992c9c047a8\"\u003e\u003ccode\u003e348ce01\u003c/code\u003e\u003c/a\u003e\nPrepare 0.103.10\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/dbde5921164c6e3ea0928654de8cb7d5de8c2b33\"\u003e\u003ccode\u003edbde592\u003c/code\u003e\u003c/a\u003e\ncrl: fix authoritative_for() support for multiple URIs\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/9c4838e6129a544a0f7f5d26ac7517860a22992c\"\u003e\u003ccode\u003e9c4838e\u003c/code\u003e\u003c/a\u003e\navoid std::prelude imports\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/009ef667e3bb0544808c39b64e9b6db0d626b117\"\u003e\u003ccode\u003e009ef66\u003c/code\u003e\u003c/a\u003e\nfix rust 1.94 ambiguous panic macro warnings\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/c41360d095f9f48e14679a078afd10c2d61716fe\"\u003e\u003ccode\u003ec41360d\u003c/code\u003e\u003c/a\u003e\nbuild(deps): bump taiki-e/cache-cargo-install-action from 2 to 3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/e401d0083d9cf91d0209bae1db465267d7290233\"\u003e\u003ccode\u003ee401d00\u003c/code\u003e\u003c/a\u003e\ngenerate.py: reformat for black 2026.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rustls/webpki/commit/06cedecbf6af88cad40b2ae2cc4a474f1429ddb6\"\u003e\u003ccode\u003e06cedec\u003c/code\u003e\u003c/a\u003e\nTake semver-compatible deps\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/rustls/webpki/compare/v/0.103.9...v/0.103.10\"\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\u003drustls-webpki\u0026package-manager\u003dcargo\u0026previous-version\u003d0.103.9\u0026new-version\u003d0.103.10)](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\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: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "8fdac0f43bc2b8d8c558b7b1c482993307dcbaf3",
      "tree": "bc69396604532b2c6f5804a5b88f24153b8a6cd3",
      "parents": [
        "5e54b89b8da17e76b7023fbaeca5abafeeb2d94e"
      ],
      "author": {
        "name": "Viktor Yershov",
        "email": "viktor@spice.ai",
        "time": "Sat Mar 21 05:57:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 12:57:43 2026 +0000"
      },
      "message": "Restore Sort unparser guard for correct ORDER BY placement (#20658)\n\n## Which issue does this PR close?\n\n- closes https://github.com/apache/datafusion/issues/20905\n- closes https://github.com/apache/datafusion/pull/20923\n\nRestore the `already_projected()` guard in the Sort case of\n`select_to_sql_recursively`. Without it, queries with ORDER BY\nexpressions generate invalid SQL when the Sort node follows an outer\nProjection.\n\n## Problem ##\n\nTwo regressions in the DuckDB federation unparser after upgrading to\nDataFusion 52:\n\n1. clickbench q25: Queries like `SELECT \"SearchPhrase\" ... ORDER BY\nto_timestamp(\"EventTime\") LIMIT 10` produce ORDER BY outside the\nsubquery, referencing table names (\"hits\") that are out of scope.\n2. tpcds q36: ORDER BY with `GROUPING()` expressions loses the\n`derived_sort` subquery alias, placing sort references outside their\nvalid scope.\n\n## Root Cause ##\n\nDF52\u0027s optimizer merges `Limit` into `Sort` as a fetch parameter,\nchanging the plan shape from `Projection → Limit → Sort → ...` to\n`Projection → Sort(fetch) → ....` The Sort case previously had a guard\nthat wrapped the sort into a `derived_sort` subquery when\n`already_projected()` was true. This guard was removed in DF52, causing\nORDER BY and LIMIT to be placed on the outer query where inner table\nreferences are invalid.\n\n## Fix ##\n\nRe-add the guard at the top of the Sort match arm in\nselect_to_sql_recursively:\n\n```rust\n if select.already_projected() {\n     return self.derive_with_dialect_alias(\"derived_sort\", plan, relation, false, vec![]);\n }\n```"
    },
    {
      "commit": "5e54b89b8da17e76b7023fbaeca5abafeeb2d94e",
      "tree": "2343c119eaee0738c6762faf43804532fed23d87",
      "parents": [
        "4c195b43504c0d2e2c87673f25dfc8075fd640c1"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Fri Mar 20 18:15:04 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 22:15:04 2026 +0000"
      },
      "message": "perf: Optimize `lpad()`, `rpad()` for scalar args (#20657)\n\n## Which issue does this PR close?\n\n- Closes #20655.\n\n## Rationale for this change\n\n`lpad` and `rpad` are commonly called with scalar length and fill\narguments, e.g. `lpad(column, 20, \u00270\u0027)`. We can special-case this\nscenario to improve performance by avoiding the overhead of\n`make_scalar_function` and by precomputing the padding buffer and\nreusing it for each row.\n\nFor scalar args, this improves performance by ~3x for ASCII inputs and\n~1.6x for Unicode inputs.\n\n## What changes are included in this PR?\n\n- Add benchmarks for padding with scalar length and fill.\n- Add a scalar fast path for `lpad` and `rpad` that precomputes a\npadding buffer. We only use the fast path if the pad length is\nreasonably small (\u003c\u003d 16KB), to avoid using too much memory on a scratch\nbuffer.\n- Code cleanup: extract and use `try_as_scalar_str` and\n`try_as_scalar_i64` helpers.\n- Code cleanup: use `target_len` consistently instead of `length`,\nbecause the latter is ambiguous.\n- Code cleanup: make `rpad` and `lpad` more similar by removing needless\nand probably unintended differences between the two functions. We could\ngo further and refactor them to remove the redundancy but I won\u0027t\nattempt that for now.\n\n## Are these changes tested?\n\nYes; covered by existing tests. Added new benchmarks.\n\n## Are there any user-facing changes?\n\nNo.\n\n## AI usage\n\nMultiple AI tools were used to iterate on this PR. I have reviewed and\nunderstand the resulting code."
    },
    {
      "commit": "4c195b43504c0d2e2c87673f25dfc8075fd640c1",
      "tree": "8ce0f839a5dccc1927fdac8c1affb7f89103a3cb",
      "parents": [
        "1cb4de41c1e0d0a48438c3b1790509973f7acad8"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Fri Mar 20 18:14:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 22:14:00 2026 +0000"
      },
      "message": "perf: Optimize `strpos()` for scalar needle, plus optimize UTF-8 codepath (#20754)\n\n## Which issue does this PR close?\n\n- Closes #20753.\n\n## Rationale for this change\n\nThis PR implements two mostly unrelated optimizations for `strpos`:\n\n1. When the needle is scalar, we can build a single `memmem::Finder` and\nuse it to search each row of the haystack. It turns out that this is\nsignificantly faster than using `memchr`, and the cost of constructing\nthe finder is cheap because it is amortized over the batch.\n2. We previously optimized strpos to use memchr for searching when both\nhaystack and needle are ASCII-only (#20295). That was needlessly\nconservative: UTF-8 is self-stabilizing, so it should be safe to use\n`memchr` to search for matches for any combination of ASCII and UTF-8\nneedle and haystack.\n\nThe performance improvement depends on a bunch of factors (ASCII vs.\nUTF-8, scalar vs array needle, length of haystack strings), but ranges\nfrom 5% for short ASCII strings with a scalar needle to 15x for long\nUTF-8 strings with a scalar needle.\n\n## What changes are included in this PR?\n\n* Improve SLT test coverage for `strpos`\n* Refactor and extend `strpos` benchmarks to cover the scalar case\n* Implement optimizations described above\n* Code cleanup and refactoring for the `strpos` implementation\n\n## Are these changes tested?\n\nYes; new test cases and benchmarks added.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "1cb4de41c1e0d0a48438c3b1790509973f7acad8",
      "tree": "ccabe220b89be84fa99f16efa02a4def0f564803",
      "parents": [
        "f734ec54dc1b93b964bd69cfeca725b117f16244"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Fri Mar 20 15:45:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 19:45:41 2026 +0000"
      },
      "message": "perf: Optimize `approx_distinct` for inline Utf8View (#21064)\n\n## Which issue does this PR close?\n\n- Closes #21039 .\n\n## Rationale for this change\n\nFor short strings that are stored inline in a `Utf8View`, we can hash\nthe string\u0027s value directly, without materializing a `\u0026str`, and then\nadd the hash value to HyperLogLog directly. This improves performance by\n~40%.\n\n## What changes are included in this PR?\n\n* Add benchmark for `approx_distinct` on short strings\n* Add `add_hashed` API to `HyperLogLog`\n* Rename `SEED` to `HLL_HASH_STATE` and make it `pub(crate)`\n* Optimize `approx_distinct` on short strings as described above.\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "f734ec54dc1b93b964bd69cfeca725b117f16244",
      "tree": "84982514495efe517ef6d5530f3505fc12cefe4f",
      "parents": [
        "8f721a6500ff33728ed13a879e52f756a4d7ea52"
      ],
      "author": {
        "name": "Kartik Gupta",
        "email": "147966673+KARTIK64-rgb@users.noreply.github.com",
        "time": "Fri Mar 20 21:46:11 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 16:16:11 2026 +0000"
      },
      "message": "Fix Subtraction overflow in `max_distinct_count` when hash join has a pushed-down limit (#20799)\n\n## Which issue does this PR close?\n\n- Closes #20779.\n\n## Rationale for this change\n\nIn `max_distinct_count` (inside\n`datafusion/physical-plan/src/joins/utils.rs`), the\n`Precision::Exact` branch computes the number of non-null rows by doing:\n\n```rust\nlet count \u003d count - stats.null_count.get_value().unwrap_or(\u00260);\n```\n\nBefore #20228 this subtraction was always safe because `num_rows` was\nnever smaller\nthan `null_count`. But #20228 added `fetch` (limit push-down) support to\n`HashJoinExec`, and when a limit is applied, `partition_statistics()`\ncaps\n`num_rows` to `Exact(fetch_value)` without also capping the per-column\n`null_count`. This means `null_count` can legally exceed `num_rows`,\ncausing a\npanic with *\"attempt to subtract with overflow\"*.\n\n## What changes are included in this PR?\n\n- **Bug fix** in `max_distinct_count` (`utils.rs` ~line 725): replaced\nthe bare\nsubtraction with a saturating subtraction so that when `null_count`\nexceeds\n  `num_rows` the result is clamped to `0` instead of panicking.\n\n  ```rust\n  // Before\n  let count \u003d count - stats.null_count.get_value().unwrap_or(\u00260);\n\n  // After\nlet count \u003d\ncount.saturating_sub(*stats.null_count.get_value().unwrap_or(\u00260));\n  ```\n\n- **Regression test** added at the bottom of the `mod tests` block in\nthe same\nfile. The test deliberately constructs a scenario where `null_count (5)\n\u003e\nnum_rows (2)` and asserts that `max_distinct_count` returns `Exact(0)`\nwithout\n  panicking.\n\n## Are these changes tested?\n\nYes. A new unit test\n`test_max_distinct_count_no_overflow_when_null_count_exceeds_num_rows`\nis added\ndirectly in `datafusion/physical-plan/src/joins/utils.rs`. It covers the\nexact\nedge-case from the bug report (null_count \u003e num_rows after a fetch/limit\npush-down) and would have caught the panic before the fix.\n\n## Are there any user-facing changes?\n\nNo user-facing or API changes. This is a purely internal arithmetic fix\nin the\nstatistics estimation logic. Queries that previously panicked when a\nlimit was\npushed down into a `HashJoinExec` will now complete successfully.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "8f721a6500ff33728ed13a879e52f756a4d7ea52",
      "tree": "95d00b0ec9e66a7b4d9bb5ba5e643a59cff07b4f",
      "parents": [
        "78d5ac6d80e1977705d6b9fdbed50191b38554b0"
      ],
      "author": {
        "name": "Huaijin",
        "email": "haohuaijin@gmail.com",
        "time": "Fri Mar 20 23:05:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 15:05:44 2026 +0000"
      },
      "message": "keep fetch when merge FilterExec in FilterPushdown (#21070)\n\n## Which issue does this PR close?\n\n- Closes #21069\n\n## Rationale for this change\n\n- see #21069\n\n## What changes are included in this PR?\n\nWhen `FilterPushdown` merges/eliminates a `FilterExec`, it now correctly\npropagates the `fetch` limit that was on the FilterExec.\n\nPreviously, if a `FilterExec` had a fetch (e.g., LIMIT 10) and all its\npredicates were fully pushed down to a under `FilterExec`, the\nFilterExec node was dropped — and the fetch was silently lost,\npotentially returning more rows than requested.\nThe fix:\n- If the FilterExec being eliminated has a fetch, propagate it to the\nchild node via `with_fetch()`\n- If both the outer and inner nodes have a fetch, use min(outer, inner)\nto preserve the tighter constraint\n\n## Are these changes tested?\n\nyes, add some test cases, trying to reproduce use sql, current not able\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": "78d5ac6d80e1977705d6b9fdbed50191b38554b0",
      "tree": "0eee4132ae03d2e8ed1d4388d6bdf20fb88d666f",
      "parents": [
        "be273d69e1181441fcdfd8b7d2c0e851bf50cd31"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Fri Mar 20 16:03:03 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 15:03:03 2026 +0000"
      },
      "message": "Remove file prefetching from FileStream (#20916)\n\nSimplify the FileStream state machine by removing the mechanism that\nopens the next file in parallel while scanning the current one. Files\nare now opened sequentially (Scan -\u003e Idle -\u003e Open) instead of\nprefetching.\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 #20984\n\n## Rationale for this change\n\nCurrent prefetching is ineffective or even counterproductive, see e.g.\nquery 6 when testing against simulated S3 latency:\n\n```\n│ QQuery 6  │       709.93 / 744.83 ±21.29 / 769.15 ms │        304.17 / 436.76 ±90.12 / 542.71 ms │ +1.71x faster │\n```\n\nLet\u0027s remove it so we can make room for better prefetching taking care\nof pruning / late materilization better, cache behavior and IO/CPU\nsplit.\n\n## What changes are included in this PR?\n\nRemove this API / prefetching to make room for more impactful\nprefetching,\n\n## Are these changes tested?\n\nExisting tests.\n\n\n## Are there any user-facing changes?\n\nYes, `NextOpen` `next: Option\u003cNextOpen\u003e,` are removed of `pub` members.\n\n---------\n\nCo-authored-by: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "be273d69e1181441fcdfd8b7d2c0e851bf50cd31",
      "tree": "a7b19cff74b38a7c27f438561fd11e0d9ee877ab",
      "parents": [
        "9885f4bfe88ae9e4df96466d7246b80244b8054a"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Fri Mar 20 16:15:52 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 13:15:52 2026 +0000"
      },
      "message": "Support \u0027\u003e\u0027, \u0027\u003c\u0027, \u0027\u003e\u003d\u0027, \u0027\u003c\u003d\u0027, \u0027\u003c\u003e\u0027 in any operator (#20830)\n\n## Which issue does this PR close?\n- Closes #2548.\n\n## Rationale for this change\nANY operator only supports equality check\n\n## What changes are included in this PR?\nAdds support for other expressions and add tests\n\n## Are these changes tested?\nAdded slt tests for this and they all pass\n\n\n## Are there any user-facing changes?\nYes user\u0027s can now use any operator with this new expressions"
    },
    {
      "commit": "9885f4bfe88ae9e4df96466d7246b80244b8054a",
      "tree": "87b53728529fa3f5c55a8cb1fc859c142261a07f",
      "parents": [
        "6ef4cef9d5b1d6f106ae608a3c95aae61f79c53c"
      ],
      "author": {
        "name": "hsiang-c",
        "email": "137842490+hsiang-c@users.noreply.github.com",
        "time": "Thu Mar 19 20:10:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 03:10:36 2026 +0000"
      },
      "message": "fix: `arrays_zip/list_zip` allow single array argument  (#21047)\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 #21046\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\nAlign DataFusion\u0027s `arrays_zip` implementation w/ DuckDB and Spark\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- Allow single array argument\n- Update user doc and fix a few examples\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, by sqllogictest\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\nYes, I modified user doc.\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: Martin Grigorov \u003cmartin-g@users.noreply.github.com\u003e"
    },
    {
      "commit": "6ef4cef9d5b1d6f106ae608a3c95aae61f79c53c",
      "tree": "f634d4de04eb6b41522d2063aed18af1972da4e3",
      "parents": [
        "897b5c1150a89f5d64cbe84e70859101641ca9c8"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Thu Mar 19 12:43:30 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 16:43:30 2026 +0000"
      },
      "message": "chore: Cleanup fully-qualified ScalarFunctionArgs (#20804)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nIn many of the UDF implementations, we used the fully-qualified name\n`datafusion_expr::ScalarFunctionArgs` instead of the more typical\npattern of `use ...` and then referencing just `ScalarFunctionArgs`. I\ncan\u0027t see a good reason not to do the latter.\n\n## What changes are included in this PR?\n\n* Mechanical replacement to improve readability\n\n## Are these changes tested?\n\nYes; no functional change.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "897b5c1150a89f5d64cbe84e70859101641ca9c8",
      "tree": "7ffdb2e4b0c052e5443e459854292373b5b7a148",
      "parents": [
        "c7927001b6d65af67b3bf282b968b00a61f4c2cc"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Thu Mar 19 11:16:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 15:16:21 2026 +0000"
      },
      "message": "feat: support repartitioning of FFI execution plans (#20449)\n\n## Which issue does this PR close?\n\nThis is a blocker for https://github.com/apache/datafusion/issues/20450\n\n## Rationale for this change\n\nThis PR introduces an important concept in the FFI work to avoids\ncreating wrappers upon wrappers of plans. It was discovered as part of\nthe work to create FFI physical optimizer rules. Suppose we have a\nforeign plan. Then we attempt to turn this into an FFI plan. What we\nwill end up with currently is a FFI plan where the underlying private\ndata is a foreign plan that additionally contains a FFI plan. Instead\n*any* time we are creating an FFI object we should check to see if it is\nlocally downcastable to a Foreign plan and if so to just access the\nalready existing FFI object.\n\nThis pattern is adapted across all FFI objects in this PR.\n\nWith this work in place we can also properly support repartioning via\nFFI as well as `new_with_children` via FFI.\n\n## What changes are included in this PR?\n\n- Adds access pattern for creating new FFI objects. When they are\nalready a locally downcastable to a Foreign wrapper then we simply get\nthe underlying existing FFI object instead of creating a wrapper around\na wrapper.\n- Implement repartitioning and new_with_children via FFI on execution\nplans.\n\n## Are these changes tested?\n\nIntegration tests are added.\n\n## Are there any user-facing changes?\n\nThe one use facing change is that for some of the aggregates and\naccumulators that take in closures we require these closures to be\nstatic so that we can downcast the boxed traits.\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "c7927001b6d65af67b3bf282b968b00a61f4c2cc",
      "tree": "1a17bd1cc626794eda48d4719bae46a091c6b9bb",
      "parents": [
        "4010a553984ca4b9d49c9b1cef463c3eb413d9fa"
      ],
      "author": {
        "name": "dario curreri",
        "email": "48800335+dariocurr@users.noreply.github.com",
        "time": "Thu Mar 19 15:31:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 14:31:51 2026 +0000"
      },
      "message": "build: update Rust toolchain version to 1.94.0 (#21045)\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 #21040 .\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\njust an update of the rust toolchain\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\nsolved some clippy warnings\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\nNA\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"
    },
    {
      "commit": "4010a553984ca4b9d49c9b1cef463c3eb413d9fa",
      "tree": "ea2908e8f4936bb324b3d22b0b15bae81d529d92",
      "parents": [
        "4ae19ebce11b02fc73d37d25dacc07d36c7221ef"
      ],
      "author": {
        "name": "alexanderbianchi",
        "email": "75697973+alexanderbianchi@users.noreply.github.com",
        "time": "Thu Mar 19 08:57:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 12:57:29 2026 +0000"
      },
      "message": "Add support for nested lists in substrait consumer (#20953)\n\n## Rationale for this change\n\nAdds support for nested array expressions to the substrait consumer.\nDefined in\n[algebra.proto.](https://github.com/substrait-io/substrait/blob/main/proto/substrait/algebra.proto#L1162)\n\n## What changes are included in this PR?\n\nImplements the previously unimplemented `consume_nested` for\n`NestedType::List`.\n\n## Are these changes tested?\n\nYes, unit tests match the testing pattern for substrait literals in\n`consumer/expr/literal.rs`. Snapshot test is added for `make_array()`\npath.\n\n## Are there any user-facing changes?\n\nUser\u0027s will now be able to send nested list expressions. This change is\npurely additive all previous consumable Substrait plans will continue to\nwork."
    },
    {
      "commit": "4ae19ebce11b02fc73d37d25dacc07d36c7221ef",
      "tree": "42bd24665f081ad2348405cb4a1f6283c0e1f825",
      "parents": [
        "7014a450cc2b659660cc92192a46cf86b76d2fa9"
      ],
      "author": {
        "name": "Alessandro Solimando",
        "email": "asolimando@apache.org",
        "time": "Thu Mar 19 13:41:52 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 12:41:52 2026 +0000"
      },
      "message": "fix: update clickbench expected plan for NDV-aware optimization (#21050)\n\n## Which issue does this PR close?\n\nFixes CI breakage on `main` introduced by #19957.\n\n## Rationale for this change\n\n#19957 introduced NDV extraction from Parquet metadata. The optimizer\nnow sees NDV\u003d1 for `HitColor`, `BrowserCountry`, `BrowserLanguage` in\nthe clickbench test file and short-circuits `COUNT(DISTINCT)` to a\nconstant projection, skipping the full table scan.\n\n## What changes are included in this PR?\n\nUpdates the expected EXPLAIN plan in `clickbench.slt` to match the new\n(better) physical plan:\n\n```diff\n-   01)AggregateExec: mode\u003dSingle, gby\u003d[], aggr\u003d[count(DISTINCT hits.HitColor), ...]\n-   02)--DataSourceExec: file_groups\u003d{1 group: [...]}, projection\u003d[HitColor, BrowserLanguage, BrowserCountry], file_type\u003dparquet\n+   01)ProjectionExec: expr\u003d[1 as count(DISTINCT hits.HitColor), 1 as count(DISTINCT hits.BrowserCountry), 1 as count(DISTINCT hits.BrowserLanguage)]\n+   02)--PlaceholderRowExec\n```\n\n## Are these changes tested?\n\nThis PR *is* the test fix. Verified locally with `cargo test --profile\nci -p datafusion-sqllogictest --test sqllogictests`.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "7014a450cc2b659660cc92192a46cf86b76d2fa9",
      "tree": "6b4ce7c9d2468bcab29fd58af6097580dde8e70c",
      "parents": [
        "d138c36cb08c2dc028b29bbd20853b24cf0f3b8b"
      ],
      "author": {
        "name": "Alessandro Solimando",
        "email": "alessandro.solimando@gmail.com",
        "time": "Thu Mar 19 11:23:16 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 10:23:16 2026 +0000"
      },
      "message": "feat: Extract NDV (distinct_count) statistics from Parquet metadata (#19957)\n\n## Which issue does this PR close?\n\n- Part of #15265\n\nRelated: #18628, #8227\n\n(I am not sure if an new issue specifically for the scope of the PR is\nneeded, happy to create it if needed)\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## 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\nThis work originates from a discussion in datafusion-distributed about\nimproving the `TaskEstimator` API:\n\nhttps://github.com/datafusion-contrib/datafusion-distributed/issues/296#issuecomment-3777726928\n\nWe agreed that improved statistics support in DataFusion would benefit\nboth projects. For distributed-datafusion, better cardinality estimation\nhelps decide how to split computation across network boundaries.\n\nThis also benefits DataFusion directly, as CBO is already in place, for\nexample, join cardinality estimation\n([`joins/utils.rs:586-646`](https://github.com/apache/datafusion/blob/main/datafusion/physical-plan/src/joins/utils.rs#L586-L646))\nuses `distinct_count` via `max_distinct_count` to compute join\nselectivity.\n\nCurrently this field is always `Absent` when reading from Parquet, so\nthis PR fills that gap.\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\nCommit 1 - Reading NDV from Parquet files:\n- Extract `distinct_count` from Parquet row group column statistics\n- Single row group with NDV -\u003e `Precision::Exact(ndv)`\n- Multiple row groups with NDV -\u003e `Precision::Inexact(max)` as\nconservative lower bound\n- No NDV available -\u003e `Precision::Absent`\n\nCommit 2 - Statistics propagation (can be split to a separate PR, if\npreferred):\n- `Statistics::try_merge()`: use max as conservative lower bound instead\nof discarding NDV\n- `Projection`: preserve NDV for single-column expressions as upper\nbound\n\nI\u0027m including the second commit to showcase how I intend to use the\nstatistics, but these changes can be split to a follow-up PR to keep\nreview scope limited.\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, 7 unit tests are added for NDV extraction:\n- Single/multiple row groups with NDV\n- Partial NDV availability across row groups\n- Multiple columns with different NDV values\n- Integration test reading a real Parquet file with distinct_count\nstatistics (following the pattern in\n\n[`row_filter.rs:685-696`](https://github.com/apache/datafusion/blob/main/datafusion/datasource-parquet/src/row_filter.rs#L685-L696),\nusing `parquet_to_arrow_schema` to derive the schema from the file)\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. Statistics consumers will now see populated\n`distinct_count` values when available in Parquet metadata.\n\nDisclaimer: I used AI (Claude Code) to assist translating my ideas into\ncode as I am still ramping up with the codebase and especially with Rust\n(guidance on both aspects is highly appreciated). I have a good\nunderstanding of the core concepts (statistics, CBO etc.) and have\ncarefully double-checked that the PR matches my intentions and\nunderstanding.\n\ncc: @gabotechs @jayshrivastava @NGA-TRAN @gene-bordegaray"
    },
    {
      "commit": "d138c36cb08c2dc028b29bbd20853b24cf0f3b8b",
      "tree": "bcbe15b9d6f16b44a6b8d074693f59a533a8b28a",
      "parents": [
        "317052e9df0a540906e65c6bfa8da8c24c93703f"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Wed Mar 18 13:10:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 20:10:57 2026 +0000"
      },
      "message": "infra: automatically delete branch on pr merge (#21033)\n\nEnable automatic deletion of head branches after merging.\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\nAs described in\nhttps://github.com/apache/infrastructure-asfyaml?tab\u003dreadme-ov-file#pull_requests\n```\ngithub:\n  pull_requests:\n    del_branch_on_merge: true\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?\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": "317052e9df0a540906e65c6bfa8da8c24c93703f",
      "tree": "aeec4babf73804a51068e920a3e6bd78bf073c91",
      "parents": [
        "7e4818d66f91013e9a1c3bd4bcd7b7040741bf0a"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Mar 18 15:23:33 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 19:23:33 2026 +0000"
      },
      "message": "perf: Optimize `approx_distinct()` for string, binary inputs (#21037)\n\n## Which issue does this PR close?\n\n- Closes #21035.\n\n## Rationale for this change\n\nWe were making a defensive copy of every string and binary value before\ncalling HyperLogLog, but that was unnecessary: HyperLogLog doesn\u0027t need\nowned types, and indeed never stores the input value.\n\nThis improves the performance of `approx_distinct` on string and binary\nvalues by 6x-7x.\n\n## What changes are included in this PR?\n\n* Add benchmark for `approx_distinct`\n* Optimize `approx_distinct` to avoid unnecessary copies\n* Cleanup: remove spurious type parameter from\n`StringViewHLLAccumulator` (unused)\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "7e4818d66f91013e9a1c3bd4bcd7b7040741bf0a",
      "tree": "932d5551c088670b11a1295d080ba0d083afbbfa",
      "parents": [
        "b6b542e87b84f4744096106bea0de755b2e70cc5"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Wed Mar 18 14:38:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 18:38:55 2026 +0000"
      },
      "message": "fix: improve GroupOrdering docs (#20994)\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\nWhile working on https://github.com/apache/datafusion/pull/20559 I ran\nacross some comments that were outdated / could be improved\n\n## What changes are included in this PR?\n\nImprove comments\n\n## Are these changes tested?\n\nBy CI\n## Are there any user-facing changes?\n\nJust better docs"
    },
    {
      "commit": "b6b542e87b84f4744096106bea0de755b2e70cc5",
      "tree": "ba1c8c999800e99a10291504dac2abaccf63b71f",
      "parents": [
        "a6a4df99963e0a2c0c49f1c17d23c9c4e5b59c68"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Mar 18 07:35:32 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 11:35:32 2026 +0000"
      },
      "message": "perf: Optimize `array_positions()` for scalar needle (#20770)\n\n## Which issue does this PR close?\n\n- Closes #20769.\n\n## Rationale for this change\n\n`array_positions` previously compared the needle against each row\u0027s\nsub-array individually. When the needle is a scalar (the common case),\nwe can do a single bulk `arrow_ord::cmp::not_distinct` comparison\nagainst the entire flat values buffer and then walk the result bitmap,\nwhich is significantly faster: the speedup on the `array_positions()`\nmicrobenchmarks ranges from 5x to 40x, depending on the size of the\narray.\n\nThe same pattern has already been applied to `array_position` (#20532),\nand previously to other array UDFs.\n\n## What changes are included in this PR?\n\n- Add benchmarks for `array_positions`.\n- Implement bulk-comparison optimization\n- Refactor `array_position`\u0027s existing fast path slightly for\nconsistency\n- Code cleanup to use \"haystack\" and \"needle\" consistently, not vague\nterms like \"list_array\" and \"element\"\n- Add unit tests for `array_positions` with sliced ListArrays, for peace\nof mind\n- Add unit tests for sliced lists and sliced lists with nulls for the\nnew `array_positions` fast path.\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo.\n\n## AI usage\n\nMultiple AI tools were used to iterate on this PR. I have reviewed and\nunderstand the resulting code.\n\n---------\n\nCo-authored-by: Oleks V \u003ccomphead@users.noreply.github.com\u003e"
    },
    {
      "commit": "a6a4df99963e0a2c0c49f1c17d23c9c4e5b59c68",
      "tree": "143af50b9be0cbaa115720605f4c4a7bd2386cf0",
      "parents": [
        "b7a3f53eb9ddafce523519f3253fc00372932e91"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Wed Mar 18 19:32:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 11:32:23 2026 +0000"
      },
      "message": "Fix memory reservation starvation in sort-merge (#20642)\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\nThis PR fixes memory reservation starvation in sort-merge when multiple\nsort partitions share a GreedyMemoryPool.\n \nWhen multiple `ExternalSorter` instances run concurrently and share a\nsingle memory pool, the merge phase starves:\n\n1. Each partition pre-reserves sort_spill_reservation_bytes via\nmerge_reservation\n2. When entering the merge phase, new_empty() was used to create a new\nreservation starting at 0 bytes, while the pre-reserved bytes sat idle\nin ExternalSorter.merge_reservation\n3. Those freed bytes were immediately consumed by other partitions\nracing for memory\n4. The merge could no longer allocate memory from the pool → OOM /\nstarvation\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~~I can\u0027t find a deterministic way to reproduce the bug, but it occurs\nin our production.~~ Add an end-to-end test to verify the fix\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": "b7a3f53eb9ddafce523519f3253fc00372932e91",
      "tree": "d5d016d2140a5d90b72762d28998c1401afc9032",
      "parents": [
        "cf0a1826044d786e5d7df8708ce63ee00f20d750"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Wed Mar 18 01:38:00 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 08:38:00 2026 +0000"
      },
      "message": "docs: in release email, be specific about changelog location (#20975)\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\nEmail template should point to\nhttps://github.com/apache/datafusion/blob/28fc91a2a5a8ede5797fde04527f76f351c3cd8b/dev/changelog/53.0.0.md\ninstead of\nhttps://github.com/apache/datafusion/blob/28fc91a2a5a8ede5797fde04527f76f351c3cd8b/CHANGELOG.md\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": "cf0a1826044d786e5d7df8708ce63ee00f20d750",
      "tree": "32a67921049f72902f0a0e01e8b231f077fea4e8",
      "parents": [
        "6ab16cc7fd974298d357da9c9b9da70e7718b74f"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Wed Mar 18 03:01:22 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 07:01:22 2026 +0000"
      },
      "message": "Simplify logic for memory pressure partial emit from ordered group by (#20559)\n\n## Which issue does this PR close?\n- related to https://github.com/apache/datafusion/issues/20445\n- Follow on to https://github.com/apache/datafusion/pull/20446\n\n## Rationale for this change\n\nI found the formulation of the fix in\nhttps://github.com/apache/datafusion/pull/20446 hard to follow (see\nhttps://github.com/apache/datafusion/pull/20446#pullrequestreview-3843736859\nfor details).\n\nBasically the meaning of emit_to and 0 are inverted in this case.\n\n## What changes are included in this PR?\n\nPull the logic of what to emit into its own function with more comments\nthat I think make it clearer what is going on\n\n## Are these changes tested?\n\nYes by existing tests\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": "6ab16cc7fd974298d357da9c9b9da70e7718b74f",
      "tree": "e9aa4077415dbe682592cb4610445a1a04171df6",
      "parents": [
        "e74e58f109880fe6ff53dcc6251abdd30a972e49"
      ],
      "author": {
        "name": "Oleks V",
        "email": "comphead@users.noreply.github.com",
        "time": "Tue Mar 17 14:03:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 21:03:39 2026 +0000"
      },
      "message": "bug: fix `array_remove_*` with NULLS (#21013)\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 #21011 .\n\n## Rationale for this change\n\nHandle correctly `array_remove_*` functions if NULL is a value to delete\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?\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": "e74e58f109880fe6ff53dcc6251abdd30a972e49",
      "tree": "07b49731bcc5bdc76582c39e427f0e37b7a9601c",
      "parents": [
        "81423085b45111fa0768742810b73a77d2af06dd"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Tue Mar 17 22:12:17 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 19:12:17 2026 +0000"
      },
      "message": "fix: move overflow guard before dense ratio in hash join to prevent overflows (#20998)\n\n## Which issue does this PR close?\n- Closes #20995.\n\n## Rationale for this change\n#20995 has details but it is very straightforward. `dense_ratio`\ncalculation overflows since overflow guard is after not before\n\n## What changes are included in this PR?\nPrevent hash join overflow and unit test for it \n\n## Are these changes tested?\nAdded a test case for both min and max scenario\n\nCo-authored-by: Matt Butrovich \u003cmbutrovich@users.noreply.github.com\u003e"
    },
    {
      "commit": "81423085b45111fa0768742810b73a77d2af06dd",
      "tree": "3b4e33b84f23a6b4bcd396fbb9f4f3662d2cd526",
      "parents": [
        "fd145c4be6d86bae5a4aa3a1a94f9d230c94bbe5"
      ],
      "author": {
        "name": "Matt Butrovich",
        "email": "mbutrovich@users.noreply.github.com",
        "time": "Tue Mar 17 12:33:05 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 16:33:05 2026 +0000"
      },
      "message": "chore(deps): Revert \"chore(deps): bump runs-on/action from 2.0.3 to 2.1.0 (#20980)\" (#21002)\n\nThis reverts commit 11b9693952cd419b73dd03cc39f22c8b343bc05c.\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\nI noticed CI is not running on this PR opened today:\nhttps://github.com/apache/datafusion/pull/20998\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\nSee related Comet discussion at\nhttps://github.com/apache/datafusion-comet/pull/3684#issuecomment-4070571288\n\n\u003e \u003cimg alt\u003d\"image\" width\u003d\"1875\" height\u003d\"418\"\nsrc\u003d\"https://private-user-images.githubusercontent.com/19199204/564414382-56caab4b-20d9-4d7b-b1ef-11de17ded2bc.png?jwt\u003deyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM3NjM4MjUsIm5iZiI6MTc3Mzc2MzUyNSwicGF0aCI6Ii8xOTE5OTIwNC81NjQ0MTQzODItNTZjYWFiNGItMjBkOS00ZDdiLWIxZWYtMTFkZTE3ZGVkMmJjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAzMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMzE3VDE2MDUyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVlOTAxYzhmNjFjMzEwZWMzY2E3M2JhMWVjYzUwZjBiY2IxN2NlNzdkYjNkN2MwMzFkZDllZjJiMzk1YTUzYWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IwLJ7-JDMYMr6qcO0WWHRsUgRhios73KuMl1a41nN2k\"\u003e\n\u003e ASF blocks non-approved actions inside apache organization (by hash),\nso you either need to add it to\nhttps://github.com/apache/infrastructure-actions or rollback the update\n\nWe\u0027re now seeing it in DF as well:\n\n\u003cimg width\u003d\"865\" height\u003d\"335\" alt\u003d\"Screenshot 2026-03-17 at 12 06 22 PM\"\nsrc\u003d\"https://github.com/user-attachments/assets/668a1dda-bf79-42f4-9472-acf8f7b3895e\"\n/\u003e\n\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- Revert #20980 \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 tests (make sure they actually 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-No.\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    }
  ],
  "next": "fd145c4be6d86bae5a4aa3a1a94f9d230c94bbe5"
}
