)]}'
{
  "log": [
    {
      "commit": "2440af8a4d1b87f5e424d5c0c5f83959a9aebdb3",
      "tree": "0d1aeebd1b22a6a2961595e9c45f146c3d9a6ac4",
      "parents": [
        "3520fe9b756b5ad208a474dd18a985e960441573"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Sat Oct 24 00:21:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 08:21:53 2026 +0900"
      },
      "message": "ci: key workflow concurrency groups by pull request number (#1411)\n\n### Rationale for this change\n\nThe Lint, RC and Test workflows use\n\n```yaml\nconcurrency:\n  group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}\n  cancel-in-progress: true\n```\n\n`github.head_ref` is only the source branch name, without the fork\nowner. Two pull requests from different forks that happen to use the\nsame branch name share a concurrency group, so each new run cancels the\nother PR\u0027s in-progress run.\n\nThis happened with #1406 and #1407, both from branches named\n`fix/parquet-hidden-column-error`: #1407\u0027s Test run cancelled a re-run\nof #1406\u0027s Test job partway through (run 39903724796, attempt 3:\n`Test\u003dcancelled`, \"The operation was canceled\").\n\n### What changes are included in this PR?\n\nKey the group by `github.event.pull_request.number` instead of\n`github.head_ref` in `lint.yml`, `rc.yml` and `test.yml`:\n\n```yaml\n  group: ${{ github.repository }}-${{ github.event.pull_request.number || github.sha }}-${{ github.workflow }}\n```\n\n- `pull_request` events: one group per PR, so a new push to a PR still\ncancels that PR\u0027s older run, but different PRs no longer interfere.\n- `push` events: `pull_request.number` is empty, so the group falls back\nto `github.sha`, unchanged from today.\n\n### Are these changes tested?\n\n`actionlint` accepts all three workflows (its only reports are\npre-existing shellcheck quoting notes in `run:` scripts). This PR\u0027s own\nCI runs exercise the new groups.\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "3520fe9b756b5ad208a474dd18a985e960441573",
      "tree": "a38ecba1f5be70651b3886fc97be11f3c93a7aba",
      "parents": [
        "d1a74fbc9869a373408cfbe8783f01a19428a208"
      ],
      "author": {
        "name": "ump45nose",
        "email": "52391318+ump45nose@users.noreply.github.com",
        "time": "Sat Oct 24 02:22:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 19:22:31 2026 +0100"
      },
      "message": "fix(parquet): return an error instead of panicking on a hidden encrypted column (#1406)\n\n### Rationale for this change\n\nCloses #69.\n\nWhen a file has columns encrypted with their own keys and the\n`FileDecryptionProperties` only carry keys for some of them, touching\none of the other columns panics with `hidden column exception, path\u003d...`\nfrom `fileDecryptor.getColumnDecryptor`. This happens on any path that\nreaches that column, e.g. `RowGroupMetaData.ColumnChunk(i)`,\n`RowGroupReader.GetColumnPageReader(i)`, or\n`pqarrow.FileReader.ReadRowGroups` with that column selected. Reading\nonly the columns you have keys for already works, but there is no way to\nrecover from the panic when a hidden column is touched.\n\n### What changes are included in this PR?\n\n- `FileDecryptor.GetColumnMetaDecryptor` / `GetColumnDataDecryptor`\n(internal interface) now return `(Decryptor, error)`, and a missing\ncolumn key produces an error naming the column instead of a panic.\n- `NewColumnChunkMetaData`, `RowGroupReader.GetColumnPageReader` and\n`encryption.GetColumnMetaDecryptor` propagate that error. The last one\nalready returned an error, so the page index and bloom filter readers\npick it up without changes.\n\nThis does not add a way to read the still-encrypted bytes of a hidden\ncolumn, which was also discussed in the issue; it only turns the panic\ninto an error so the rest of the file stays readable.\n\n### Are these changes tested?\n\nYes. Added `TestReadEncryptedFileWithMissingColumnKey` in\n`parquet/pqarrow`: it writes a file with two columns encrypted with\ndifferent keys, opens it with only the first key, checks that the first\ncolumn reads correctly, and that column chunk metadata, the page reader\nand `ReadRowGroups` for the second column all return an error. The test\npanics on `main`. `go test ./parquet/...` passes with\n`PARQUET_TEST_DATA` / `ARROW_TEST_DATA` set.\n\n### Are there any user-facing changes?\n\nReading an encrypted column without its key now returns an error instead\nof panicking. The changed interface is in `parquet/internal/encryption`,\nso there is no public API change.\n\nThis change was written with the help of an AI assistant. The panic was\nreproduced, the diff reviewed and the tests above run before opening\nthis PR."
    },
    {
      "commit": "d1a74fbc9869a373408cfbe8783f01a19428a208",
      "tree": "7fe027bb4eba7a5d8dedd77993b7580437cdaa8f",
      "parents": [
        "d65b0db1606c391ea9cce5677780c8cd6f52eb78"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Fri Oct 23 18:34:20 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 13:34:20 2026 -0400"
      },
      "message": "fix(arrow/compute): do not return a result from a cancelled call (#1410)\n\n### Rationale for this change\n\n`TestCallFunctionPreservesCallerCancellationForVectorFunction` fails\nintermittently under `-race` (e.g. ARM64 macOS 14 Go 1.26 - CGO on\n#1406):\n\n```\n--- FAIL: TestCallFunctionPreservesCallerCancellationForVectorFunction\n    exec_test.go:385: Expected nil, but got: \u0026compute.ArrayDatum{...}\n```\n\nIt is a real race, not a test problem: a cancelled `CallFunction` can\nreturn a result with a nil error.\n\n- The kernel gets the **caller\u0027s** context: `kctx :\u003d\n\u0026exec.KernelCtx{Ctx: ctx, ...}` in `execInternal`.\n- `execInternal` then derives a **child** context\n(`context.WithCancel(ctx)`), and every cancellation check after that\n(`WrapResults`, and the `ctx.Err()` check after it) uses the child.\n- Cancelling a context closes its `Done` channel *before* cancelling its\nchildren. In that gap the kernel can wake on the caller\u0027s cancellation,\nreturn, and the executor can send its output and close the channel;\n`WrapResults` then collects the output while the child context still\nreports no error, and `execInternal` returns it.\n\nOn main, running that test 20,000 times under `-race` fails 15 times.\n\n### What changes are included in this PR?\n\n`execInternal` keeps a reference to the caller\u0027s context and, after\n`WrapResults`, treats the call as cancelled if either the caller\u0027s or\nthe child context is done. The returned error is the caller\u0027s\ncancellation cause when the caller cancelled, otherwise the child\u0027s\n(unchanged). The kernel, executors and `WrapResults` are unchanged.\n\n### Are these changes tested?\n\nBy the existing\n`TestCallFunctionPreservesCallerCancellationForVectorFunction` (and its\nscalar counterpart), which is the regression test for this race:\n\n- main: 15 failures in 20,000 runs under `-race`;\n- this PR: 0 failures in 20,000 runs under `-race`.\n\n`go test ./arrow/compute/...` and `go test -race ./arrow/compute` pass;\n`go vet` (with `-asmdecl\u003dfalse -framepointer\u003dfalse` for the existing\nassembly warnings) and `gofmt` are clean.\n\n### Are there any user-facing changes?\n\nYes: a cancelled compute call no longer occasionally returns a result\nwith a nil error. No API changes."
    },
    {
      "commit": "d65b0db1606c391ea9cce5677780c8cd6f52eb78",
      "tree": "4b11f2a7893cc6678d3fb52abfbe2ef0e1868855",
      "parents": [
        "7e4c9c871cd2c4fd83f4c89a37da302dbf6e5a09"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Oct 23 18:57:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 17:57:34 2026 +0100"
      },
      "message": "perf(parquet/internal/encoding): expand nullable boolean bitmaps by byte (#1405)\n\n## What\nExpand nullable boolean bitmaps eight values at a time.\n\n## Why\nThe dense-null path currently reads and writes each bit individually.\n\n## Implementation\n- Use a 256-byte lookup to deposit packed values into valid positions by\nbyte.\n- Keep the sparse-null path unchanged and preserve overlap and\nsurrounding bits.\n- Add offset and null-pattern parity coverage.\n\n## Benchmark\nThe per-bit and byte paths both include the initial output-buffer copy.\nGo 1.26.3, Apple M1 Pro (`darwin/arm64`), `GOMAXPROCS\u003d1`; 10 runs of 150\nms per case.\n\n| Metric | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| 64 Ki values, 50% null, offset 0 | 204.39 µs/op | 34.70 µs/op |\n-83.03% |\n| 64 Ki values, 50% null, offset 5 | 203.34 µs/op | 36.82 µs/op |\n-81.89% |\n| 64 Ki values, 14.3% null, offset 0 | 302.05 µs/op | 37.53 µs/op |\n-87.58% |\n| 64 Ki values, 14.3% null, offset 5 | 300.81 µs/op | 37.19 µs/op |\n-87.64% |\n| 1 Mi values, 50% null, offset 0 | 3.336 ms/op | 555.0 µs/op | -83.36%\n|\n| 1 Mi values, 50% null, offset 5 | 3.337 ms/op | 585.9 µs/op | -82.44%\n|\n| 1 Mi values, 14.3% null, offset 0 | 5.112 ms/op | 600.6 µs/op |\n-88.25% |\n| 1 Mi values, 14.3% null, offset 5 | 5.043 ms/op | 597.1 µs/op |\n-88.16% |\n| Geometric mean, 8 cases | 1.010 ms/op | 146.1 µs/op | -85.53% |\n\nAll cases use 0 B/op and 0 allocs/op. Command: `GOMAXPROCS\u003d1 go test\n./parquet/internal/encoding -run \u0027^$\u0027 -bench\n\u0027^BenchmarkSpacedBitmapExpansion$\u0027 -benchmem -benchtime\u003d150ms -count\u003d10\n-cpu\u003d1`."
    },
    {
      "commit": "7e4c9c871cd2c4fd83f4c89a37da302dbf6e5a09",
      "tree": "edcf8f675d888331ac5232f85ba94fbda04b7900",
      "parents": [
        "6459eca56e210f1201d27762d7633070ed9997ab"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Oct 23 18:34:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 17:34:57 2026 +0100"
      },
      "message": "perf(arrow/array): reuse dictionary mappings and handle empty chunks in Concatenate (#1403)\n\n## What\nReuse dictionary checks and index mappings in `array.Concatenate`.\n\n## Why\nMany chunks share dictionary data. Rechecking values and rebuilding\nmappings for each chunk adds repeated work.\n\n## Implementation\n- Skip value comparison when chunks share the same dictionary data.\n- Reuse transposition buffers for repeated dictionaries.\n- Add correctness coverage and a public API benchmark.\n\n## Benchmark\nPublic `array.Concatenate` call with 12 chunks and 8,192 dictionary\nentries. Go 1.26.3, Apple M1 Pro (`darwin/arm64`), `GOMAXPROCS\u003d1`; 10\nruns of 200 ms per case. Base `de0c94e` vs head `651fe14`.\n\n| Metric | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| Shared dictionary, time | 82.374 µs/op | 3.723 µs/op | -95.48% |\n| Repeated mixed dictionaries, time | 5.593 ms/op | 2.039 ms/op |\n-63.54% |\n| Shared dictionary, bytes | 15.42 KiB/op | 14.48 KiB/op | -6.08% |\n| Repeated mixed dictionaries, bytes | 4.262 MiB/op | 2.784 MiB/op |\n-34.69% |\n| Shared dictionary, allocations | 23 allocs/op | 11 allocs/op | -52.17%\n|\n| Repeated mixed dictionaries, allocations | 99.04k allocs/op | 25.26k\nallocs/op | -74.49% |\n\nBoth time cases improved. The benchmark excludes setup and releases each\noutput. Command: `GOMAXPROCS\u003d1 go test ./arrow/array -run \u0027^$\u0027 -bench\n\u0027^BenchmarkConcatenateDictionaryReuse$\u0027 -benchmem -benchtime\u003d200ms\n-count\u003d10 -cpu\u003d1`."
    },
    {
      "commit": "6459eca56e210f1201d27762d7633070ed9997ab",
      "tree": "837c6fee7decb9faf45195c4a6443c453ddf24c7",
      "parents": [
        "a76f844aeb4a75423a9c1e58cbd33223d119220a"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Fri Oct 23 17:04:18 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 12:04:18 2026 -0400"
      },
      "message": "fix(parquet/pqarrow): honor offset and null slots when writing fixed-size lists (#1382)\n\n### Rationale for this change\n\n`pqarrow` wrote incorrect data for `FixedSizeList` columns without\nreturning an error:\n\n- `fixedSizeRangeSelector` computed child ranges as `idx * listSize`,\nignoring the parent array\u0027s offset. A sliced `FixedSizeList` (e.g.\n`NewSlice(arr, 1, 2)` selecting `[[20, 21]]`) was written as the leading\nrows of the child array (`[[10, 11]]`). Because the writer slices\ncolumns per row group, any unsliced `FixedSizeList` column spanning more\nthan one row group was affected too: `[[10, 11], [20, 21]]` with\nrow-group size 1 read back as `[[10, 11], [10, 11]]`.\n- Null `FixedSizeList` slots still occupy child storage, so a null list\nbetween non-null lists produces several disjoint visited leaf ranges.\nThe writer rejected this with `lists with non-zero length null\ncomponents are not supported`.\n\nThanks to ChipLab (Donmakino LLC) for reporting the offset issue.\n\n### What changes are included in this PR?\n\n- `fixedSizeRangeSelector` carries the parent offset and computes\n`(offset + idx) * listSize`.\n- `arrowColumnWriter.Write` concatenates multiple visited leaf ranges\ninto the values passed to `WriteArrowToColumn` (the single-range case\nremains a zero-copy slice).\n\n### Are these changes tested?\n\nYes. `TestWriteFixedSizeListHonorsOffset` round-trips flat,\nelement-null, list-null, nested, and nested-with-nulls `FixedSizeList`\ncolumns, both sliced and unsliced, with one row per row group and a\nsingle row group. A file containing null lists written by Go was also\nread back correctly with PyArrow.\n\n### Are there any user-facing changes?\n\nYes: sliced or multi-row-group `FixedSizeList` columns are now written\nwith the correct values, and `FixedSizeList` columns with null lists\nbetween non-null lists can now be written.\n\n**This PR contains a \"Critical Fix\".** Previously, writing such columns\nsilently produced incorrect data."
    },
    {
      "commit": "a76f844aeb4a75423a9c1e58cbd33223d119220a",
      "tree": "e43f9b94167dff09ac48e25a868139b25ec64d29",
      "parents": [
        "432ce9578c8dd98770c4ac424ff12e5e4fd13e75"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Oct 22 19:56:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 18:56:05 2026 +0100"
      },
      "message": "perf(arrow/bitutil): count offset bits by byte mask (#1397)\n\n## What\nCount unaligned bitmap bits with a byte mask.\n\n## Why\nThe current path checks leading bits one at a time before word popcount.\n\n## Implementation\n- Count the first partial byte with a mask and `bits.OnesCount8`.\n- Keep the existing bulk path for the remaining bits.\n\n## Benchmark\nGo 1.26.3, Apple M1 Pro (`darwin/arm64`), median of five runs; 0 B/op\nand 0 allocs/op.\n\n| Metric | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| 5 bits, offset 3 | 10.88 ns/op | 2.92 ns/op | -73.2% |\n| 8,192 bits, offset 3 | 124.4 ns/op | 80.18 ns/op | -35.5% |\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "432ce9578c8dd98770c4ac424ff12e5e4fd13e75",
      "tree": "0d0d31094183ddd8936b2ca5eb0580b97fa20aac",
      "parents": [
        "3c4100746627e225eabe773a5cedfd2360cb4e5a"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Oct 22 19:54:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 18:54:58 2026 +0100"
      },
      "message": "perf(arrow/compute): radix-sort null-free integer indices (#1391)\n\n**What**\n- Use stable radix sorting for large, single-chunk integer\n`sort_indices` inputs.\n\n**Why**\n- Comparator sorting is slow for large integer columns.\n\n**Implementation**\n- Add stable LSD passes over integer key bytes.\n- Keep the current sort for nulls, floats, multiple keys and multiple\nchunks.\n\n### Benchmark\n`BenchmarkSortIndices_Int64_Distributions`, single-chunk, null-free\nInt64; PR merge base `1eb1d9c` vs head `55b2004`; Go 1.26.3, Apple M1\nPro, GOMAXPROCS\u003d1, benchstat over 10 runs at 250 ms/run. Input setup is\noutside the timed section.\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| 2,047 sorted (µs/op) | 16.39 | 16.61 | No significant change (p\u003d0.052)\n|\n| 2,047 all-equal (µs/op) | 16.44 | 16.52 | No significant change\n(p\u003d0.542) |\n| 2,047 random (µs/op) | 255.7 | 247.1 | 3.35% faster |\n| 2,048 sorted (µs/op) | 16.495 | 3.655 | 77.84% faster |\n| 2,048 all-equal (µs/op) | 16.291 | 3.650 | 77.60% faster |\n| 2,048 random (µs/op) | 256.52 | 33.01 | 87.13% faster |\n| 2,049 sorted (µs/op) | 17.108 | 3.680 | 78.49% faster |\n| 2,049 all-equal (µs/op) | 16.681 | 3.666 | 78.03% faster |\n| 2,049 random (µs/op) | 252.20 | 32.91 | 86.95% faster |\n| 65,536 sorted (µs/op) | 506.0 | 108.5 | 78.55% faster |\n| 65,536 all-equal (µs/op) | 498.1 | 104.4 | 79.04% faster |\n| 65,536 random (ms/op) | 12.310 | 1.306 | 89.39% faster |\n| Sorted/equal inputs (allocs/op) | 4 | 4 | No change |\n| Random, 2,047 rows (allocs/op) | 4 | 4 | No change |\n| Random, 2,048+ rows (allocs/op) | 4 | 6 | +2 allocations |\n| Random, 2,048–2,049 rows (KiB/op) | 18.34 | 36.42 | +98.55% bytes |\n| Random, 65,536 rows (KiB/op) | 520.3 | 1,040.4 | +99.95% bytes |"
    },
    {
      "commit": "3c4100746627e225eabe773a5cedfd2360cb4e5a",
      "tree": "6eef8a83e3a757400e04e63e014bff169e1382dd",
      "parents": [
        "f53318674137ad9b0f7701a28ae8d00bccca20f4"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Oct 22 19:52:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 18:52:51 2026 +0100"
      },
      "message": "perf(internal/bitutils): use four-word fast path for unaligned bitmaps (#1398)\n\n## What\nUse the four-word fast path for unaligned bitmap counts.\n\n## Why\nThe existing threshold is higher than the five backing words needed by\nthe shifted reads.\n\n## Implementation\n- Lower the threshold to the minimum safe range.\n- Add boundary coverage and a package benchmark.\n\n## Benchmark\nGo 1.26.3, Apple M1 Pro (`darwin/arm64`), median of five runs; 0 B/op\nand 0 allocs/op.\n\n| Metric | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| 1,024 bits, offset 1 | 281.1 ns/op | 95.64 ns/op | -66.0% |\n| 4,096 bits, offset 1 | 415.8 ns/op | 215.3 ns/op | -48.2% |\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "f53318674137ad9b0f7701a28ae8d00bccca20f4",
      "tree": "d0926b603afab4b83e002b86d28b6caee3f4991a",
      "parents": [
        "e890d7bb7e0e74462a3714e39a72cefd188cfa64"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Oct 22 19:49:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 18:49:41 2026 +0100"
      },
      "message": "perf(parquet/internal/encoding): fast-path constant delta bitpacked blocks (#1396)\n\n### What\nSpeed up DELTA_BINARY_PACKED encoding for constant and sparse deltas.\n\n### Why\nZero-width miniblocks produce no payload, but the encoder still does\nper-value work.\n\n### Implementation\n- Encode uniform blocks without a payload.\n- Skip writes for zero-width miniblocks in mixed blocks.\n\n### Benchmark\n65,536 values, Go 1.26.3, Apple M1 Pro, median of 5 runs.\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| int32 constant | 416.6 µs/op | 197.8 µs/op | 2.1x faster |\n| int32 sparse | 420.2 µs/op | 312.1 µs/op | 1.35x faster |\n| int64 constant | 411.5 µs/op | 193.1 µs/op | 2.1x faster |\n| int64 sparse | 420.7 µs/op | 314.7 µs/op | 1.34x faster |\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "e890d7bb7e0e74462a3714e39a72cefd188cfa64",
      "tree": "7c314bc05fb62ba4a61185717f74ea75880ba057",
      "parents": [
        "de0c94e39f4c05a997f7d474ccbc5768839d3b36"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Oct 22 19:49:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 18:49:34 2026 +0100"
      },
      "message": "perf(arrow/compute): unify changing dictionaries incrementally (#1395)\n\n### What\nUnify changing dictionary chunks incrementally in `unique`.\n\n### Why\nThe current path rebuilds and rehashes the accumulated dictionary for\neach changed chunk.\n\n### Implementation\n- Keep one dictionary unifier and remap each chunk\u0027s indices.\n- Build the output dictionary once after all chunks.\n\n### Benchmark\n`BenchmarkUniqueChunkedChangingDictionaries/chunks\u003d256`, Go 1.26.3,\nApple M1 Pro, median of 5 runs.\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| Time (ms/op) | 59.99 | 1.64 | 36.6x faster |\n| Allocated bytes (MB/op) | 117.7 | 1.82 | 98.5% fewer bytes |\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "de0c94e39f4c05a997f7d474ccbc5768839d3b36",
      "tree": "3f985e91da38aa66531e1dd8d65d1323261ce3ec",
      "parents": [
        "7886e4e5e4aa38180b94678fcbbddca2f8000550"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Thu Oct 22 01:11:46 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:11:46 2026 -0400"
      },
      "message": "fix(parquet/file): read encrypted page headers written by parquet-mr (#1390)\n\n### Rationale for this change\n\narrow-go cannot read a Parquet file that parquet-mr (Spark, Hive,\nIceberg, anything on parquet-java) wrote with modular encryption.\n`file.OpenParquetFile` succeeds and the first page read fails:\n\n```\ndecrypting data page: encrypted payload length prefix is 4204214195, available length is 40: unexpected EOF\n```\n\nI hit it with `data/external_key_material_java.parquet.encrypted` from\nparquet-testing.\n\nparquet-mr zero-pads every encrypted thrift module to the size of its\nbuffer: `Util.java` encrypts the whole backing array of its\n`TMemoryBuffer`, not only the bytes written. So an encrypted page header\nis the thrift struct followed by zeros, all inside one length-prefixed\nmodule. `readPageHeader` (`parquet/file/page_reader.go:796`) decrypts\nthe module, parses the thrift, and then advances the stream by the\namount of thrift it consumed plus the cipher overhead (line 837). That\nis only right when nothing follows the struct. With padding it stops\npart way through the module, and the next read takes ciphertext for page\ndata. Files from arrow-go and from C++ (the ones in parquet-testing) are\nnot padded, which is why the existing tests never saw it.\n\n### What changes are included in this PR?\n\nFor an encrypted header, `readPageHeader` now skips the whole framed\nciphertext (the 4-byte length prefix plus the module, which\n`encryption.FramedCiphertext` already returns). The unencrypted path is\nunchanged.\n\n### Are these changes tested?\n\nYes. Both new tests fail on main and pass with the change.\n\n- `TestDecryptParquetMrExternalKeyMaterial`\n(`parquet/encryption_read_config_test.go`) reads the parquet-testing\nfile above and expects 100 rows and 2 columns. That file uses external\nkey material with double wrapping and arrow-go has no key toolkit, so\nthe test carries a small key retriever that unwraps the keys with the\nsame master keys the C++ tests use (`kf`, `kc1`, `kc2`). On main it\nfails with the error above.\n- `TestReadEncryptedPageHeaderWithTrailingPadding`\n(`parquet/file/page_reader_internal_test.go`) encrypts a page header\nwhose plaintext is the thrift struct plus 76 zero bytes, puts page data\nafter it, and checks that `readPageHeader` leaves the stream at the page\ndata. On main it is left inside the module.\n\nCommands, with `PARQUET_TEST_DATA\u003d$PWD/parquet-testing/data`:\n\n- `go test ./parquet -run\n\u0027TestFileEncryptionDecryption|TestDecryptParquetMrExternalKeyMaterial\u0027\n-count\u003d1`: ok (the existing C++-written configurations still pass)\n- `go test ./parquet/file -run\n\u0027TestReadEncryptedPageHeaderWithTrailingPadding|TestPageReader\u0027\n-count\u003d1`: ok\n- `go vet ./parquet ./parquet/file` and `gofmt -l` on the changed files:\nclean\n\nThe fixture is the one in the parquet-testing submodule this repo\nalready pins. Its README says it was encrypted with parquet-mr using\nexternal key material and the in-memory KMS client. No fixture files\nwere added.\n\n### Are there any user-facing changes?\n\nYes. Encrypted files written by parquet-mr / parquet-java can be read.\nNothing changes for files written by arrow-go or C++.\n\nRelated to #566. That issue reports that cross-library encryption does\nnot work in general; this covers the parquet-mr to Go read path only.\n\n### AI/LLM disclosure\n\n- AI coding tools (Claude Code) were used to find and write this fix,\nthe two tests and this description.\n- The failure was reproduced on main, the change was reviewed, and the\ncommands above were run locally before submitting."
    },
    {
      "commit": "7886e4e5e4aa38180b94678fcbbddca2f8000550",
      "tree": "4884028a78ee8c0ece09def671aa6c5ee1556b49",
      "parents": [
        "df81ee9d30b4fa7c7f69a987ffb712df56da66a4"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Wed Oct 21 23:11:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:11:29 2026 -0400"
      },
      "message": "perf(arrow/csv): stream full-file CSV reads into builders (#1393)\n\n### What\n- Stream `WithChunk(-1)` CSV rows into Arrow builders as records arrive.\n\n### Why\n- `ReadAll` keeps every parsed row in memory before building Arrow\narrays.\n\n### Implementation\n- Reuse the existing parser and builder path one record at a time.\n- Preserve pending rows and conversion behavior.\n\n### Benchmark\n`BenchmarkCSVReadAllStreaming`, 100,000 rows and 3 columns; Go 1.26.3,\nApple M1 Pro, median of 7 runs.\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| Time (ms/op) | 24.57 | 14.55 | 1.69x faster |\n| Allocated bytes (MB/op) | 28.38 | 8.21 | 71% fewer bytes |\n| Allocations (allocs/op) | 200,166 | 100,138 | 50% fewer |"
    },
    {
      "commit": "df81ee9d30b4fa7c7f69a987ffb712df56da66a4",
      "tree": "e78eb1ec6d63172234b2e383beb0ea3f6858b5b4",
      "parents": [
        "81c5390b99f5c4a13a751b60987d1db2e45f387f"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Wed Oct 21 22:11:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:11:10 2026 -0400"
      },
      "message": "fix(parquet/internal/encoding): do not leak delta bit width buffers from decoders (#1394)\n\n### Rationale for this change\n\n`deltaBitPackDecoder` allocated its per-miniblock bit-width buffer\n(`deltaBitWidths`) from the reader\u0027s allocator, but decoders have no\n`Release`, so the buffer was never returned. This leaks for:\n\n- DELTA_BINARY_PACKED int32/int64 columns, and\n- the temporary length decoders that DELTA_LENGTH_BYTE_ARRAY (one) and\nDELTA_BYTE_ARRAY (two) create inside `SetData` on every page.\n\nWith a checked allocator, reading a 545-row binary column back through\npqarrow left 64 bytes (DELTA_LENGTH_BYTE_ARRAY) and 128 bytes\n(DELTA_BYTE_ARRAY) allocated after everything was released, more for\nmulti-page columns. Found while reviewing #1392.\n\n### What changes are included in this PR?\n\n`deltaBitWidths` is now a reused `[]byte` on the Go heap, grown only\nwhen needed (the same pattern as the decoders\u0027 existing\n`lengthScratch`). The size bound is unchanged: the header validation\nalready caps the miniblock count. No API change.\n\n### Are these changes tested?\n\nYes. `TestDeltaDecodersDoNotRetainAllocations` (in\n`delta_bit_packing_validation_test.go`) decodes DELTA_BINARY_PACKED,\nDELTA_LENGTH_BYTE_ARRAY and DELTA_BYTE_ARRAY data with a checked\nallocator and asserts nothing is left allocated. All three subtests fail\non main (`LEAK of 64 bytes`) and pass with the change.\n\n- `go test ./parquet/internal/encoding ./parquet/file\n./parquet/pqarrow`: ok\n- `go test -tags noasm ./parquet/internal/encoding` and `GOARCH\u003d386 go\ntest ./parquet/internal/encoding`: ok\n- `go vet ./parquet/internal/encoding` and `gofmt -l`: clean\n\n### Are there any user-facing changes?\n\nNo API changes. Readers using a checked or C-backed allocator no longer\nleak a small buffer per delta-encoded page."
    },
    {
      "commit": "81c5390b99f5c4a13a751b60987d1db2e45f387f",
      "tree": "6f3dd4d322ec39d46eb1056f0376ad2036131802",
      "parents": [
        "4c374d650b9a02fe2b0690f60ec5a4c1f692670a"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Wed Oct 21 22:01:05 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:01:05 2026 -0400"
      },
      "message": "ci: pin RC Verify Linux job to ubuntu-24.04 (#1401)\n\n### Rationale for this change\n\n`Verify (ubuntu-latest)` in the RC workflow started failing on main and\non every PR around 2026-10-21. GitHub moved `ubuntu-latest` from\nubuntu-24.04 (image 20261012.334.1, passing) to ubuntu-26.04 (image\n20261018.168.1, failing). On 26.04, `ci/scripts/test.sh` picks the\nimage\u0027s default clang 21.1.8 for `-asan`, and LeakSanitizer crashes as\ntest binaries exit in cgo packages:\n\n```\nTracer caught signal 11: addr\u003d0x795b2f7ff000 pc\u003d0x0000005475ea sp\u003d0x795b280cdc70\n\u003d\u003d18479\u003d\u003dLeakSanitizer has encountered a fatal error.\n\u003d\u003d18479\u003d\u003dHINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)\nFAIL\tgithub.com/apache/arrow-go/v18/arrow/memory/mallocator\n```\n\nSeen on main pushes (runs 39667307742, 39668138403, in `arrow/cdata` and\n`arrow/memory/mallocator`) and on #1395, #1397 and #1398. The last\npassing main run (39648059952) was on ubuntu-24.04 with the clang-19\nruntime the workflow installs.\n\n### What changes are included in this PR?\n\nPin the Verify job\u0027s Linux runner to `ubuntu-24.04` (macOS is unchanged)\nand update the comment on the ASan runtime step, which still referred to\n`ubuntu-latest`. The check name changes from `Verify (ubuntu-latest)` to\n`Verify (ubuntu-24.04)`; no status checks are required on main, so\nnothing else needs updating.\n\nThis restores the known-good toolchain; it does not fix the underlying\nLeakSanitizer crash on 26.04 / clang 21, which can be investigated\nseparately before moving back to `ubuntu-latest`.\n\n### Are these changes tested?\n\nBy this PR\u0027s own RC workflow run: `Verify (ubuntu-24.04)` should pass.\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "4c374d650b9a02fe2b0690f60ec5a4c1f692670a",
      "tree": "346dc94fa33e6f637b7bd3fa9955fc093a12e0bd",
      "parents": [
        "11dd954594c6c176595d8649ed6c3ccfeaf072a2"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Wed Oct 21 21:11:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 16:11:27 2026 -0400"
      },
      "message": "fix(parquet/internal/encoding): reset delta bit pack encoder state after flush (#1400)\n\n### Rationale for this change\n\n`deltaBitPackEncoder.FlushValues` hands the sink\u0027s bytes to the caller\nbut left the bit writer (and the first/current value) in place. The next\n`Put` replaces the writer, but a page whose values are all null calls\n`Put` with nothing, so its flush still used the old writer\u0027s byte count\nand copied that many bytes out of the fresh sink buffer:\n\n- **Through a column writer** (pqarrow): no crash and the data reads\nback correctly, but an all-null page is padded with the previous page\u0027s\nlength in zeros, and the stale `EstimatedDataEncodedSize` makes the\nwriter cut pages early. A nullable INT32 column of 20,000 random values,\n5,000 nulls and 10 values, written with 1 KB pages, came out at 92,002\nbytes / 25 pages on main versus 82,954 bytes / 21 pages with this\nchange.\n- **Using the encoder directly**: after a large page, the next all-null\nflush panics (`slice bounds out of range [:96061] with capacity 2048`).\n\nFound while reviewing #1396.\n\n### What changes are included in this PR?\n\n`FlushValues` drops the bit writer and resets the first/current value\nafter flushing, so an empty page is exactly the header a fresh encoder\nwrites and the size estimate is 0 until the next `Put`. No API change.\n\n### Are these changes tested?\n\nYes. `TestDeltaBitPackedReuseAfterAllNullPage` (in `encoding_test.go`,\nnext to the other delta tests) writes a first page of 3, 1,000 or\n100,000 values and then checks that an all-null page is byte-identical\nto a fresh encoder\u0027s, that the size estimate is 0, and that the\nfollowing page still decodes. It fails on main (wrong bytes and\nestimate, then a panic) and passes with the change.\n\n- `go test ./parquet/internal/encoding ./parquet/file\n./parquet/pqarrow`: ok\n- `go test -tags noasm` and `GOARCH\u003d386 go test` for\n`./parquet/internal/encoding`: ok; delta tests pass under `-race`\n- `go vet ./parquet/internal/encoding` and `gofmt -l`: clean\n\nThis touches the same file as #1394 but different functions; the two\nmerge cleanly.\n\n### Are there any user-facing changes?\n\nNo API changes. Delta-encoded columns with all-null pages are written\nsmaller and with correctly sized pages."
    },
    {
      "commit": "11dd954594c6c176595d8649ed6c3ccfeaf072a2",
      "tree": "0f894eff8f6a1db34aab5d0b7a5c69e0f596219a",
      "parents": [
        "54075bfded0be54c11e828a43931570b6ad30828"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Wed Oct 21 22:05:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 16:05:39 2026 -0400"
      },
      "message": "perf(parquet): copy DELTA_LENGTH Arrow payloads by valid runs (#1392)\n\n### What\n- Copy DELTA_LENGTH_BYTE_ARRAY payload bytes once per contiguous valid\nrun.\n\n### Why\n- Writing each short value separately adds unnecessary work.\n\n### Implementation\n- Use one bulk copy for null-free arrays and one copy per valid bitmap\nrun.\n- Keep the length encoding unchanged.\n\n### Benchmark\n`BenchmarkDeltaLengthArrowContiguousRuns`, 65,536 null-free values; Go\n1.26.3, Apple M1 Pro, median of 5 runs.\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| 4-byte values (µs/op) | 819 | 487 | 1.68x faster |\n| 16-byte values (µs/op) | 880 | 561 | 1.57x faster |\n| Allocations (allocs/op) | 2,054 | 2,054 | No change |\n\nThis measures the DELTA_LENGTH encoder path, not full Parquet file\nencoding."
    },
    {
      "commit": "54075bfded0be54c11e828a43931570b6ad30828",
      "tree": "caa0c226df4749e07b6d7a16a3973587a407f49d",
      "parents": [
        "88cd2c8563b478a849565c433df779809d5145fd"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Wed Oct 21 19:55:09 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 13:55:09 2026 -0400"
      },
      "message": "fix(arrow/bitutil): preserve overlapping bitmap transfers (#1389)\n\n**What**\n- Support overlapping source and destination ranges for bitmap copies\nand inversions.\n\n**Why**\n- Writes can overwrite source bits before the transfer reads them.\n\n**Implementation**\n- Detect overlapping byte ranges and copy the source bytes before\nwriting.\n- Keep the non-overlapping path allocation-free.\n\n### Benchmark\nGo 1.26.3, Apple M1 Pro, 64 KiB aligned ranges; medians of 10 x 300 ms\nruns (before -\u003e after).\n\n| Metric | Before | After | Change |\n|---|---:|---:|---:|\n| Disjoint copy (ns/op) | 840 | 816 | 2.9% faster |\n| Disjoint invert (µs/op) | 20.8 | 20.9 | 0.5% slower |\n| Overlapping copy (µs/op) | 0.88 | 5.68 | 6.5x slower |\n| Overlapping invert (µs/op) | 142 | 29.2 | 4.9x faster |\n| Overlapping operations allocations | 0 allocs/op | 1 alloc/op (64 KiB)\n| +1 allocation |"
    },
    {
      "commit": "88cd2c8563b478a849565c433df779809d5145fd",
      "tree": "bd80d29ddbeadebd034062612625046a4de4e601",
      "parents": [
        "35a974f1b9e988fd44736dbd4a3290638d0d16b5"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Wed Oct 21 17:29:00 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 12:29:00 2026 -0400"
      },
      "message": "perf(parquet/metadata): pool bloom filter hash scratch buffers (#1378)\n\n### Rationale for this change\n\n`parquet/metadata/bloom_filter.go` had two `// TODO: replace with bitset\nrun reader pool` comments in `GetSpacedHashes` / `InsertSpacedHashes`.\nProfiling shows the set-bit run reader isn\u0027t the cost: it is inlined and\ndevirtualized, so it already stays on the stack and pooling it would add\noverhead for nothing.\n\nThe real per-call cost is the ~32KiB of batching scratch (`byteBatch`,\n`rawBatch`, `hashBatch`) declared in `GetHashes`, `InsertHashes`,\n`GetSpacedHashes` and `InsertSpacedHashes`. Those buffers are passed\nthrough the `Hasher` / `BloomFilterBuilder` interfaces, so they escape:\n**2 allocations / ~35KiB per call regardless of input size**. Small\ncalls (e.g. 64 values) paid ~5.5µs of mostly allocation and zeroing to\nhash 64 values.\n\n### What changes are included in this PR?\n\n- Move the scratch into a `sync.Pool`-backed `hashScratch` used by all\nfour batched helpers.\n- Before returning scratch to the pool, clear the `byteBatch` entries\nthat may reference caller data, so pooled scratch doesn\u0027t keep caller\nbyte arrays alive.\n- Remove the two run-reader TODOs (see rationale).\n- Add `BenchmarkBloomFilterSpacedHashes` (get/insert × 64/1024/100000\nvalues × all-valid/alternating/random validity).\n\n### Are these changes tested?\n\nCovered by the existing bloom filter tests (`go test ./parquet/...`\npasses, `-race` on `parquet/metadata` passes). Benchmarks, count\u003d10,\nbenchstat, Intel Core Ultra 7 155H:\n\n| Benchmark | old | new | Δ time | allocs old → new |\n|---|---|---|---|---|\n| SpacedHashes/insert/64/all-true | 5.52µs | 311ns | -94.4% | 2 → 0 |\n| SpacedHashes/get/64/random | 5.50µs | 474ns | -91.4% | 3 → 1 |\n| SpacedHashes/insert/1024/random | 13.0µs | 5.67µs | -56.6% | 2 → 0 |\n| SpacedHashes/get/1024/alternating | 15.7µs | 9.06µs | -42.3% | 3 → 1 |\n| SpacedHashes/insert/100000/all-true | 430µs | 406µs | -5.4% | 2 → 0 |\n| HashBatching/bounded (InsertHashes, 100k) | 426µs | 402µs | -5.6% | 2\n→ 0 |\n| file: WriteDictionaryBloomFilter/int32/card\u003d10000 | 2.15ms | 1.46ms |\n-31.9% | 403 → 207 |\n| file: WriteDictionaryBloomFilter/byte_array/card\u003d1000 | 4.13ms |\n3.74ms | -9.4% | 452 → 253 |\n\nThe end-to-end writer benchmark also drops B/op by 54% (int32) and 24%\n(byte_array) at cardinality ≥ 1000. Low-cardinality cases are unchanged\n(p \u003e 0.05). Micro-benchmark geomean: -63% time.\n\n\u003cdetails\u003e\u003csummary\u003eFull benchstat\u003c/summary\u003e\n\n```\ngoos: linux\ngoarch: amd64\npkg: github.com/apache/arrow-go/v18/parquet/file\ncpu: Intel(R) Core(TM) Ultra 7 155H\n                                                           │ /tmp/bloom_old.txt │         /tmp/bloom_new.txt          │\n                                                           │       sec/op       │   sec/op     vs base                │\nWriteDictionaryBloomFilter/int32/cardinality\u003d1-22                   1.279m ± 4%   1.225m ± 6%   -4.22% (p\u003d0.029 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1-22              1.929m ± 7%   1.952m ± 2%        ~ (p\u003d1.000 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10-22                  1.473m ± 2%   1.471m ± 7%        ~ (p\u003d0.912 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10-22             2.434m ± 2%   2.441m ± 4%        ~ (p\u003d0.218 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d100-22                 1.455m ± 5%   1.453m ± 4%        ~ (p\u003d0.684 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d100-22            2.717m ± 4%   2.751m ± 1%        ~ (p\u003d0.579 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d1000-22                2.102m ± 4%   1.444m ± 5%  -31.30% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1000-22           4.131m ± 3%   3.742m ± 4%   -9.41% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10000-22               2.149m ± 7%   1.464m ± 3%  -31.85% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10000-22          4.163m ± 5%   3.855m ± 3%   -7.38% (p\u003d0.000 n\u003d10)\ngeomean                                                             2.205m        2.005m        -9.09%\n\n                                                      │ /tmp/bloom_old.txt │          /tmp/bloom_new.txt          │\n                                                      │        B/s         │     B/s       vs base                │\nWriteDictionaryBloomFilter/int32/cardinality\u003d1-22             298.3Mi ± 4%   311.5Mi ± 5%   +4.41% (p\u003d0.029 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10-22            258.9Mi ± 2%   259.3Mi ± 7%        ~ (p\u003d0.927 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d100-22           262.3Mi ± 6%   262.5Mi ± 3%        ~ (p\u003d0.684 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d1000-22          181.5Mi ± 4%   264.2Mi ± 5%  +45.57% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10000-22         177.5Mi ± 7%   260.5Mi ± 4%  +46.74% (p\u003d0.000 n\u003d10)\ngeomean                                                       230.6Mi        270.9Mi       +17.46%\n\n                                                           │ /tmp/bloom_old.txt │          /tmp/bloom_new.txt          │\n                                                           │        B/op        │     B/op      vs base                │\nWriteDictionaryBloomFilter/int32/cardinality\u003d1-22                  1.103Mi ± 0%   1.104Mi ± 0%        ~ (p\u003d0.529 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1-22             596.0Ki ± 0%   596.1Ki ± 0%        ~ (p\u003d0.684 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10-22                 1.310Mi ± 0%   1.310Mi ± 0%        ~ (p\u003d1.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10-22            808.3Ki ± 0%   808.5Ki ± 0%        ~ (p\u003d0.481 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d100-22                1.447Mi ± 0%   1.447Mi ± 0%        ~ (p\u003d0.739 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d100-22           987.8Ki ± 0%   988.1Ki ± 0%        ~ (p\u003d0.143 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d1000-22               6.040Mi ± 0%   2.785Mi ± 0%  -53.90% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1000-22          13.59Mi ± 0%   10.35Mi ± 0%  -23.84% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10000-22              6.056Mi ± 0%   2.802Mi ± 0%  -53.73% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10000-22         13.61Mi ± 0%   10.37Mi ± 0%  -23.81% (p\u003d0.000 n\u003d10)\ngeomean                                                            2.397Mi        1.945Mi       -18.85%\n\n                                                           │ /tmp/bloom_old.txt │          /tmp/bloom_new.txt          │\n                                                           │     allocs/op      │ allocs/op   vs base                  │\nWriteDictionaryBloomFilter/int32/cardinality\u003d1-22                    184.0 ± 1%   184.0 ± 1%        ~ (p\u003d1.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1-22               207.0 ± 0%   207.0 ± 0%        ~ (p\u003d1.000 n\u003d10) ¹\nWriteDictionaryBloomFilter/int32/cardinality\u003d10-22                   189.0 ± 0%   189.0 ± 0%        ~ (p\u003d1.000 n\u003d10) ¹\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10-22              215.0 ± 0%   215.0 ± 0%        ~ (p\u003d1.000 n\u003d10) ¹\nWriteDictionaryBloomFilter/int32/cardinality\u003d100-22                  194.0 ± 1%   194.0 ± 1%        ~ (p\u003d0.450 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d100-22             227.0 ± 0%   227.0 ± 0%        ~ (p\u003d1.000 n\u003d10) ¹\nWriteDictionaryBloomFilter/int32/cardinality\u003d1000-22                 403.0 ± 0%   207.0 ± 0%  -48.64% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d1000-22            452.0 ± 0%   253.0 ± 0%  -44.03% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/int32/cardinality\u003d10000-22                403.0 ± 0%   207.0 ± 0%  -48.64% (p\u003d0.000 n\u003d10)\nWriteDictionaryBloomFilter/byte_array/cardinality\u003d10000-22           549.0 ± 1%   338.5 ± 1%  -38.34% (p\u003d0.000 n\u003d10)\ngeomean                                                              277.9        218.7       -21.31%\n¹ all samples are equal\n\npkg: github.com/apache/arrow-go/v18/parquet/metadata\n                                                     │ /tmp/bloom_old.txt │         /tmp/bloom_new.txt          │\n                                                     │       sec/op       │   sec/op     vs base                │\nBloomFilterHashBatching/materialized-22                      666.7µ ±  3%   651.6µ ± 7%        ~ (p\u003d0.247 n\u003d10)\nBloomFilterHashBatching/bounded-22                           426.1µ ±  2%   402.3µ ± 1%   -5.56% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/all-true-22                  5683.5n ± 15%   441.9n ± 4%  -92.22% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/all-true-22               5518.5n ±  4%   310.8n ± 1%  -94.37% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/alternating-22               5800.5n ±  2%   590.9n ± 2%  -89.81% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/alternating-22            5764.5n ±  5%   509.5n ± 1%  -91.16% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/random-22                    5497.0n ±  4%   474.1n ± 2%  -91.38% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/random-22                 5614.5n ±  2%   372.0n ± 0%  -93.37% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/all-true-22                12.481µ ±  3%   6.142µ ± 3%  -50.79% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/all-true-22             11.431µ ±  3%   4.265µ ± 2%  -62.69% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/alternating-22             15.682µ ±  3%   9.056µ ± 1%  -42.25% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/alternating-22          15.682µ ±  6%   7.711µ ± 0%  -50.83% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/random-22                  13.093µ ±  3%   6.846µ ± 3%  -47.71% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/random-22               13.044µ ±  5%   5.667µ ± 1%  -56.55% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/all-true-22               572.9µ ±  4%   512.0µ ± 4%  -10.63% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/all-true-22            429.5µ ±  3%   406.2µ ± 6%   -5.43% (p\u003d0.009 n\u003d10)\nBloomFilterSpacedHashes/get/100000/alternating-22            888.4µ ±  1%   877.9µ ± 2%        ~ (p\u003d0.089 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/alternating-22         764.4µ ±  2%   745.4µ ± 2%   -2.48% (p\u003d0.001 n\u003d10)\nBloomFilterSpacedHashes/get/100000/random-22                 761.7µ ±  2%   743.6µ ± 2%   -2.38% (p\u003d0.019 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/random-22              664.8µ ±  2%   649.8µ ± 1%   -2.26% (p\u003d0.000 n\u003d10)\ngeomean                                                      48.24µ         17.68µ       -63.35%\n\n                                                     │ /tmp/bloom_old.txt │           /tmp/bloom_new.txt            │\n                                                     │        B/s         │      B/s       vs base                  │\nBloomFilterHashBatching/materialized-22                     572.2Mi ±  3%    585.4Mi ± 7%          ~ (p\u003d0.247 n\u003d10)\nBloomFilterHashBatching/bounded-22                          895.4Mi ±  2%    948.1Mi ± 1%     +5.89% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/all-true-22                  42.98Mi ± 13%   552.44Mi ± 4%  +1185.28% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/all-true-22               44.24Mi ±  4%   785.75Mi ± 1%  +1676.07% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/alternating-22               42.09Mi ±  2%   413.18Mi ± 2%   +881.66% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/alternating-22            42.35Mi ±  5%   479.16Mi ± 1%  +1031.37% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/random-22                    44.41Mi ±  4%   515.01Mi ± 2%  +1059.61% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/random-22                 43.49Mi ±  2%   656.24Mi ± 0%  +1409.02% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/all-true-22                313.0Mi ±  3%    636.0Mi ± 3%   +103.18% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/all-true-22             341.7Mi ±  3%    916.0Mi ± 2%   +168.03% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/alternating-22             249.1Mi ±  3%    431.3Mi ± 1%    +73.16% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/alternating-22          249.1Mi ±  6%    506.6Mi ± 0%   +103.38% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/random-22                  298.4Mi ±  3%    570.6Mi ± 3%    +91.24% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/random-22               299.5Mi ±  5%    689.3Mi ± 1%   +130.18% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/all-true-22              665.9Mi ±  4%    745.1Mi ± 4%    +11.90% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/all-true-22           888.1Mi ±  3%    939.1Mi ± 6%     +5.74% (p\u003d0.009 n\u003d10)\nBloomFilterSpacedHashes/get/100000/alternating-22           429.4Mi ±  1%    434.5Mi ± 2%          ~ (p\u003d0.089 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/alternating-22        499.0Mi ±  2%    511.7Mi ± 2%     +2.55% (p\u003d0.001 n\u003d10)\nBloomFilterSpacedHashes/get/100000/random-22                500.8Mi ±  2%    513.0Mi ± 2%     +2.43% (p\u003d0.019 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/random-22             573.8Mi ±  2%    587.1Mi ± 1%     +2.31% (p\u003d0.000 n\u003d10)\ngeomean                                                     220.3Mi          601.0Mi        +172.83%\n\n                                                     │ /tmp/bloom_old.txt │              /tmp/bloom_new.txt              │\n                                                     │        B/op        │      B/op        vs base                     │\nBloomFilterHashBatching/materialized-22                      818.6Ki ± 0%   786.1Ki ±    0%    -3.97% (p\u003d0.000 n\u003d10)\nBloomFilterHashBatching/bounded-22                         35456.000 ± 0%     1.000 ± 1300%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/all-true-22                   35968.0 ± 0%     515.0 ±    0%   -98.57% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/all-true-22                34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/alternating-22                35712.0 ± 0%     257.0 ±    0%   -99.28% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/alternating-22             34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/random-22                     35744.0 ± 0%     289.0 ±    0%   -99.19% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/random-22                  34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/all-true-22                42.625Ki ± 0%   8.029Ki ±    0%   -81.16% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/all-true-22              34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/alternating-22             38.625Ki ± 0%   4.008Ki ±    0%   -89.62% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/alternating-22           34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/random-22                  39.375Ki ± 0%   4.762Ki ±    0%   -87.91% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/random-22                34.62Ki ± 0%    0.00Ki ±    0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/all-true-22               818.6Ki ± 0%   786.6Ki ±    0%    -3.92% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/all-true-22          35456.000 ± 0%     1.000 ± 1300%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/alternating-22            426.6Ki ± 0%   392.5Ki ±    0%    -7.99% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/alternating-22        35456.00 ± 0%     27.00 ±   96%   -99.92% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/random-22                 426.6Ki ± 0%   392.6Ki ±    0%    -7.97% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/random-22             35456.00 ± 0%     12.00 ±  100%   -99.97% (p\u003d0.000 n\u003d10)\ngeomean                                                      62.54Ki                         ?                       ¹ ²\n¹ summaries must be \u003e0 to compute geomean\n² ratios must be \u003e0 to compute geomean\n\n                                                     │ /tmp/bloom_old.txt │           /tmp/bloom_new.txt            │\n                                                     │     allocs/op      │ allocs/op   vs base                     │\nBloomFilterHashBatching/materialized-22                        3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterHashBatching/bounded-22                             2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/all-true-22                     3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/all-true-22                  2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/alternating-22                  3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/alternating-22               2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/64/random-22                       3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/64/random-22                    2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/all-true-22                   3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/all-true-22                2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/alternating-22                3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/alternating-22             2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/1024/random-22                     3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/1024/random-22                  2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/all-true-22                 3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/all-true-22              2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/alternating-22              3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/alternating-22           2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/get/100000/random-22                   3.000 ± 0%   1.000 ± 0%   -66.67% (p\u003d0.000 n\u003d10)\nBloomFilterSpacedHashes/insert/100000/random-22                2.000 ± 0%   0.000 ± 0%  -100.00% (p\u003d0.000 n\u003d10)\ngeomean                                                        2.449                    ?                       ¹ ²\n¹ summaries must be \u003e0 to compute geomean\n² ratios must be \u003e0 to compute geomean\n```\n\u003c/details\u003e\n\n### Are there any user-facing changes?\n\nNo API changes; performance only."
    },
    {
      "commit": "35a974f1b9e988fd44736dbd4a3290638d0d16b5",
      "tree": "02309c118e353817f3ac3c65b75ea51acf4d54ef",
      "parents": [
        "9ee670619924ce834c178c4d631db5be3e91435b"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 20 21:24:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 15:24:00 2026 -0400"
      },
      "message": "perf(parquet): speed up delta byte array prefix matching (#1388)\n\n## What\n- Compare common prefixes eight bytes at a time.\n\n## Why\n- Reduce work for long shared prefixes in DELTA_BYTE_ARRAY encoding.\n\n## Implementation\n- Use little-endian word loads and trailing-zero count.\n- Keep byte-wise handling for short tails.\n\n## Benchmark\n- AMD EPYC, isolated comparison, 0 allocations: 256-byte prefix 202 → 43\nns/op (4.7x); 900-byte prefix 565 → 155 ns/op (3.6x)."
    },
    {
      "commit": "9ee670619924ce834c178c4d631db5be3e91435b",
      "tree": "1b0414ca7847c5922085474d665c56182520b504",
      "parents": [
        "1eb1d9cc632f334a73158c1cbbb9b258f1c76261"
      ],
      "author": {
        "name": "Kyon",
        "email": "251157463+skyon0522-ai@users.noreply.github.com",
        "time": "Wed Oct 21 04:23:50 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 20:23:50 2026 +0100"
      },
      "message": "fix(arrow/ipc): bound dense union rebasing to the logical slice (#1385)\n\n### Rationale for this change\n\nWriting a middle slice of a List or LargeList containing dense unions\nfails even when the input is valid. The stream writer returns an\nindex-out-of-range error, and the file writer panics. `RawTypeCodes()`\nincludes the backing buffer\u0027s remaining entries, while the rebased\noutput buffer holds only the logical slice length.\n\nUsing the exported `array.ValidateFull` in the regression also exposes\nan empty-array issue: an empty dense-union child decoded from IPC can\nhave no value-offset buffer, but union validation unconditionally\naccesses that buffer.\n\n### What changes are included in this PR?\n\n- Limit dense union rebasing to `arr.Len()` type codes.\n- Exercise IPC roundtrips with the exported `array.ValidateFull` helper.\n- In `arrow/array/union.go`, run per-value dense offset validation only\nwhen the union has values. Child-type checks and nonempty offset\nvalidation remain unchanged.\n- Add a direct `TestDenseUnionValidateEmpty` regression in\n`arrow/array/union_test.go` for an empty dense union with a nil\nvalue-offset buffer.\n\n### Are these changes tested?\n\nOn Linux amd64 with Go 1.27.2:\n\n- The middle-slice regression fails without the IPC rebasing fix.\n- The requested helper replacements reproduce a panic for an empty\ndense-union List stream roundtrip before the empty-array guard.\n- The direct empty-union validation test reproduces the nil-offset panic\nwhen only that guard is removed, and passes with the guard.\n- All 24 roundtrip combinations pass with both fixes: List/LargeList,\ndense/sparse unions, full/middle/empty slices, and File/Stream,\nincluding custom type codes and a selected null child.\n- `go test ./arrow/array ./arrow/ipc -count\u003d1` passes.\n- `go vet ./arrow/array ./arrow/ipc` passes.\n\n### Are there any user-facing changes?\n\nValid middle slices containing dense unions can be written and read back\nthrough IPC, and full validation handles empty decoded dense unions. No\npublic API changes.\n\nAI assistance: Codex generated the patch, regression test, and this\ndescription, and ran the recorded checks."
    },
    {
      "commit": "1eb1d9cc632f334a73158c1cbbb9b258f1c76261",
      "tree": "eb7fa01b97614c50d562da9e9e43019ce1db5e4f",
      "parents": [
        "d5ec41129160b08580b65ed09f67dc5241dac06b"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Tue Oct 20 15:02:54 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 10:02:54 2026 -0400"
      },
      "message": "fix(parquet/metadata): stop bloom filter asm clobbering the frame pointer (#1379)\n\n### Rationale for this change\n\n`go vet ./parquet/metadata/` reports 12 findings in the\nc2goasm-generated bloom filter block kernels\n(`bloom_filter_block_{avx2,sse4}_amd64.s`):\n\n- **framepointer** (6): each kernel ran `LEAQ LCDATAx\u003c\u003e(SB), BP` in a\nframeless function, using BP as the constant-table pointer without\nsaving it. While the kernel runs, any frame-pointer unwinder (Go\u0027s\nexecution tracer, profilers, perf/eBPF) walks a garbage frame chain.\n- **asmdecl** (6): `_check_block_{avx2,sse4}` return a `bool` but\ndeclared a `$0-32` arg frame and stored the result with `MOVQ`. This is\nharmless in practice (the extra bytes land in padding) but incorrect.\n\n### What changes are included in this PR?\n\nHand edits to the two `.s` files. c2goasm is unmaintained, so the header\nnow says the files are hand-edited:\n\n- `_insert_block_*` / `_insert_bulk_*`: load the constant table into R11\n(no kernel uses it otherwise) instead of BP. The raw-encoded `[rbp]`\ninstructions become the equivalent Go mnemonics (`VPMULLD`,\n`VPBROADCASTD`, `VMOVDQA`; `MOVO`, `PMULLD`). `go tool objdump` shows\nthe same opcodes as before; only the base register changed.\n- `_check_block_*`: these never read the table, so the dead `LEAQ … BP`\nis removed. The frame is now `$0-25` and the result is stored with\n`MOVB`.\n\n### Are these changes tested?\n\n- `go vet ./parquet/metadata/` is now clean (previously 12 findings).\n- `go test ./parquet/metadata/ ./parquet/file/` passes on the AVX2 path\nand with `GODEBUG\u003dcpu.avx2\u003doff`. Under that setting\n`BenchmarkFilterInsertBulk` goes from ~14 to ~22 ns, which confirms the\nSSE4 kernels are the ones running.\n- Performance is neutral (count\u003d10, Intel Core Ultra 7 155H, geomean\n-0.26%):\n\n```\ngoos: linux\ngoarch: amd64\npkg: github.com/apache/arrow-go/v18/parquet/metadata\ncpu: Intel(R) Core(TM) Ultra 7 155H\n                        │ /tmp/asm_old.txt │          /tmp/asm_new.txt          │\n                        │      sec/op      │   sec/op     vs base               │\nFilterInsert-22                2.565n ± 1%   2.583n ± 0%       ~ (p\u003d0.143 n\u003d10)\nFilterCheck-22                 3.922n ± 1%   3.877n ± 0%  -1.15% (p\u003d0.000 n\u003d10)\nFilterCheckBulk-22             78.78n ± 2%   77.39n ± 2%  -1.76% (p\u003d0.009 n\u003d10)\nFilterInsertBulk-22            14.02n ± 0%   14.22n ± 1%  +1.43% (p\u003d0.000 n\u003d10)\nSSE4FilterInsert-22            3.152n ± 1%   3.185n ± 1%  +1.05% (p\u003d0.000 n\u003d10)\nSSE4FilterCheck-22             3.902n ± 0%   3.819n ± 2%  -2.15% (p\u003d0.001 n\u003d10)\nSSE4FilterCheckBulk-22         78.80n ± 1%   77.64n ± 2%       ~ (p\u003d0.063 n\u003d10)\nSSE4FilterInsertBulk-22        21.58n ± 1%   21.88n ± 1%  +1.37% (p\u003d0.000 n\u003d10)\ngeomean                        11.11n        11.08n       -0.26%\n\n                        │ /tmp/asm_old.txt │          /tmp/asm_new.txt           │\n                        │       B/s        │     B/s       vs base               │\nFilterInsert-22               11.62Gi ± 1%   11.54Gi ± 0%       ~ (p\u003d0.165 n\u003d10)\nFilterCheck-22                7.599Gi ± 1%   7.687Gi ± 0%  +1.16% (p\u003d0.000 n\u003d10)\nFilterCheckBulk-22            6.052Gi ± 2%   6.161Gi ± 2%  +1.80% (p\u003d0.009 n\u003d10)\nFilterInsertBulk-22           34.01Gi ± 0%   33.54Gi ± 1%  -1.37% (p\u003d0.000 n\u003d10)\nSSE4FilterInsert-22           9.454Gi ± 1%   9.356Gi ± 1%  -1.04% (p\u003d0.000 n\u003d10)\nSSE4FilterCheck-22            7.637Gi ± 0%   7.805Gi ± 2%  +2.20% (p\u003d0.002 n\u003d10)\nSSE4FilterCheckBulk-22        6.051Gi ± 1%   6.142Gi ± 2%       ~ (p\u003d0.063 n\u003d10)\nSSE4FilterInsertBulk-22       22.09Gi ± 1%   21.79Gi ± 1%  -1.34% (p\u003d0.000 n\u003d10)\ngeomean                       10.73Gi        10.76Gi       +0.27%\n```\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "d5ec41129160b08580b65ed09f67dc5241dac06b",
      "tree": "8433b281ac9af2c217ce0ebdc596bc9e7d60779f",
      "parents": [
        "db7566c7dddea78445befca296dd83dda0e4b77f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 19 17:30:07 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:30:07 2026 -0400"
      },
      "message": "chore: Bump github.com/klauspost/cpuid/v2 from 2.4.0 to 2.4.1 (#1387)\n\nBumps\n[github.com/klauspost/cpuid/v2](https://github.com/klauspost/cpuid) from\n2.4.0 to 2.4.1.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/klauspost/cpuid/releases\"\u003egithub.com/klauspost/cpuid/v2\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.4.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd amd64 CPU topology tree enumeration by \u003ca\nhref\u003d\"https://github.com/klauspost\"\u003e\u003ccode\u003e@​klauspost\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/pull/179\"\u003eklauspost/cpuid#179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: update riscv vendor ids by \u003ca\nhref\u003d\"https://github.com/Jvlegod\"\u003e\u003ccode\u003e@​Jvlegod\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/pull/177\"\u003eklauspost/cpuid#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: assign unified L1 cache size to L1D by \u003ca\nhref\u003d\"https://github.com/ProjectMutilation\"\u003e\u003ccode\u003e@​ProjectMutilation\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/pull/180\"\u003eklauspost/cpuid#180\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Jvlegod\"\u003e\u003ccode\u003e@​Jvlegod\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/pull/177\"\u003eklauspost/cpuid#177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/ProjectMutilation\"\u003e\u003ccode\u003e@​ProjectMutilation\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/pull/180\"\u003eklauspost/cpuid#180\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/klauspost/cpuid/compare/v2.4.0...v2.4.1\"\u003ehttps://github.com/klauspost/cpuid/compare/v2.4.0...v2.4.1\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/klauspost/cpuid/commit/8ce0278afc65fd3fd8a19e73c582a5dcd07c7d58\"\u003e\u003ccode\u003e8ce0278\u003c/code\u003e\u003c/a\u003e\nfix: assign unified L1 cache size to L1D (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/issues/180\"\u003e#180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/cpuid/commit/10231090e5b59ff4ea6cf163f9b8b8b411b46a7c\"\u003e\u003ccode\u003e1023109\u003c/code\u003e\u003c/a\u003e\nAdd amd64 CPU topology tree enumeration (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/issues/179\"\u003e#179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/cpuid/commit/4e17f594cf93028625810b6faf32e0446a2c2081\"\u003e\u003ccode\u003e4e17f59\u003c/code\u003e\u003c/a\u003e\nfix: update riscv vendor ids (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/cpuid/issues/177\"\u003e#177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/klauspost/cpuid/compare/v2.4.0...v2.4.1\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "db7566c7dddea78445befca296dd83dda0e4b77f",
      "tree": "6cc19faf0178d28081e45dd2c9efb06b90694360",
      "parents": [
        "e698a38807faa54e65b6fe8618968abcac4aedda"
      ],
      "author": {
        "name": "Samuele Resca",
        "email": "samuele.resca@gmail.com",
        "time": "Mon Oct 19 22:12:00 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:12:00 2026 -0400"
      },
      "message": "fix(arrow/compute): respect GOMAXPROCS for default NumParallel (#1384)\n\n### Rationale for this change\n\nSince Go 1.25+, `runtime.GOMAXPROCS(0)` is cgroup-aware. See [Release\nnotes](https://go.dev/doc/go1.25#runtime).\n`runtime.NumCPU()` reflects the number of CPUs on the host without\ntaking into account cgroup limits.\n\nThe issue has an impact in any containerised environment (e.g., k8s)\nwhen setting limits.\n\n### What changes are included in this PR?\n\nSwitching from `NumParallel \u003d runtime.NumCPU()` to `NumParallel \u003d\nruntime.GOMAXPROCS(0)`\n\n### Are these changes tested?\n\nTested manually using:\n```go\npackage compute_test\n\nimport (\n\t\"runtime\"\n\t\"testing\"\n\n\t\"github.com/apache/arrow-go/v18/arrow/compute\"\n)\n\nfunc TestCgroupDemo(t *testing.T) {\n\tt.Logf(\"NumCPU\u003d%d GOMAXPROCS\u003d%d DefaultExecCtx.NumParallel\u003d%d\",\n\t\truntime.NumCPU(), runtime.GOMAXPROCS(0), compute.DefaultExecCtx().NumParallel)\n}\n```\n\nand running with and without the change:\n```bash\ngo test -c -o /tmp/c.test ./arrow/compute                                       \nsystemd-run --user --scope -q -p CPUQuota\u003d200% /tmp/c.test -test.run CgroupDemo -test.v\n```\n\n\n### Are there any user-facing changes?\n\nYes, a small behavioural change to the default:\n- When GOMAXPROCS is lower than the CPU count, whether set by the\nenvironment variable, set by a cgroup limit on Go 1.25 or later, or set\nin code before package init, the default `NumParallel` is now lower than\nbefore.\n- The deault is read once at package init. A later call to\n`runtime.GOMAXPROCS(n)` won\u0027t change it.\n- Callers can still override it with `SetExecCtx` or\n`ExecCtx.NumParallel`.\n- There are no API or signature changes."
    },
    {
      "commit": "e698a38807faa54e65b6fe8618968abcac4aedda",
      "tree": "6eead43a787e75ef82aec7ccc868f7e12948e823",
      "parents": [
        "432789a56b60b96bb027d9c0bacb4e397200ba88"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 19 16:58:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:58:41 2026 -0400"
      },
      "message": "chore: Bump github.com/klauspost/compress from 1.20.1 to 1.20.3 (#1386)\n\nBumps\n[github.com/klauspost/compress](https://github.com/klauspost/compress)\nfrom 1.20.1 to 1.20.3.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/klauspost/compress/releases\"\u003egithub.com/klauspost/compress\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.20.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ezstd: two-pass decode with match-source prefetch on arm64 (largest\nwin decoding SpeedBestCompression-class data) by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1212\"\u003eklauspost/compress#1212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: speed up better encoder hashing, primes in registers on arm64\nby \u003ca href\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1230\"\u003eklauspost/compress#1230\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: reuse dictionary sequence tables in the encoder by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1233\"\u003eklauspost/compress#1233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: close most of the decode gap to libzstd on real corpora by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1232\"\u003eklauspost/compress#1232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ehuff0: align the decode inner loops to 64 bytes by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1236\"\u003eklauspost/compress#1236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: keep default-encoder hash primes in registers on arm64 by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1241\"\u003eklauspost/compress#1241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: align the sequence decode and execute loops to 64 bytes by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1240\"\u003eklauspost/compress#1240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd, huff0: cheaper per-block table setup by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1234\"\u003eklauspost/compress#1234\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd, s2, flate: smoke-test Silesia in CI, add real-corpus\nbenchmarks by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1237\"\u003eklauspost/compress#1237\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezip: reject entries named \u0026quot;.\u0026quot; in ReadDir to stop infinite\nfs.WalkDir by \u003ca\nhref\u003d\"https://github.com/Raghuvardhan-Reddy78\"\u003e\u003ccode\u003e@​Raghuvardhan-Reddy78\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1249\"\u003eklauspost/compress#1249\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: decode at full speed into exact-size destinations by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1246\"\u003eklauspost/compress#1246\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003es2: Reject short index chunk in RemoveIndexHeaders by \u003ca\nhref\u003d\"https://github.com/Raghuvardhan-Reddy78\"\u003e\u003ccode\u003e@​Raghuvardhan-Reddy78\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1254\"\u003eklauspost/compress#1254\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd, huff0: keep the encoder bit writers in registers by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1245\"\u003eklauspost/compress#1245\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ehuff0: reuse Scratch across inputs in the fuzzers by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1257\"\u003eklauspost/compress#1257\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Raghuvardhan-Reddy78\"\u003e\u003ccode\u003e@​Raghuvardhan-Reddy78\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1235\"\u003eklauspost/compress#1235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SulimanAbdulrazzaq\"\u003e\u003ccode\u003e@​SulimanAbdulrazzaq\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1255\"\u003eklauspost/compress#1255\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/klauspost/compress/compare/v1.20.1...v1.20.3\"\u003ehttps://github.com/klauspost/compress/compare/v1.20.1...v1.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.20.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ezstd: Fix DecodeAll crash on specially crafted input. \u003ca\nhref\u003d\"https://github.com/klauspost/compress/security/advisories/GHSA-fpmh-frq8-7rj8\"\u003eGHSA-fpmh-frq8-7rj8\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003es2: fix LZ4 block conversion writing past dst by \u003ca\nhref\u003d\"https://github.com/klauspost\"\u003e\u003ccode\u003e@​klauspost\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1244\"\u003eklauspost/compress#1244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edict: Stricter input validation by \u003ca\nhref\u003d\"https://github.com/klauspost\"\u003e\u003ccode\u003e@​klauspost\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1250\"\u003eklauspost/compress#1250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd: reject snappy copy shorter than minimum match by \u003ca\nhref\u003d\"https://github.com/Raghuvardhan-Reddy78\"\u003e\u003ccode\u003e@​Raghuvardhan-Reddy78\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1235\"\u003eklauspost/compress#1235\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/klauspost/compress/compare/v1.20.1...v1.20.2\"\u003ehttps://github.com/klauspost/compress/compare/v1.20.1...v1.20.2\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/klauspost/compress/commit/b946d41b75cee10ea255ced85179e5224748a023\"\u003e\u003ccode\u003eb946d41\u003c/code\u003e\u003c/a\u003e\nRevert \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1255\"\u003e#1255\u003c/a\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1261\"\u003e#1261\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/748550b77336a1720b51f574d344ab98422c5e2a\"\u003e\u003ccode\u003e748550b\u003c/code\u003e\u003c/a\u003e\nMerge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/dd54d8695696369d9504c9661f3e476a8a69a84a\"\u003e\u003ccode\u003edd54d86\u003c/code\u003e\u003c/a\u003e\nhuff0: reuse Scratch across inputs in the fuzzers (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1257\"\u003e#1257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/d189b4c2eb01cb5bd3d7c4a4b7e8ac9b02e88281\"\u003e\u003ccode\u003ed189b4c\u003c/code\u003e\u003c/a\u003e\ngzhttp: do not compress 206 responses without Content-Range, read\nAccept-Enco...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/6b9199594fc567d83deacdcea4d0130df249109a\"\u003e\u003ccode\u003e6b91995\u003c/code\u003e\u003c/a\u003e\nzstd, huff0: keep the encoder bit writers in registers (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1245\"\u003e#1245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/402c3a567166a64c1af49735f7f5f40178e48ebd\"\u003e\u003ccode\u003e402c3a5\u003c/code\u003e\u003c/a\u003e\ns2: Reject short index chunk in RemoveIndexHeaders (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1254\"\u003e#1254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/29f5f81f681bb2af88ca81956346288d677a648e\"\u003e\u003ccode\u003e29f5f81\u003c/code\u003e\u003c/a\u003e\nbuild(deps): bump the github-actions group with 4 updates (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1252\"\u003e#1252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/9b8ba6149408b157131b52e424ef97470ced32f7\"\u003e\u003ccode\u003e9b8ba61\u003c/code\u003e\u003c/a\u003e\ndict: Stricter input validation (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1250\"\u003e#1250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/da4df9cb2b3ca4fe6b813acd710711fd7b5c0dbc\"\u003e\u003ccode\u003eda4df9c\u003c/code\u003e\u003c/a\u003e\nzstd: decode at full speed into exact-size destinations (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1246\"\u003e#1246\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/1971eecb678dfb1ff77c4e5b55787dbc57e9edda\"\u003e\u003ccode\u003e1971eec\u003c/code\u003e\u003c/a\u003e\nreject zip entries named \u0026quot;.\u0026quot; in ReadDir (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1249\"\u003e#1249\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/klauspost/compress/compare/v1.20.1...v1.20.3\"\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.com/klauspost/compress\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.20.1\u0026new-version\u003d1.20.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "432789a56b60b96bb027d9c0bacb4e397200ba88",
      "tree": "b26b2993f3b43bf547e8c74c948e6340b05e25b0",
      "parents": [
        "f38d8f318e5c0dc086c4673e0aa7c932a427b8e1"
      ],
      "author": {
        "name": "Stochastic",
        "email": "138764723+Asthenia0412@users.noreply.github.com",
        "time": "Tue Oct 20 04:34:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:34:55 2026 -0400"
      },
      "message": "feat(arrow/ipc): add WithZstdLevel option for IPC writer (#1376)\n\n## Background\n\n`ipc.WithZstd()` turns on ZSTD compression for IPC writers but gives\ncallers no way to choose the level. `getCompressor` always builds the\nencoder with `zstd.NewWriter(nil)`, defaulting to `SpeedDefault` (≈ zstd\nlevel 3).\n\nFor producers streaming large IPC batches over the same network as the\nconsumer, compression is a noticeable share of producer CPU. Since\ndecompression speed barely depends on level, level 1 (`SpeedFastest`)\ncuts producer CPU with almost no reader impact — today the only way to\nget there is to patch arrow-go.\n\n## What changed\n\n- Added `WithZstdLevel(level int) Option` — callers can set zstd\ncompression level (1–22).\n- Extended `config`, `Writer`, `FileWriter`, and `recordEncoder` with a\nnew `zstdLevel` field.\n- Updated `getCompressor(codec, zstdLevel)` to use\n`zstd.WithEncoderLevel(zstd.EncoderLevelFromZstd(level))` when\n`zstdLevel \u003e 0`, else falls back to the previous default.\n\n## Backwards compatibility\n\nPurely additive. Callers using `WithZstd()` without `WithZstdLevel` get\nthe exact same default behaviour as before.\n\n## Testing\n\n- `go build ./arrow/ipc/...` ✅\n- `go test -c ./arrow/ipc/...` ✅\n- `go test ./arrow/ipc/... -count\u003d1` ✅ (all existing tests pass)\n\n## Alignment with C++\n\nThe C++ IPC implementation already lets callers set the ZSTD compression\nlevel via `IpcWriteOptions::codec` built from\n`util::Codec::Create(Compression::ZSTD, level)`. This change brings Go\nin line with C++.\n\nResolves #1368\n\nSigned-off-by: yancy \u003cyancy@users.noreply.github.com\u003e\n\n---------\n\nSigned-off-by: Apache Arrow Go Developer \u003carrow-go-dev@apache.org\u003e\nSigned-off-by: Asthenia0412 \u003cAsthenia0412@users.noreply.github.com\u003e\nCo-authored-by: yancy \u003cyancy@users.noreply.github.com\u003e\nCo-authored-by: Apache Arrow Go Developer \u003carrow-go-dev@apache.org\u003e\nCo-authored-by: Asthenia0412 \u003cAsthenia0412@users.noreply.github.com\u003e"
    },
    {
      "commit": "f38d8f318e5c0dc086c4673e0aa7c932a427b8e1",
      "tree": "93bcd15d5d9d229f2e91bc89e7cf03617ca9cd3e",
      "parents": [
        "5c175a9a91ee16489849dcab4687de7a27724dac"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Mon Oct 19 23:56:48 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:56:48 2026 -0400"
      },
      "message": "test(arrow/flight/flightsql): add client tests for Substrait prepared statements (#1383)\n\n### Rationale for this change\n\n#732 added server-side coverage for `CreatePreparedSubstraitPlan`, but\nthe review on that PR noted that the client path\n(`Client.PrepareSubstrait` and `Txn.PrepareSubstrait`) had no dedicated\ntests. `FlightSqlClientSuite` only exercised SQL prepared statements, so\na regression in how the Substrait action is built or how its result is\nparsed would go unnoticed.\n\n### What changes are included in this PR?\n\nFour new cases in `FlightSqlClientSuite` in\n`arrow/flight/flightsql/client_test.go`, using the same mocked\n`DoAction` stream pattern as the existing `TestPreparedStatement*`\ntests:\n\n- `TestPrepareSubstrait`: the `CreatePreparedSubstraitPlan` action\ncarries the plan bytes and Substrait version; the returned handle,\ndataset schema and parameter schema are parsed; `IsUpdate` reports no\nhint when `is_update` is absent; the statement executes through the\nshared `CommandPreparedStatementQuery` path and closes cleanly.\n- `TestPrepareSubstraitWithIsUpdateFalse` and\n`TestPrepareSubstraitWithIsUpdateTrue`: the `is_update` hint survives\nthe round trip for both values, mirroring the server-side\n`TestExecutePreparedSubstrait*` cases.\n- `TestTxnPrepareSubstrait`: `Txn.PrepareSubstrait` sends the\ntransaction ID from `BeginTransaction` together with the plan.\n\nA small helper, `mockCreatePreparedSubstraitPlan`, registers the create\nand close expectations so the four cases stay short. Query and update\nexecution are not duplicated here, as noted in the issue, since\nSubstrait and SQL prepared statements share the same execution paths\nafter creation.\n\n### Are these changes tested?\n\nYes, this PR only adds tests.\n\n- `go test ./arrow/flight/flightsql/... -run TestFlightSqlClient`: ok\n(29 subtests, 4 new)\n- `go vet ./arrow/flight/flightsql/` and `gofmt -l\narrow/flight/flightsql`: clean\n\n### Are there any user-facing changes?\n\nNo.\n\nCloses #1267\n\n### AI/LLM disclosure\n\n- AI coding tools (Claude Code) were used to write these tests and this\ndescription.\n- The tests were reviewed and the commands above were run locally before\nsubmitting."
    },
    {
      "commit": "5c175a9a91ee16489849dcab4687de7a27724dac",
      "tree": "449b5a6535f16f67ce0faa0229a579cc6d1822b2",
      "parents": [
        "747e87e83c44579837d2cd6f9143bd97b51591e0"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Oct 19 19:15:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 18:15:18 2026 +0100"
      },
      "message": "perf(compute): vectorize mixed 8-bit filters (#1350)\n\n**What**\n- Add AVX2 and NEON fast paths for Int8 and Uint8 filters.\n\n**Why**\n- Reduce per-value work for large mixed masks.\n\n**Implementation**\n- Keep the existing path for nulls, short inputs, unaligned bitmaps, and\nuniform masks.\n- Add offset and bitmap edge cases plus 1K/64K/1M benchmarks.\n- On an M1 Pro, 1M mixed masks are 2.7–3.6x faster; alternating masks\nare 22–24x faster.\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "747e87e83c44579837d2cd6f9143bd97b51591e0",
      "tree": "d2b52a5f2fe9d69c5ce7db6dd6ca2a8559fe1fbf",
      "parents": [
        "a06e17a52f7fe8207c54589efa0269977437c986"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Oct 19 18:18:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:18:43 2026 +0100"
      },
      "message": "perf(compute): add AVX2 take-index compaction (#1348)\n\n### What\n- Add AVX2 compaction for fragmented uint32 take indices on amd64.\n\n### Why\n- Fragmented filters make scalar set-bit run expansion expensive.\n\n### Implementation\n- Reuse the uint32 shuffle tables. Use AVX2 for non-null, byte-aligned\nfilters that pass the 256-byte fragmentation sample, and keep the scalar\nand NEON fallbacks.\n- Cover tails, offsets, nullable filters, and fallback cases. Benchmark\nall/none, run, alternating, short-run, and random 25/50/75% masks. The\n1K case is a fallback control because it uses uint16 indices.\n- Local compaction-only medians on AMD EPYC 9V74 (64K / 1M): alternating\n3.89x / 4.01x; short runs 1.64x / 1.64x; random 25% 2.28x / 1.47x, 50%\n2.65x / 4.50x, and 75% 2.67x / 4.00x; long runs 0.99x / 1.00x. These are\nkernel-only results, not full `BenchmarkGetTakeIndices` results.\n\n---------\n\nCo-authored-by: Matt Topol \u003czotthewizard@gmail.com\u003e"
    },
    {
      "commit": "a06e17a52f7fe8207c54589efa0269977437c986",
      "tree": "0d403d704f1ae7dd20503acef7f6a2cfb345738c",
      "parents": [
        "70fe274308deef403609ece0250d25787ee9b5d9"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Oct 19 18:17:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 17:17:15 2026 +0100"
      },
      "message": "perf(compute): reuse amd64 SIMD comparisons for numeric-to-bool casts (#1351)\n\n**What**\n- Use amd64 AVX2 and SSE4.2 comparisons for numeric-to-bool casts.\n\n**Why**\n- Compare values in batches on large arrays.\n\n**Implementation**\n- Keep scalar handling for short tails and unsupported builds.\n- Benchmark six types with valid and null masks at 64K and 1M rows.\n- Cover bitmap boundaries, slices, NaN, and signed zero."
    },
    {
      "commit": "70fe274308deef403609ece0250d25787ee9b5d9",
      "tree": "2fad3f20b3616d53d7e65376f6d16006abf487b6",
      "parents": [
        "a6e44ad7a6aaa4c02a7d277032af8eebd5cc2508"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Oct 19 17:14:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:14:48 2026 +0100"
      },
      "message": "perf(arrow/array): compare optional validity bitmaps in bulk (#1327)\n\n### What\n\n- Speed up `Equal` and `ApproxEqual` when one array has no validity\nbitmap.\n\n### Why\n\n- Comparing an absent bitmap with a materialized bitmap currently checks\nvalidity one row at a time.\n\n### Implementation\n\n- Use `BitmapAllSet` on the present bitmap, scanning aligned words and\nrespecting its slice offset.\n- Return as soon as an invalid bit is found instead of counting the full\nrange.\n- Preserve empty-buffer handling and bitmap checks when declared null\ncounts are inconsistent.\n\n### Benchmark\n\nCommand: `go test -run \u0027^$\u0027 -bench \u0027^BenchmarkArrayEqualValidityBitmap$\u0027\n-benchmem ./arrow/array`\n\nApple M1 Pro, Go 1.26.3, `GOMAXPROCS\u003d1`. Medians of six alternating\nbefore/after runs, 300 ms per case. Each case compares 1,048,576 values\nwith one absent bitmap and one materialized bitmap. Binary/string values\nare 8 bytes each.\n\n| Case | Before | After | Speedup |\n| --- | ---: | ---: | ---: |\n| Boolean, Equal | 8,806.5 µs | 21.3 µs | 414.4x |\n| Boolean, ApproxEqual | 4,643.2 µs | 20.9 µs | 221.9x |\n| Int8, Equal | 5,868.4 µs | 58.9 µs | 99.6x |\n| Int64, Equal | 7,586.4 µs | 494.7 µs | 15.3x |\n| Binary, Equal | 11,979.7 µs | 1,658.2 µs | 7.2x |\n| String, Equal | 8,959.1 µs | 1,895.6 µs | 4.7x |\n| String, ApproxEqual | 19,381.8 µs | 11,087.5 µs | 1.7x |\n\nNo new allocations. The benchmark also covers 64-value arrays, unaligned\nslices, and controls with both bitmaps present or both absent.\n\n### Compatibility\n\n- No data-format changes.\n- Adds one reusable bitmap utility; null semantics and slice offsets\nremain covered by the regression tests.\n\n### Tests\n\n- `go test ./arrow/...`\n- `go test -race ./arrow/array`\n- `go test -tags noasm ./arrow/array`\n- `go vet -composites\u003dfalse ./arrow/array`"
    },
    {
      "commit": "a6e44ad7a6aaa4c02a7d277032af8eebd5cc2508",
      "tree": "94504f431e347335c9c932f560606dd7df8e1135",
      "parents": [
        "f6862235eb83758a349b2383561165118791da9a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 09:55:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 09:55:00 2026 -0400"
      },
      "message": "chore: Bump github.com/pterm/pterm from 0.12.83 to 0.12.84 (#1371)\n\nBumps [github.com/pterm/pterm](https://github.com/pterm/pterm) from\n0.12.83 to 0.12.84.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pterm/pterm/releases\"\u003egithub.com/pterm/pterm\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.12.84\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eExciting New Features 🎉\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeat(logger): preserve slog argument order and add SortArguments\noption by \u003ca\nhref\u003d\"https://github.com/ChrisJr404\"\u003e\u003ccode\u003e@​ChrisJr404\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/808\"\u003epterm/pterm#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(table): add WithColumnMinWidths to set minimum column widths by\n\u003ca href\u003d\"https://github.com/ChrisJr404\"\u003e\u003ccode\u003e@​ChrisJr404\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/809\"\u003epterm/pterm#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add style to interactive select by \u003ca\nhref\u003d\"https://github.com/afbjorklund\"\u003e\u003ccode\u003e@​afbjorklund\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/796\"\u003epterm/pterm#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: make input prompt customizable by \u003ca\nhref\u003d\"https://github.com/Urban20\"\u003e\u003ccode\u003e@​Urban20\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/810\"\u003epterm/pterm#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(table): support custom box printer configuration for table\nrendering by \u003ca\nhref\u003d\"https://github.com/AdamMagued\"\u003e\u003ccode\u003e@​AdamMagued\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/814\"\u003epterm/pterm#814\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: use cancellation signal in InteractiveContinuePrinter for\nproper Ctrl+C cleanup by \u003ca\nhref\u003d\"https://github.com/Yanhu007\"\u003e\u003ccode\u003e@​Yanhu007\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/775\"\u003epterm/pterm#775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: update vertical line character in BoxPrinter by \u003ca\nhref\u003d\"https://github.com/MarvinJWendt\"\u003e\u003ccode\u003e@​MarvinJWendt\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/780\"\u003epterm/pterm#780\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(prefix): calculate multi-line indent using visual width for wide\ncharacters by \u003ca\nhref\u003d\"https://github.com/AdamMagued\"\u003e\u003ccode\u003e@​AdamMagued\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/813\"\u003epterm/pterm#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(area): wrap long lines before updating by \u003ca\nhref\u003d\"https://github.com/linhdmn\"\u003e\u003ccode\u003e@​linhdmn\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/811\"\u003epterm/pterm#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: respect fuzzy filter when selecting/deselecting all in\nInteractiveMultiselect by \u003ca\nhref\u003d\"https://github.com/nghiack7\"\u003e\u003ccode\u003e@​nghiack7\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/781\"\u003epterm/pterm#781\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: multi-line text input with a default value does not return when\nEnter is pressed by \u003ca\nhref\u003d\"https://github.com/Homoarea\"\u003e\u003ccode\u003e@​Homoarea\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/804\"\u003epterm/pterm#804\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eci: consolidate CI workflows into go.yml and enhance testing by \u003ca\nhref\u003d\"https://github.com/MarvinJWendt\"\u003e\u003ccode\u003e@​MarvinJWendt\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/776\"\u003epterm/pterm#776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Yanhu007\"\u003e\u003ccode\u003e@​Yanhu007\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/775\"\u003epterm/pterm#775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/AdamMagued\"\u003e\u003ccode\u003e@​AdamMagued\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/813\"\u003epterm/pterm#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/linhdmn\"\u003e\u003ccode\u003e@​linhdmn\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/811\"\u003epterm/pterm#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/nghiack7\"\u003e\u003ccode\u003e@​nghiack7\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/781\"\u003epterm/pterm#781\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Homoarea\"\u003e\u003ccode\u003e@​Homoarea\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/804\"\u003epterm/pterm#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/ChrisJr404\"\u003e\u003ccode\u003e@​ChrisJr404\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/808\"\u003epterm/pterm#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/afbjorklund\"\u003e\u003ccode\u003e@​afbjorklund\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/796\"\u003epterm/pterm#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Urban20\"\u003e\u003ccode\u003e@​Urban20\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/pull/810\"\u003epterm/pterm#810\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/pterm/pterm/compare/v0.12.83...v0.12.84\"\u003ehttps://github.com/pterm/pterm/compare/v0.12.83...v0.12.84\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/pterm/pterm/commit/4262f32521a2c49c08df40568abaff3ae7cf5f85\"\u003e\u003ccode\u003e4262f32\u003c/code\u003e\u003c/a\u003e\ndocs: add logger sort-arguments example\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/346010e36206c840114de6bb45e491049acafd25\"\u003e\u003ccode\u003e346010e\u003c/code\u003e\u003c/a\u003e\nfeat(table): support custom box printer configuration for table\nrendering (\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/814\"\u003e#814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/af6dc2377b0c2b78f356cb9b6e7dab8f1bb8109c\"\u003e\u003ccode\u003eaf6dc23\u003c/code\u003e\u003c/a\u003e\nfeat: make input prompt customizable (\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/810\"\u003e#810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/36d233cdae0d1ae059d77ce9f23ecdbac073203c\"\u003e\u003ccode\u003e36d233c\u003c/code\u003e\u003c/a\u003e\nfeat: add style to interactive select (\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/796\"\u003e#796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/1ee94dca3964050042954e23d683b48c7287a430\"\u003e\u003ccode\u003e1ee94dc\u003c/code\u003e\u003c/a\u003e\nfeat(table): add WithColumnMinWidths to set minimum column widths (\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/809\"\u003e#809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/0aebb19dd36565ef70ebd8af503b9c6cf138838d\"\u003e\u003ccode\u003e0aebb19\u003c/code\u003e\u003c/a\u003e\nfeat(logger): preserve slog argument order and add SortArguments option\n(\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/808\"\u003e#808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/313c63c213c05f21fc273de741ec382cc8724a2c\"\u003e\u003ccode\u003e313c63c\u003c/code\u003e\u003c/a\u003e\nfix: multi-line text input with a default value does not return when\nEnter is...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/0c4e3a9fe4e863994415f82d86a308c55e182a7f\"\u003e\u003ccode\u003e0c4e3a9\u003c/code\u003e\u003c/a\u003e\nfix: respect fuzzy filter when selecting/deselecting all in\nInteractiveMultis...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/bd0eeee7e358421013d97d72685fbba73c029d0f\"\u003e\u003ccode\u003ebd0eeee\u003c/code\u003e\u003c/a\u003e\nfix(area): wrap long lines before updating (\u003ca\nhref\u003d\"https://redirect.github.com/pterm/pterm/issues/811\"\u003e#811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pterm/pterm/commit/e2893b9f0ee9473643eaf3da2d079355de9d5de3\"\u003e\u003ccode\u003ee2893b9\u003c/code\u003e\u003c/a\u003e\nfix(prefix): calculate multi-line indent using visual width for wide\ncharacte...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pterm/pterm/compare/v0.12.83...v0.12.84\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f6862235eb83758a349b2383561165118791da9a",
      "tree": "4eb4173c7ee985e20ffbb600c5b477ce74f7e1f1",
      "parents": [
        "82b5da48d561abe878094c8c64eb9cca74199806"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 09:18:30 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 09:18:30 2026 -0400"
      },
      "message": "chore: Bump github.com/pierrec/lz4/v4 from 4.1.32 to 4.1.33 (#1370)\n\nBumps [github.com/pierrec/lz4/v4](https://github.com/pierrec/lz4) from\n4.1.32 to 4.1.33.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/b3ae24d689a8c0020f1567fc424c53bde9dfc4f7\"\u003e\u003ccode\u003eb3ae24d\u003c/code\u003e\u003c/a\u003e\nlz4: document OnBlockDone concurrency\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/d9853db5175e7be1105f2b75f5d6f905649c7825\"\u003e\u003ccode\u003ed9853db\u003c/code\u003e\u003c/a\u003e\nxxh32: fix a stale BlockSize comment\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/4972926b7d018145fb5c954294478c3adc1e7ac1\"\u003e\u003ccode\u003e4972926\u003c/code\u003e\u003c/a\u003e\nlz4stream: stop shadowing the data channel in initR\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/637492827d81560d9a806344b3bc0c0e563351ba\"\u003e\u003ccode\u003e6374928\u003c/code\u003e\u003c/a\u003e\nlz4: drop an else after return in CompressingReader\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/6b13fb9e541ddb0951a820d5c77679c4d1e22ae8\"\u003e\u003ccode\u003e6b13fb9\u003c/code\u003e\u003c/a\u003e\nlz4: clean up comments\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/0a60c23124f73687e88390812500703b7d7a6868\"\u003e\u003ccode\u003e0a60c23\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/277\"\u003e#277\u003c/a\u003e from\nhoneycombio/lizf.testdata-licensing\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/3b766df105c4058285f8d438b03aa82eac0fd28e\"\u003e\u003ccode\u003e3b766df\u003c/code\u003e\u003c/a\u003e\ntestdata: record where each file comes from and its licence\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/d9034fec5bcccc573436692af42de9b8b2e8c960\"\u003e\u003ccode\u003ed9034fe\u003c/code\u003e\u003c/a\u003e\ntestdata: replace the bzImage sample with a C-made legacy frame of\ntext\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/2baa0ce64c8d06a2ec19a0df56bbb58b734a952e\"\u003e\u003ccode\u003e2baa0ce\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/276\"\u003e#276\u003c/a\u003e from\nhoneycombio/lizf.legacy-writer-bound\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/b9c03e86b4a8ba5fc8998036c7a9569a9b302961\"\u003e\u003ccode\u003eb9c03e8\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/275\"\u003e#275\u003c/a\u003e from\nhoneycombio/lizf.lz4c-install\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pierrec/lz4/compare/v4.1.32...v4.1.33\"\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.com/pierrec/lz4/v4\u0026package-manager\u003dgo_modules\u0026previous-version\u003d4.1.32\u0026new-version\u003d4.1.33)](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": "82b5da48d561abe878094c8c64eb9cca74199806",
      "tree": "40b84eda22e0aa6557d511c4ca38c1dacbe32006",
      "parents": [
        "14e5980207eb664e24d7b731b33aa10ab5ce7bc4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 09:18:18 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 09:18:18 2026 -0400"
      },
      "message": "chore: Bump golang.org/x/sync from 0.23.0 to 0.24.0 (#1372)\n\nBumps [golang.org/x/sync](https://github.com/golang/sync) from 0.23.0 to\n0.24.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sync/commit/36f2d70ecde9857dc4e363242a1369c7645d6770\"\u003e\u003ccode\u003e36f2d70\u003c/code\u003e\u003c/a\u003e\nerrgroup: modernize the usage of closures in goroutines\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/golang/sync/compare/v0.23.0...v0.24.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "14e5980207eb664e24d7b731b33aa10ab5ce7bc4",
      "tree": "59e5602b05da398fcb446f07df2895cf9bf50f68",
      "parents": [
        "19b3719d01a78f3ae8d110bb02a6db6d082eda20"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:44:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:44:10 2026 +0100"
      },
      "message": "chore: Bump golang.org/x/sys from 0.48.0 to 0.49.0 (#1373)\n\nBumps [golang.org/x/sys](https://github.com/golang/sys) from 0.48.0 to\n0.49.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/b6b8557e8e2974925aec7a136ba0e323eedc5f43\"\u003e\u003ccode\u003eb6b8557\u003c/code\u003e\u003c/a\u003e\nunix/linux: unify ppc64x syscall wrappers\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/aab6988eff65f762ecf6b757c3571b8a45f40618\"\u003e\u003ccode\u003eaab6988\u003c/code\u003e\u003c/a\u003e\nunix: add PrctlArg5Ptr\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/cdfd9840b35fca673dd1b27ef69a13b9f5be0d04\"\u003e\u003ccode\u003ecdfd984\u003c/code\u003e\u003c/a\u003e\nunix: pass fcntl data as unsafe.Pointer in FcntlF{lock,store} on\ndarwin\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/782b836d3ae6ebda757c7b3800818e737c623614\"\u003e\u003ccode\u003e782b836\u003c/code\u003e\u003c/a\u003e\nunix/linux: don\u0027t warn about closed stderr from child process\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/61592fb02e581c922feaf3d9ada8547488b70964\"\u003e\u003ccode\u003e61592fb\u003c/code\u003e\u003c/a\u003e\nunix: return syscall error in *listxattrNS on BSD\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/c136fdad42c8b16318f29da74e73194c779ba862\"\u003e\u003ccode\u003ec136fda\u003c/code\u003e\u003c/a\u003e\nunix/linux/Dockerfile: update to Go 1.26.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/f1d0d79251083d5d223af16c0d8c5207a355c627\"\u003e\u003ccode\u003ef1d0d79\u003c/code\u003e\u003c/a\u003e\nunix: pass xattr data as unsafe.Pointer in BSD xattr syscalls\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/67f850b71cbdd0a9bb58e2c45cb487ab5a72f83f\"\u003e\u003ccode\u003e67f850b\u003c/code\u003e\u003c/a\u003e\nunix: update linux to v7.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/eb1f6591861ee38df32e043d27508fd1effa4854\"\u003e\u003ccode\u003eeb1f659\u003c/code\u003e\u003c/a\u003e\nunix: add O_EXEC and O_SEARCH on darwin\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/51bc73186f49d1a8f85b1fa28d0c14585ac812cd\"\u003e\u003ccode\u003e51bc731\u003c/code\u003e\u003c/a\u003e\nunix: add Mmsghdr for linux\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/golang/sys/compare/v0.48.0...v0.49.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\u003dgolang.org/x/sys\u0026package-manager\u003dgo_modules\u0026previous-version\u003d0.48.0\u0026new-version\u003d0.49.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "19b3719d01a78f3ae8d110bb02a6db6d082eda20",
      "tree": "1908523a9b33d0e6e61c105de49a4d374a12d49f",
      "parents": [
        "05b0491ab42da7d8959ee19e6877db886f7f4b65"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:43:59 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:43:59 2026 +0100"
      },
      "message": "chore: Bump actions/upload-artifact from 7.0.1 to 7.0.2 (#1374)\n\nBumps\n[actions/upload-artifact](https://github.com/actions/upload-artifact)\nfrom 7.0.1 to 7.0.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/upload-artifact/releases\"\u003eactions/upload-artifact\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImproves artifact download retries when the service returns HTTP 429\n(rate limiting), including honoring valid Retry-After headers.\u003c/li\u003e\n\u003cli\u003eUpdates \u003ccode\u003e@​actions/artifact\u003c/code\u003e to v6.3.1.\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/tunc-d\"\u003e\u003ccode\u003e@​tunc-d\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/upload-artifact/pull/821\"\u003eactions/upload-artifact#821\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/actions/upload-artifact/compare/v7.0.1...v7.0.2\"\u003ehttps://github.com/actions/upload-artifact/compare/v7.0.1...v7.0.2\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/actions/upload-artifact/commit/cf430e030ddbb5b0abf93d22962f4752f3646cd9\"\u003e\u003ccode\u003ecf430e0\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/upload-artifact/issues/822\"\u003e#822\u003c/a\u003e\nfrom actions/tunc-d-prepare-upload-v7-0-2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/upload-artifact/commit/c2acdedd35a8824a1552c7137f8c18288c3ea469\"\u003e\u003ccode\u003ec2acded\u003c/code\u003e\u003c/a\u003e\nchore: prepare v7.0.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/upload-artifact/commit/4687c1bbaa0a58abb517d90b4bbade6754c80c1a\"\u003e\u003ccode\u003e4687c1b\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/upload-artifact/issues/821\"\u003e#821\u003c/a\u003e\nfrom actions/tunc-d-upload-artifact-package-bump\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/upload-artifact/commit/8cbe1bebdb858105d8fdd88f81404d4de4595719\"\u003e\u003ccode\u003e8cbe1be\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/artifact\u003c/code\u003e to 6.3.1\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/actions/upload-artifact/compare/043fb46d1a93c77aae656e7c1c64a875d1fc6a0a...cf430e030ddbb5b0abf93d22962f4752f3646cd9\"\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\u003dactions/upload-artifact\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d7.0.1\u0026new-version\u003d7.0.2)](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": "05b0491ab42da7d8959ee19e6877db886f7f4b65",
      "tree": "c8f7ee5510365d13ab04a5fcdf74c50d1bb4009c",
      "parents": [
        "85916dd841e44a7c982d73877064a08c518e9379"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 14 10:43:49 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:43:49 2026 +0100"
      },
      "message": "chore: Bump actions/download-artifact from 8.0.1 to 8.0.2 (#1375)\n\nBumps\n[actions/download-artifact](https://github.com/actions/download-artifact)\nfrom 8.0.1 to 8.0.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/download-artifact/releases\"\u003eactions/download-artifact\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the readme by \u003ca\nhref\u003d\"https://github.com/danwkennedy\"\u003e\u003ccode\u003e@​danwkennedy\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/pull/473\"\u003eactions/download-artifact#473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproves artifact download retries when the service returns HTTP 429\n(rate limiting), including honoring valid Retry-After headers.\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003e@​actions/artifact\u003c/code\u003e to 6.3.1 by \u003ca\nhref\u003d\"https://github.com/tunc-d\"\u003e\u003ccode\u003e@​tunc-d\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/pull/492\"\u003eactions/download-artifact#492\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare download-artifact v8.0.2 by \u003ca\nhref\u003d\"https://github.com/tunc-d\"\u003e\u003ccode\u003e@​tunc-d\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/pull/493\"\u003eactions/download-artifact#493\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/tunc-d\"\u003e\u003ccode\u003e@​tunc-d\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/pull/492\"\u003eactions/download-artifact#492\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/actions/download-artifact/compare/v8.0.1...v8.0.2\"\u003ehttps://github.com/actions/download-artifact/compare/v8.0.1...v8.0.2\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/actions/download-artifact/commit/9000827ccba6bdab643e8b6fd33ac0654aef8333\"\u003e\u003ccode\u003e9000827\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/issues/493\"\u003e#493\u003c/a\u003e\nfrom actions/tunc-d-prepare-download-v8-0-2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/download-artifact/commit/e455989ae00f5bdd4054f05d3e972c6bf8a62dc5\"\u003e\u003ccode\u003ee455989\u003c/code\u003e\u003c/a\u003e\nPrepare download-artifact v8.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/download-artifact/commit/a00b90c4a2f01d73a8c89552caabca6ea3b43137\"\u003e\u003ccode\u003ea00b90c\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/issues/492\"\u003e#492\u003c/a\u003e\nfrom actions/tunc-d-download-artifact-package-bump\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/download-artifact/commit/29bb7ce6af5345aeab5bb4774ce7249ee3ccc27f\"\u003e\u003ccode\u003e29bb7ce\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003e@​actions/artifact\u003c/code\u003e to 6.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/download-artifact/commit/484a0b528fb4d7bd804637ccb632e47a0e638317\"\u003e\u003ccode\u003e484a0b5\u003c/code\u003e\u003c/a\u003e\nUpdate the readme (\u003ca\nhref\u003d\"https://redirect.github.com/actions/download-artifact/issues/473\"\u003e#473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/actions/download-artifact/compare/3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c...9000827ccba6bdab643e8b6fd33ac0654aef8333\"\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\u003dactions/download-artifact\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d8.0.1\u0026new-version\u003d8.0.2)](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": "85916dd841e44a7c982d73877064a08c518e9379",
      "tree": "d5327a55514e6530b7ec9c4797d1c018b8167849",
      "parents": [
        "cde116fae951b080e51f2bac4fafef47185a3334"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Tue Oct 13 18:34:03 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:34:03 2026 +0100"
      },
      "message": "fix(arrow/compute): allow casting nullable struct fields to non-nullable when no nulls (#1363)\n\n### Rationale for this change\n\nCasting a struct with a nullable field to a struct type where that field\nis non-nullable always failed with `arrow.ErrType`, even when the field\nheld no nulls. The C++ implementation only rejects the cast when the\nfield actually has nulls (`scalar_cast_nested.cc`).\n\n### What changes are included in this PR?\n\n`CastStruct` no longer rejects nullable to non-nullable fields while\nmatching field names. It checks each selected field\u0027s null count at cast\ntime instead, and returns `arrow.ErrInvalid` with the same message as\nC++ when the field has nulls.\n\n### Are these changes tested?\n\nYes. `TestStructToDifferentNullabilityStruct` now covers a field with no\nnulls (cast succeeds), fields with nulls (`ErrInvalid`), and a slice\nthat skips the null rows (cast succeeds).\n\n- `go test ./arrow/compute/...`: ok\n- `go vet ./arrow/compute/...` and `gofmt -l arrow/compute`: clean\n\n### Are there any user-facing changes?\n\nYes. These casts now succeed when the field has no nulls. When it has\nnulls, the error is now `arrow.ErrInvalid` instead of `arrow.ErrType`,\nmatching C++.\n\nFixes #133\n\n### AI/LLM disclosure\n\n- AI coding tools (Claude Code) were used to write this change, the test\nupdates and this description.\n- The change was reviewed and the commands above were run locally before\nsubmitting."
    },
    {
      "commit": "cde116fae951b080e51f2bac4fafef47185a3334",
      "tree": "1c4cb2bfc87268380e7517e8c55b10bb828c0af3",
      "parents": [
        "9296b3fac5a1daf2ce1f8a124a5227449fc1bdcb"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 13 16:31:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:31:41 2026 +0100"
      },
      "message": "perf(arrow/compute): read flat take values directly (#1360)\n\n### What\n- Faster null-free primitive `take` with random and reverse indices.\n\n### Why\nThe sorted path already reads values directly. Other orders call a\ngetter for every row.\n\nBounds-checked `compute.Take`, int64 values and indices. Apple M1 Pro,\nGo 1.26.3, GOMAXPROCS\u003d1. Medians from 12 x 200ms interleaved samples per\nrevision. Both revisions use the corrected random workload.\n\n| Rows / order | Before | After | Time |\n| --- | ---: | ---: | ---: |\n| 50K / random | 298.2 us | 232.1 us | -22.2% |\n| 50K / reverse | 299.4 us | 211.6 us | -29.3% |\n| 100K / random | 542.8 us | 377.8 us | -30.4% |\n| 100K / reverse | 565.4 us | 399.6 us | -29.3% |\n\nSorted and nullable controls are similar or faster. Allocation counts\nare unchanged.\n\n### Implementation\n- Read the flat value slice directly after the existing null checks.\n- Share the existing unrolled copy loop.\n- Keep reverse indices sequential.\n- Fix the random benchmark to use seeded PCG indices."
    },
    {
      "commit": "9296b3fac5a1daf2ce1f8a124a5227449fc1bdcb",
      "tree": "ed12b27ab51f148392e09dd8c44d344b9de09e0b",
      "parents": [
        "a00312ac02beb07af6e22276b71c91b3f0b89ea2"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 13 16:30:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:30:29 2026 +0100"
      },
      "message": "perf(arrow): reduce metadata sorting overhead (#1361)\n\n**What**\n- Reduce metadata equality overhead for small metadata.\n\n**Why**\n- Small sorts spend time calling the comparator.\n\n**Implementation**\n- Use direct insertion sort for up to 12 pairs.\n- Keep the current sorter for larger metadata.\n- Keep small-sort locals out of the general sorting frame.\n\nGo 1.26.3, Apple M1 Pro, 6 interleaved samples of 100ms. Compared with\n`c1c8ed0a`.\n\n| Case | Base ns/op | PR ns/op | Change |\n| --- | ---: | ---: | ---: |\n| 8 pairs, matching | 123.6 | 112.9 | -8.62% |\n| 8 pairs, reversed | 233.9 | 192.8 | -17.57% |\n| 12 pairs, reversed | 460.5 | 375.1 | -18.53% |\n| 128 pairs, middle swap | 2,794 | 2,823 | ~ |\n| 2,049 pairs, middle swap | 40,600 | 40,680 | ~ |\n\n`~` means no significant change. Allocations are unchanged."
    },
    {
      "commit": "a00312ac02beb07af6e22276b71c91b3f0b89ea2",
      "tree": "979e2e5587209f95685fffd3124cffed52292c3c",
      "parents": [
        "50fb07811d3626f175e66ceba020c775594768b7"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 13 16:28:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:28:11 2026 +0100"
      },
      "message": "perf(parquet): avoid scanning plain byte-array offsets (#1362)\n\n### What\nAvoid scanning PLAIN Arrow byte-array offsets to compute encoded size.\n\n### Why\nThe payload size is the last offset minus the first offset, so the\npre-pass is redundant.\n\n### Implementation\nCompute payload bytes from boundary offsets and add four bytes per\nvalue.\n\n### Benchmark\nAt 65,536 values on AMD EPYC, median time before → after:\n- 0-byte values: 281.0 → 244.4 µs (-13.0%)\n- 4-byte values: 296.8 → 275.2 µs (-7.3%)\n- 16-byte values: 332.8 → 301.5 µs (-9.4%)\n- 64-byte values: 375.5 → 335.2 µs (-10.7%)\n- Allocations: 0 → 0"
    },
    {
      "commit": "50fb07811d3626f175e66ceba020c775594768b7",
      "tree": "ab97a3c78a8b946e45c66927412d07e21f6573bf",
      "parents": [
        "5b7448037c16232df9e58c5e501a65d0c13859c1"
      ],
      "author": {
        "name": "Animesh Kumar",
        "email": "61719828+CaptainAni187@users.noreply.github.com",
        "time": "Tue Oct 13 19:41:54 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:11:54 2026 +0100"
      },
      "message": "fix(parquet/metadata): count non-null values from the validity bitmap in UpdateSpaced (#1367)\n\n### Rationale for this change\n\nFixes #1366. Writing a `list\u003ctimestamp\u003e` column whose only row is a null\nlist with statistics enabled produced `min \u003d MaxInt64` and `max \u003d\nMinInt64` with `HasMinMax() \u003d\u003d true`, so DuckDB failed to read the file.\n\n`UpdateSpaced` computed the non-null count as `len(values) - numNull`.\nFor a nested column the spaced values only cover the leaf slots, but\n`numNull` also counts the null list, so the count was `0 - 1 \u003d -1`. That\nskipped the `notnull \u003d\u003d 0` early return and set min/max from no values.\nThe same miscount also hid real values: a null list next to `[5]` gave\n`1 - 1 \u003d 0`, so the `5` never reached min/max.\n\n### What changes are included in this PR?\n\n`UpdateSpaced` counts the non-null values with `bitutil.CountSetBits`\nover `validBits`, the bitmap it already uses for `getMinMaxSpaced`. The\nchange is in `statistics_types.gen.go.tmpl`, and\n`statistics_types.gen.go` is regenerated with `go generate`.\n\n### Are these changes tested?\n\nYes. `TestWriteArrowNestedNullListStatistics` writes a column with only\na null list and one with a null list followed by `[5]`, on both data\npage versions. It checks the null count, the number of values and that\nmin/max are absent or `5`. All four cases fail on main and pass with the\nfix.\n\n`go test ./parquet/... ./arrow/compute/...` passes with the testing\nsubmodules, and golangci-lint reports no issues.\n\n### Are there any user-facing changes?\n\nNested columns with null lists no longer get invalid min/max statistics,\nand their non-null values are included in min/max."
    },
    {
      "commit": "5b7448037c16232df9e58c5e501a65d0c13859c1",
      "tree": "ab2afab67702e879652034492424084ed7875a8e",
      "parents": [
        "80ce889e01085d6709efae7db51783066a4da4eb"
      ],
      "author": {
        "name": "hp",
        "email": "132459203+hpaliwal8@users.noreply.github.com",
        "time": "Tue Oct 13 10:09:53 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:09:53 2026 +0100"
      },
      "message": "fix(arrow/ipc): open mapped files with dictionary fields (#1365)\n\n### Rationale for this change\n`NewMappedFileReader` panics on dictionary fields because its memo is\nuninitialized. Fixes #1364.\n\n### What changes are included in this PR?\nInitialize the mapped reader\u0027s memo and add a dictionary readback test.\n\n### Are these changes tested?\n`go test ./arrow/ipc -count\u003d1`\n\n### Are there any user-facing changes?\nYes. Mapped file readers can now open and read files with dictionary\nfields."
    },
    {
      "commit": "80ce889e01085d6709efae7db51783066a4da4eb",
      "tree": "4a59fdc5a652c939873d557005812927e3a5a98b",
      "parents": [
        "7090f9eddcd53a4909c401c7e33b6b567fa3f322"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 13 14:22:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 08:22:00 2026 -0400"
      },
      "message": "perf(compute): filter dictionary indices directly (#1352)\n\n**What**\n- Filter dictionary indices with the original mask.\n- Reuse the original dictionary values.\n\n**Why**\n- Skip the temporary take indices and extra dictionary Take dispatch.\n\n**Implementation**\n- Preserve filter null options, sliced offsets, and shared dictionary\ndata.\n- Add selection-pattern benchmarks and null/offset coverage."
    },
    {
      "commit": "7090f9eddcd53a4909c401c7e33b6b567fa3f322",
      "tree": "cb8b33633f4831f2f96ca4c60cfe601e7387c585",
      "parents": [
        "0f4bb4bfbbc7e42a3bb3f4040e7294b77da12ed2"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Tue Oct 13 08:21:42 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 13:21:42 2026 +0100"
      },
      "message": "fix(compute/exec): do not carry a cached null count across ArraySpan.SetSlice (#1306)\n\n### Rationale for this change\n\n`and_kleene` and `or_kleene` return `false` where the answer is null\nwhen `ExecCtx.ChunkSize` is\nbelow the input length (#1305). `ArraySpan.SetSlice` kept the cached\nnull count for the new\nslice when it was `0` or equal to the old length. That is only right\nwhile the count describes the\nwhole span. The executor reuses one span per argument across slices, and\na kernel that calls\n`UpdateNullCount()` on it stores the slice\u0027s count, so the next\n`SetSlice` treats the following\nslice as all valid or all null.\n\n### What changes are included in this PR?\n\n`SetSlice` resets the count to `UnknownNullCount` whenever a validity\nbitmap is present, as the C++\n`ArraySpan::SetSlice` does (`cpp/src/arrow/array/data.h`), and keeps it\nunknown when it was already\nnon-zero without a bitmap. The null type still gets the slice length; a\nspan with no bitmap and a\nzero count keeps zero. Two cases added to `TestArraySpan_SetSlice`, and\na new test that runs both\nKleene kernels at chunk sizes 1, 2, 3, 4 and 8 against the default\nresult.\n\nCost: a slice of an all-valid array with a bitmap now reports an unknown\ncount, so a kernel that\nasks pays one popcount over the slice instead of reading the cache. That\nis the C++ behaviour.\n\n### Are these changes tested?\n\nYes. The new chunk-size test fails on main (four assertions, chunk sizes\n1 and 2 for both kernels)\nand passes with the change; `go test ./arrow/compute/...` passes.\n\n### Are there any user-facing changes?\n\nResults of `and_kleene`/`or_kleene` no longer depend on\n`ExecCtx.ChunkSize`. `ArraySpan.Nulls` after\n`SetSlice` is `UnknownNullCount` in cases where it was previously `0` or\nthe slice length; code that\nread it directly should call `UpdateNullCount()`, which is what the\npackage\u0027s own kernels do.\n\nCloses #1305."
    },
    {
      "commit": "0f4bb4bfbbc7e42a3bb3f4040e7294b77da12ed2",
      "tree": "7643d6292683b7e1457edb71ded13ef489d90fc7",
      "parents": [
        "f2acefa73f7eb63f487f499431184cef5f4f97f0"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Tue Oct 13 13:02:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 08:02:57 2026 -0400"
      },
      "message": "ci: fix MinGW CGO job under Git Bash\u0027s UCRT64 MSYSTEM (#1369)\n\n### Rationale for this change\n\nThe `AMD64 Windows MinGW 64 CGO` job is failing on `main` (run\n38259984920 at 7c13a602). Git Bash on the runner now sets\n`MSYSTEM\u003dUCRT64`, so the `MSYSTEM \u003d MINGW64` checks in\n`ci/scripts/build.sh` and `ci/scripts/test.sh` are skipped and the MSYS2\n`bin` dir is never put on `PATH`. cgo then uses the runner\u0027s\n`C:\\mingw64` GCC 14.2 against the MSYS2 headers in `CGO_CPPFLAGS`, so\n`cgoalloc` fails with `redefinition of \u0027double wcstod(...)\u0027`.\n\n### What changes are included in this PR?\n\nCheck `MINGW_PREFIX` (exported only by the MinGW job) instead of\n`MSYSTEM`, and convert it with `cygpath -u` before adding it to `PATH`.\n\n### Are these changes tested?\n\nBy this PR\u0027s CI run of the MinGW job.\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "f2acefa73f7eb63f487f499431184cef5f4f97f0",
      "tree": "3416a2f3c62ac493eb93092d3d1c6c45885058c1",
      "parents": [
        "7c13a602d47616d45ccbbb3f845f3ca44a5926b6"
      ],
      "author": {
        "name": "Willem Jan",
        "email": "51120533+Willem-J-an@users.noreply.github.com",
        "time": "Tue Oct 13 13:29:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 07:29:21 2026 -0400"
      },
      "message": "fix: expose internal offsets in json/csv readers (#1342)\n\n### Rationale for this change\nWhen decoding non-typesafe formats like CSV and JSON it is possible\ndecoding errors occur somewhere midstream. Without knowing the offset\ndecoding fails at, it can become very hard to troubleshoot what/where in\nthe data the problem is. For this I would like the Offset to be exposed\nto aid in troubleshooting when such problems occur.\n\n### What changes are included in this PR?\nExpose internal InputOffset method directly in the CSV \u0026 JSON reader.\n\n### Are these changes tested?\nNo additional tests added; simple 1 to 1 exposure of internal\nInputOffset method.\n\n### Are there any user-facing changes?\nAdds public InputOffset method on CSV \u0026 JSON readers.\n\nCo-authored-by: Willem Jan Noort \u003cWillemJan.Noort@essent.nl\u003e"
    },
    {
      "commit": "7c13a602d47616d45ccbbb3f845f3ca44a5926b6",
      "tree": "73f6817ca87b33b3ecb55ef14147d411ba287669",
      "parents": [
        "b02cc0111095ac8c1659300c2a276354ddd29294"
      ],
      "author": {
        "name": "Samuele Resca",
        "email": "samuele.resca@gmail.com",
        "time": "Mon Oct 12 15:02:16 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 15:02:16 2026 +0100"
      },
      "message": "perf: zstd implement Pooling + DecodeAll with no new reader. (#1331)\n\n### Rationale for this change\n\nPerformance improvement on the zstd path.\n\n### What changes are included in this PR?\n\n- zstd: decoders come from a `sync.Pool` instead of being created for\nevery record batch, and each compressed buffer is decoded with one\n`DecodeAll` call straight into the destination buffer (decoder built\nwith `WithDecoderConcurrency(1)` and `WithDecodeAllCapLimit(true))`\ninstead of `Reset(bytes.NewReader)` + `io.ReadFull` on a streaming\ndecoder.\n- lz4 : no functional change. It keeps its original per-batch\n`lz4.Reader`; the library already pools its large block buffers\ninternally. (Only a Decompress method wrapper was added.)\n\n### Are these changes tested?\n\nAdded tests + benchmark for zstd (the changed path) - every case\nimproves\n\n```\nSMALL buffers (4 KiB per column)\ntime      : -70.5% to -78.3% in all 8 cases\n            1 col,  1 batch  (stream)  9.89 us  -\u003e  2.92 us\n            1 col, 64 batches (stream)  592.9 us -\u003e 128.7 us\n            16 cols, 64 batches (file)  3.67 ms  -\u003e  894 us\nB/op      : -60% (1 col, 1 batch), -64% (1 col, 64 batches), -22% (16 cols)\nallocs/op : -45% (1 col, 1 batch) to -70% (16 cols, 64 batches)\n\nLARGE buffers\nper column   time                          B/op                        allocs/op\n16 KiB       77.6 us  -\u003e 24.0 us  (-69%)   306.9 KiB -\u003e 157.1 KiB (-49%)   184 -\u003e 78  (-58%)\n256 KiB      796.7 us -\u003e 191.7 us (-76%)   20.6 MiB  -\u003e 2.05 MiB  (-90%)   185 -\u003e 81  (-56%)\n4 MiB        4.63 ms  -\u003e 3.05 ms  (-34%)   51.1 MiB  -\u003e 32.1 MiB  (-37%)   189 -\u003e 79  (-58%)\n```\n\n### Are there any user-facing changes?\n\nStrictness change for zstd. A buffer whose decompressed size differs\nfrom the uncompressed-length prefix now returns an error. This matches\nother arrow libraries (e.g.:\n[arrow-cpp](https://github.com/apache/arrow/blob/f3b46fb7d4b8f5fb3fc459860038f0ed8b02bba5/cpp/src/arrow/ipc/reader.cc#L571-L575))"
    },
    {
      "commit": "b02cc0111095ac8c1659300c2a276354ddd29294",
      "tree": "a44ed97c3ab986f2b6e5a31bb256cf267d90155e",
      "parents": [
        "8ae601850b60514ebf5846f94f3bb75924e350a5"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 21:54:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 15:54:13 2026 -0400"
      },
      "message": "perf(arrow/compute): avoid getter wrappers in chunked binary take (#1359)\n\n### What\n- Faster chunked string and binary `take`.\n\n### Why\nEach lookup goes through an interface and a generic method wrapper.\n\nApple M1 Pro, Go 1.26.3. 64 chunks x 4,096 rows, 8-byte values, 10%\nselected, sequential indices. Medians from 12 x 100ms samples per\nrevision.\n\n| String values | Before | After | Time |\n| --- | ---: | ---: | ---: |\n| No nulls | 504.8 us | 484.8 us | -4.0% |\n| 1% nulls | 661.9 us | 632.4 us | -4.5% |\n| 50% nulls | 463.8 us | 440.7 us | -5.0% |\n| All nulls | 309.3 us | 287.1 us | -7.2% |\n\nRandom access is mostly unchanged in 20 x 500ms samples. Allocations are\nunchanged.\n\n### Implementation\n- Pass the concrete getter through dispatch.\n- Call value and validity helpers directly."
    },
    {
      "commit": "8ae601850b60514ebf5846f94f3bb75924e350a5",
      "tree": "ab0e09dae2654d9142fdf0261914664176c09fed",
      "parents": [
        "802431b7521df5465c684bdc60abd921cf92f2fe"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 18:19:28 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 12:19:28 2026 -0400"
      },
      "message": "perf(compute): vectorize mixed 16-bit filters (#1349)\n\n## What\n- Add AVX2 and ARM64 NEON paths for mixed null-free 16-bit filters.\n\n## Why\n- 16-bit primitive filters still use the generic writer while 32-bit and\n64-bit filters have SIMD paths.\n\n## Implementation\n- Keep nulls, short or unaligned filters, dense masks, and noasm on the\nexisting path.\n- Benchmark alternating, random25/50/75, clustered50, all-selected, and\nnone-selected at 1K, 64K, and 1M values.\n- On M1 Pro, compared with noasm: 1M alternating improves from 4.23 ms\nto 225 us; random50 improves from 3.52 ms to 1.09 ms. Mixed cases drop\nfrom 33 to 32 allocs/op."
    },
    {
      "commit": "802431b7521df5465c684bdc60abd921cf92f2fe",
      "tree": "c3b27a31b3d1ff259a6ca87e75c6411dc70a7bf1",
      "parents": [
        "f82b95de8195cc3e74040d516eb34b234fbbaae7"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 16:24:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:24:58 2026 -0400"
      },
      "message": "perf(arrow/array): compare fixed-size binary values in bulk (#1347)\n\n### What\n- Compare valid fixed-size binary values in contiguous byte ranges.\n- Keep scalar comparison for short or fragmented arrays.\n\n### Why\n- Reduce per-value checks for larger arrays.\n\n### Implementation\n- Add null, offset, and validity bitmap cases.\n- Benchmark 8/32/128-byte values at 4/8/64/1K/64K items with all-valid,\n1%-null, alternating-null, and clustered-null patterns.\n\n### Benchmark results\n- Compared with `upstream/main` (`954bc067`) on an Apple M1 Pro with Go\n1.26.3; median of 5 runs.\n- At 65,536 values, all-valid was 1.4–16.1x faster, 1%-null 1.3–12.5x,\nand clustered-null 2.1–13.8x.\n- Alternating-null results were within 7% of baseline."
    },
    {
      "commit": "f82b95de8195cc3e74040d516eb34b234fbbaae7",
      "tree": "f5f03db77f719891826375bb885ce1d07da91b61",
      "parents": [
        "6533020be47f6ec823038eb1ffeca3d713f6485a"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 16:24:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:24:31 2026 -0400"
      },
      "message": "perf(arrow/array): compare approximate list values by valid runs (#1330)\n\n## What\n\nSpeed up `ApproxEqual` for list arrays.\n\n## Why\n\nThe old path created and released one child slice for every valid list\nitem. This is expensive for large arrays.\n\n## Implementation\n\n- Compare contiguous valid runs for `List`, `LargeList`, and\n`FixedSizeList`.\n- Reuse direct child comparison when a run covers the full child array.\n- Keep concrete scalar fallbacks for fragmented validity bitmaps.\n- Add coverage for full-range approximate slices and generic arrays.\n- Add benchmark coverage for common null patterns.\n\n## Benchmark\n\nApple M1 Pro, Go 1.26.3, `GOMAXPROCS\u003d1`, 65,536 rows, Int32 child\nvalues, list size 16. Median of 3 runs. Lower `ns/op` is better.\n\n| Case | upstream/main | This PR | Speed | PR allocs/op |\n| --- | ---: | ---: | ---: | ---: |\n| list / all-valid | 17.8 ms | 0.197 ms | 90.5x | 2 |\n| large-list / all-valid | 18.9 ms | 0.216 ms | 87.8x | 2 |\n| fixed-size-list / all-valid | 18.0 ms | 0.145 ms | 124x | 2 |\n| list / 10% null | 16.2 ms | 2.15 ms | 7.5x | 26,218 |\n| list / clustered 10% null | 16.0 ms | 0.195 ms | 81.9x | 10 |\n| list / alternating null | 8.72 ms | 8.71 ms | 1.00x, near parity |\n131,074 |"
    },
    {
      "commit": "6533020be47f6ec823038eb1ffeca3d713f6485a",
      "tree": "b5db46d5426614b1a2f48052f43e591b1ecd7fd0",
      "parents": [
        "b4b0c04a0b1ef7f6001b5a380e68a918bfe93f4f"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 16:23:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:23:40 2026 -0400"
      },
      "message": "perf(arrow/array): concatenate list offsets directly (#1323)\n\n**What**\n\n- Concatenate List and LargeList offsets directly into the output\nbuffer.\n\n**Why**\n\n- Avoid temporary fixed-width buffer wrappers for every input chunk.\n- Improve concatenation when arrays are split into many chunks.\n\n**Implementation**\n\n- Added `concatOffsetsData` using the existing direct 32-bit and 64-bit\noffset handlers.\n- Updated only the List and LargeList paths. Map and Binary paths are\nunchanged.\n- Added a benchmark covering both list types and 64, 1,024, and 8,192\nchunks.\n\nBenchmark on an Apple M1 Pro with 65,536 values:\n\n| Case | ns/op before -\u003e after | allocs/op before -\u003e after |\n| --- | ---: | ---: |\n| List, 64 chunks | 86.5us -\u003e 82.3us | 211 -\u003e 145 |\n| List, 1,024 chunks | 274.1us -\u003e 229.5us | 3,309 -\u003e 2,273 |\n| List, 8,192 chunks | 1.512ms -\u003e 1.220ms | 28,627 -\u003e 19,656 |\n| LargeList, 64 chunks | 93.7us -\u003e 87.5us | 211 -\u003e 146 |\n| LargeList, 1,024 chunks | 262.6us -\u003e 222.5us | 3,297 -\u003e 2,254 |\n| LargeList, 8,192 chunks | 1.467ms -\u003e 1.192ms | 28,244 -\u003e 19,217 |\n\nTests:\n\n- `go test ./arrow/array -count\u003d1`\n- `go vet ./arrow/array`\n- `git diff --check`"
    },
    {
      "commit": "b4b0c04a0b1ef7f6001b5a380e68a918bfe93f4f",
      "tree": "813b4bf77a99c678dfd95cb919c6ae2bbca76c21",
      "parents": [
        "5fb2a2008bd0498ee3adcb22fbaa06b3dbf8179a"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Oct 06 16:23:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:23:13 2026 -0400"
      },
      "message": "perf(compute): use typed memo insertion for binary hashes (#1315)\n\n## What does this change?\n\n- `doAppendBinary` and `doAppendFixedSize` still called\n`MemoTable.GetOrInsert` for every value.\n- The memo is already a `TypedMemoTable[[]byte]`.\n- Use `InsertOrGet` directly, like the numeric hash paths.\n- Null handling is unchanged.\n\n## Why\n\nThis removes the `[]byte` to `interface{}` call-site conversion from the\ncompute dictionary and unique kernels. It also makes the typed binary\nmemo path reachable from these hot loops.\n\n## Benchmark\n\nCommand:\n\n```text\ngo test -p 1 -vet\u003doff ./arrow/compute -run \u0027^$\u0027 -bench \u0027^BenchmarkDictionaryEncodeBinary$\u0027 -benchmem -benchtime\u003d500ms -count\u003d7\n```\n\nApple M1 Pro, macOS arm64, Go 1.26.3. The numbers below are medians of 7\nruns. Baseline uses `GetOrInsert` at both call sites. After uses\n`TypedMemoTable[[]byte].InsertOrGet`.\n\n| Case | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| string, 65,536 values | 4,837,326 ns/op | 3,151,276 ns/op | 34.9%\nfaster |\n| fixed-size binary 16, 65,536 values | 4,445,131 ns/op | 3,134,294\nns/op | 29.5% faster |\n| string B/op | 3,444,557 | 1,871,270 | 45.7% fewer |\n| fixed-size binary B/op | 3,444,128 | 1,870,749 | 45.7% fewer |\n| string allocs/op | 131,150 | 65,613 | 50.0% fewer |\n| fixed-size binary allocs/op | 131,146 | 65,609 | 50.0% fewer |\n\n## Coverage\n\n- Existing string and binary dictionary tests cover the variable-width\npath.\n- Added a fixed-size-binary dictionary test.\n- Added string and 16-byte fixed-size-binary benchmarks.\n- `go test -p 1 ./arrow/compute -count\u003d1`\n\nNo public API changes."
    },
    {
      "commit": "5fb2a2008bd0498ee3adcb22fbaa06b3dbf8179a",
      "tree": "8bca2029cb819981aae020460a959134dfa3c4c9",
      "parents": [
        "fa8fa150d30fcbaa5b7519de66f60c062ac0d0bb"
      ],
      "author": {
        "name": "Animesh Kumar",
        "email": "61719828+CaptainAni187@users.noreply.github.com",
        "time": "Tue Oct 06 19:52:54 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:22:54 2026 -0400"
      },
      "message": "fix(parquet/variant): return \"\" for an empty long-form string (#1353)\n\n### Rationale for this change\n\nFixes #1344. `Value.Value()` built a long-form string with\n`unsafe.String(\u0026v.value[5], sz)`. For an empty string the encoded value\nis only the 5-byte header and length, so `\u0026v.value[5]` was out of range\nand it panicked. `String()` and `MarshalJSON()` go through `Value()` and\npanicked the same way. `validatePrimitiveValue` accepts the encoding, so\n`variant.New` returns the value without an error.\n\n### What changes are included in this PR?\n\nThe `PrimitiveString` branch now returns `\"\"` when the length is zero,\nthe same guard the short-string branch already has.\n\n### Are these changes tested?\n\nYes. `TestLongFormString` builds the 5-byte encoding from the issue and\na non-empty long-form string, and checks `Type()`, `Value()` and\n`String()` for both. The empty case panics on main with `index out of\nrange [5] with length 5` and passes with the fix.\n\n`go test ./parquet/...` passes (with the testing submodules), as do the\nother packages that import `parquet/variant` (`arrow/compute`,\n`arrow/extensions`, `parquet/pqarrow`). golangci-lint v2.13.2 reports no\nissues.\n\n### Are there any user-facing changes?\n\nAn empty string in the long-form encoding now reads as `\"\"` instead of\npanicking."
    },
    {
      "commit": "fa8fa150d30fcbaa5b7519de66f60c062ac0d0bb",
      "tree": "4d38d7e5897a9871906f4ba3dbb48a0f22806618",
      "parents": [
        "c1c8ed0ac801708904eeef369db2d83714a4cf31"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Oct 06 10:22:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:22:39 2026 -0400"
      },
      "message": "chore: Bump github.com/apache/thrift from 0.24.0 to 0.25.0 (#1355)\n\nBumps [github.com/apache/thrift](https://github.com/apache/thrift) from\n0.24.0 to 0.25.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/apache/thrift/releases\"\u003egithub.com/apache/thrift\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.25.0\u003c/h2\u003e\n\u003cp\u003ePlease head over to the official release download source:\n\u003ca\nhref\u003d\"http://thrift.apache.org/download\"\u003ehttp://thrift.apache.org/download\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe assets listed below are added by Github based on the release tag\nand they will therefore not match the checkums published on the Thrift\nproject website.\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/apache/thrift/blob/master/CHANGES.md\"\u003egithub.com/apache/thrift\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.25.0\u003c/h2\u003e\n\u003ch3\u003eBuild Process\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-2208\"\u003eTHRIFT-2208\u003c/a\u003e\n- Thrift package for chocolatey\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6077\"\u003eTHRIFT-6077\u003c/a\u003e\n- improve CHANGES.md generator section assignment\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6170\"\u003eTHRIFT-6170\u003c/a\u003e\n- Add a GitHub Actions CI job for the D library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6171\"\u003eTHRIFT-6171\u003c/a\u003e\n- Add a GitHub Actions CI job for the Erlang library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6172\"\u003eTHRIFT-6172\u003c/a\u003e\n- Dart tests are not run by make check, and no CI job builds the\nbinding\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6185\"\u003eTHRIFT-6185\u003c/a\u003e\n- lib/d does not build against OpenSSL 3.x\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6189\"\u003eTHRIFT-6189\u003c/a\u003e\n- Add a GitHub Actions CI job for the Lua library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6190\"\u003eTHRIFT-6190\u003c/a\u003e\n- Add a compile and test check for the JavaME library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6196\"\u003eTHRIFT-6196\u003c/a\u003e\n- Remove the unreleased contrib thrift-maven-plugin in favour of\nstandard Maven plugins\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6234\"\u003eTHRIFT-6234\u003c/a\u003e\n- Configure apt retries and timeouts in GitHub Actions workflows\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6235\"\u003eTHRIFT-6235\u003c/a\u003e\n- Compiler unit tests fail to link when the Go generator is\ndisabled\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6237\"\u003eTHRIFT-6237\u003c/a\u003e\n- Shrink the MSVC Docker image: drop the unused .NET Framework base and\nJDK, prune Boost, pin tool versions\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6247\"\u003eTHRIFT-6247\u003c/a\u003e\n- AppVeyor jobs depend on a single fallback URL for the zlib\ndownload\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6250\"\u003eTHRIFT-6250\u003c/a\u003e\n- Clean up the warnings in the MSVC CI build\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6270\"\u003eTHRIFT-6270\u003c/a\u003e\n- Sweep for source files that no build list mentions\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6274\"\u003eTHRIFT-6274\u003c/a\u003e\n- Reject AI session and conversation links in pull request commits and\ntext\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6276\"\u003eTHRIFT-6276\u003c/a\u003e\n- AppVeyor MINGW job fails when one MSYS2 mirror drops a signature\ndownload\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6277\"\u003eTHRIFT-6277\u003c/a\u003e\n- CHANGES draft lists tickets that are not fixed in the release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6278\"\u003eTHRIFT-6278\u003c/a\u003e\n- CHANGES draft generator loses a whole JIRA lookup over one nonexistent\nticket key\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6284\"\u003eTHRIFT-6284\u003c/a\u003e\n- Wire up source and test files that a build list misses (THRIFT-6270\nfollow-up)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6301\"\u003eTHRIFT-6301\u003c/a\u003e\n- veralign.sh rewrites third-party versions in lockfiles when they match\nthe old Thrift version\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6302\"\u003eTHRIFT-6302\u003c/a\u003e\n- veralign.sh: jsonReplace reports failures as OK, and the file loop is\nnot sorted\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6305\"\u003eTHRIFT-6305\u003c/a\u003e\n- veralign.sh reports a JSON file that jq cannot read as a missing\nversion\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6310\"\u003eTHRIFT-6310\u003c/a\u003e\n- Build the Thrift compiler on Windows in CI\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6311\"\u003eTHRIFT-6311\u003c/a\u003e\n- Build a Windows installer for the Thrift compiler at release time\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6313\"\u003eTHRIFT-6313\u003c/a\u003e\n- Publish the Windows Thrift compiler as a .NET tool\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6314\"\u003eTHRIFT-6314\u003c/a\u003e\n- Publish the Windows Thrift compiler through WinGet\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6315\"\u003eTHRIFT-6315\u003c/a\u003e\n- Stale msvc2017 paths in the Windows Docker documentation\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6319\"\u003eTHRIFT-6319\u003c/a\u003e\n- lib/ts is not part of the build, so its check-local target never\nruns\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6320\"\u003eTHRIFT-6320\u003c/a\u003e\n- Stop asking for a static runtime when building the release\ncompiler\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6324\"\u003eTHRIFT-6324\u003c/a\u003e\n- Cut the AppVeyor build matrix and build in parallel\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6325\"\u003eTHRIFT-6325\u003c/a\u003e\n- Let the MSVC builds use /MP again\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6326\"\u003eTHRIFT-6326\u003c/a\u003e\n- Compile the compiler sources once for the executable and the unit\ntests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6327\"\u003eTHRIFT-6327\u003c/a\u003e\n- Document the credentials the release workflows need in one place\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6330\"\u003eTHRIFT-6330\u003c/a\u003e\n- Add a GitHub Actions CI job for the JavaScript library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6334\"\u003eTHRIFT-6334\u003c/a\u003e\n- Adopt a version support policy and require PHP 8.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6349\"\u003eTHRIFT-6349\u003c/a\u003e\n- Drop the ubuntu-focal build image\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6351\"\u003eTHRIFT-6351\u003c/a\u003e\n- Require GLib 2.48 in configure and CMake\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://issues.apache.org/jira/browse/THRIFT-6361\"\u003eTHRIFT-6361\u003c/a\u003e\n- Add a GitHub Actions CI job for the C (GLib) library\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3945\"\u003e#3945\u003c/a\u003e -\nBump \u003ccode\u003e@​babel/core\u003c/code\u003e from 7.8.4 to 7.29.7\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3911\"\u003e#3911\u003c/a\u003e -\nBump brace-expansion from 2.1.0 to 2.1.7\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3890\"\u003e#3890\u003c/a\u003e -\nLet prose-only commits skip CI\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3816\"\u003e#3816\u003c/a\u003e -\nCap every build workflow job at 60 minutes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3837\"\u003e#3837\u003c/a\u003e -\nResolve config.h.in relative to ConfigureChecks.cmake\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3833\"\u003e#3833\u003c/a\u003e -\nBump js-yaml from 3.15.1 to 3.15.2 in /lib/js\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/apache/thrift/pull/3790\"\u003e#3790\u003c/a\u003e -\nBump \u003ccode\u003e@​humanfs/node\u003c/code\u003e from 0.16.6 to 0.16.8\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/apache/thrift/commit/27e8a425ffb498e190df3a12e239326bf5ba9ed6\"\u003e\u003ccode\u003e27e8a42\u003c/code\u003e\u003c/a\u003e\nTHRIFT-6367: Cap the message name in the Erlang binary and compact\nprotocols\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/e6f57e24f649c7e4f011fdc61185daca46e97626\"\u003e\u003ccode\u003ee6f57e2\u003c/code\u003e\u003c/a\u003e\nCollect JSON strings in chunks; bound numbers and message names\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/27fa70442bccdf981d72b1e57d1080646cb5e360\"\u003e\u003ccode\u003e27fa704\u003c/code\u003e\u003c/a\u003e\nTHRIFT-6366: Bound the message size in the Erlang binary and compact\nprotocols\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/02b7d4dd3eed5f35165bd51eac99ebf053c62ea4\"\u003e\u003ccode\u003e02b7d4d\u003c/code\u003e\u003c/a\u003e\nUpdated CHANGES.md\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/e9360fe4834e3437444381169b206fcb3c03ef7f\"\u003e\u003ccode\u003ee9360fe\u003c/code\u003e\u003c/a\u003e\nTHRIFT-6365: Add a container-size limit to the Lua protocols\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/2c09024bde00de4e3cb0c77a371880fae3882171\"\u003e\u003ccode\u003e2c09024\u003c/code\u003e\u003c/a\u003e\nBound the size of a message thrift_json_protocol reads\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/74a4f3e13fb923bb842fd7ce60565f39c5a68f3e\"\u003e\u003ccode\u003e74a4f3e\u003c/code\u003e\u003c/a\u003e\nUpdated CHANGES.md\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/3bd6bfbe6b0072ebc18c16a18e7479431c4c2747\"\u003e\u003ccode\u003e3bd6bfb\u003c/code\u003e\u003c/a\u003e\nkeep branch at 0.25.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/04502bd39348fa2ffe5bc77e6fee362870816192\"\u003e\u003ccode\u003e04502bd\u003c/code\u003e\u003c/a\u003e\nkeep branch at 0.25.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/apache/thrift/commit/6dcc437b40041216e7c0ce589fbd65c0cd39e3b0\"\u003e\u003ccode\u003e6dcc437\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027master\u0027 into release/0.25.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/apache/thrift/compare/v0.24.0...v0.25.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c1c8ed0ac801708904eeef369db2d83714a4cf31",
      "tree": "d2e42d919c93b6e67f71f73d4146a0320e6c7c7b",
      "parents": [
        "4d5bd6aae022ec31f0f9d9b3f9953d459dd3611b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 05 19:08:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 19:08:21 2026 -0400"
      },
      "message": "chore: Bump github.com/pierrec/lz4/v4 from 4.1.30 to 4.1.32 (#1354)\n\nBumps [github.com/pierrec/lz4/v4](https://github.com/pierrec/lz4) from\n4.1.30 to 4.1.32.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/d5b13ad7d1432d022f4f0bae1324f43f0dea9de6\"\u003e\u003ccode\u003ed5b13ad\u003c/code\u003e\u003c/a\u003e\ncmd/lz4c: go mod tidy\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/9ae9c105fb40547ab9bf7de0935702722c0edaff\"\u003e\u003ccode\u003e9ae9c10\u003c/code\u003e\u003c/a\u003e\nxxh32: fix a stale BlockSize comment\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/30322911fc59cb53510ab5213ed4e4a8267e7fe2\"\u003e\u003ccode\u003e3032291\u003c/code\u003e\u003c/a\u003e\nlz4stream: stop shadowing the data channel in initR\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/74cee144383434d3de77e4a4ef5f48a2bde583a7\"\u003e\u003ccode\u003e74cee14\u003c/code\u003e\u003c/a\u003e\nlz4: drop an else after return in CompressingReader\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/449d1c6eb92f512f1f42ee45944721e55205bb8c\"\u003e\u003ccode\u003e449d1c6\u003c/code\u003e\u003c/a\u003e\nlz4: clean up comments\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/b4a9c60cb4061810a6cd9cbcbb240c1ce695f25d\"\u003e\u003ccode\u003eb4a9c60\u003c/code\u003e\u003c/a\u003e\nall: run gofmt and go fix\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/e9383a38c4301cd305ec694317fb8d88739fdee2\"\u003e\u003ccode\u003ee9383a3\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/270\"\u003e#270\u003c/a\u003e from\nhoneycombio/lizf.silesia-ci\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/904e977ee670fbcc8c21b22c08b97da8e04be6da\"\u003e\u003ccode\u003e904e977\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/271\"\u003e#271\u003c/a\u003e from\nhoneycombio/lizf.agents-md\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/6995104942504abfdaa053af9e52dcd684be5aa6\"\u003e\u003ccode\u003e6995104\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027v4\u0027 into lizf.silesia-ci\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/2a7ee3caf4b60969a2ed1ae87cf248c1d57fb352\"\u003e\u003ccode\u003e2a7ee3c\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/269\"\u003e#269\u003c/a\u003e from\nhoneycombio/lizf.amd64-avx2-stream\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pierrec/lz4/compare/v4.1.30...v4.1.32\"\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.com/pierrec/lz4/v4\u0026package-manager\u003dgo_modules\u0026previous-version\u003d4.1.30\u0026new-version\u003d4.1.32)](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": "4d5bd6aae022ec31f0f9d9b3f9953d459dd3611b",
      "tree": "ebc9556601d742ec80015e774b497ba8ab7d1e66",
      "parents": [
        "572fafb3ed8fc9c936a3dfb048a110146c3faceb"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Mon Oct 05 19:07:07 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 19:07:07 2026 -0400"
      },
      "message": "docs(arrow/compute): say what MergeAll returns for no states and where Ordered takes effect (#1338)\n\nFollow-up to #1336, docs only.\n\nThe review noted two things worth a sentence in the comments:\n\n- `MergeAll` returns `(nil, nil)` for an empty `states` slice, and a\ncaller reading \"returns the state you then finalize\" could finalize nil.\nThe comment now says so, and says what to do instead: aggregate the\nempty input the way the executor does, one state from init, then\nfinalize.\n- `Ordered` has no effect on the in-tree executor, which consumes the\nwhole input into a single state in order. The comment now says that it\nis a contract for `MergeAll` and for callers that partition the input\nthemselves.\n\nNo code change. `gofmt`, `go vet` and `go test` on `arrow/compute` and\n`arrow/compute/exec` are clean."
    },
    {
      "commit": "572fafb3ed8fc9c936a3dfb048a110146c3faceb",
      "tree": "361557cc0e5fbb062385010c24ee073eccf38093",
      "parents": [
        "e6b8381e4d1daf0ee0e9d5b0c3e0a515e3b5645d"
      ],
      "author": {
        "name": "Willem Jan",
        "email": "51120533+Willem-J-an@users.noreply.github.com",
        "time": "Tue Oct 06 01:06:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 19:06:41 2026 -0400"
      },
      "message": "fix(array/record): bldr stop ignore unexpected EOF (#1341)\n\n### Rationale for this change\narray/json_reader unmarshals records, but treats EOF as an end of the\nstream and swallows it. This leads to ignoring unexpected errors where\nthe JSON was not valid: `{\"a\": 2`\n\n### What changes are included in this PR?\nIf a new record has started being processed, EOF is converted to\nUnexpectedEOF, so it will not be swallowed.\n\n### Are these changes tested?\nAdded a testcase.\n\n### Are there any user-facing changes?\nNo\n\nCo-authored-by: Willem Jan Noort \u003cWillemJan.Noort@essent.nl\u003e"
    },
    {
      "commit": "e6b8381e4d1daf0ee0e9d5b0c3e0a515e3b5645d",
      "tree": "a47e9703a457ce7ac2f4854da3bf9b785fb4b7b0",
      "parents": [
        "2302a671b478f0e401f159a7e5b0e8cf08a1dfec"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 05 19:05:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 19:05:13 2026 -0400"
      },
      "message": "chore: Bump modernc.org/sqlite from 1.59.0 to 1.60.1 (#1356)\n\nBumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.59.0\nto 1.60.1.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md\"\u003emodernc.org/sqlite\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eEntries for v1.38.1 through v1.44.1 and for v1.49.1 were added on\n2026-09-05, reconstructed from the git history and the merge requests\nthey cite; they were missing at release time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-30 v1.61.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e_time_format\u003dstring_no_monotonic\u003c/code\u003e,\n\u003cstrong\u003eopt-in\u003c/strong\u003e: times are written in the default layout but\nwithout Go\u0027s monotonic clock reading, the \u003ccode\u003e m\u003d+...\u003c/code\u003e suffix,\nso a scanned time matches its row again when bound in \u003ccode\u003eWHERE col \u003d\n?\u003c/code\u003e. The default is unchanged. Resolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/259\"\u003e#259\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/259\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/259\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/142\"\u003e#142\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/142\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/142\u003c/a\u003e),\nthanks 不插电 (\u003ca\nhref\u003d\"https://gitlab.com/r27153733\"\u003e\u003ccode\u003e@​r27153733\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003cli\u003eEach release tag now gets a signed provenance document, linked from\nits GitLab release; \u003ccode\u003eVERIFYING.md\u003c/code\u003e says what it proves and\nhow to check one. Tooling only. See [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/141\"\u003e#141\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/141\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/141\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd an opt-in SQLite authorizer per connection:\n\u003ccode\u003eAuthorizerRegisterer\u003c/code\u003e, reached through\n\u003ccode\u003esql.Conn.Raw\u003c/code\u003e or installed on every pooled connection from\n\u003ccode\u003eRegisterConnectionHook\u003c/code\u003e; existing connections are unchanged.\nResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/256\"\u003e#256\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/256\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/256\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/139\"\u003e#139\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/139\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/139\u003c/a\u003e),\nthanks Tedla Brandsema (\u003ca\nhref\u003d\"https://gitlab.com/TedlaBrandsema\"\u003e\u003ccode\u003e@​TedlaBrandsema\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003cli\u003eClosing a connection now forgets the pre-update, commit and rollback\nhooks registered on it; their entries used to linger after\n\u003ccode\u003eClose\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-29 v1.60.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBinding arguments to a statement is no longer quadratic in the\nnumber of its parameters, which made multi-row \u003ccode\u003eINSERT\u003c/code\u003es with\nthousands of \u003ccode\u003e?\u003c/code\u003e parameters slow. Resolves [GitHub issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/8\"\u003e#8\u003c/a\u003e](\u003ca\nhref\u003d\"https://redirect.github.com/modernc-org/sqlite/issues/8\"\u003emodernc-org/sqlite#8\u003c/a\u003e),\nthanks wencycool!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-28 v1.60.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eA fault while reading the memory-mapped \u003ccode\u003e-shm\u003c/code\u003e\nfile of a WAL database no longer crashes the process.\u003c/strong\u003e The\nstatement fails with a disk I/O error, extended code\n\u003ccode\u003eSQLITE_IOERR_IN_PAGE\u003c/code\u003e (8714), and the connection stays\nusable, as in MSVC builds of SQLite. On by default on every platform and\nnot switchable; \u003ccode\u003elib.SehInject\u003c/code\u003e and\n\u003ccode\u003elib.SehPending\u003c/code\u003e inject such a fault for tests. Resolves\n[GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/221\"\u003e#221\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/221\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/221\u003c/a\u003e),\nthanks Roman (\u003ca\nhref\u003d\"https://gitlab.com/requilence\"\u003e\u003ccode\u003e@​requilence\u003c/code\u003e\u003c/a\u003e) for\nthe report, and supersedes \u003ca\nhref\u003d\"https://gitlab.com/cznic/libsqlite3/-/merge_requests/4\"\u003elibsqlite3!4\u003c/a\u003e\nand [GitHub pull request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/7\"\u003e#7\u003c/a\u003e](\u003ca\nhref\u003d\"https://redirect.github.com/modernc-org/sqlite/pull/7\"\u003emodernc-org/sqlite#7\u003c/a\u003e),\nthanks hazyhaar for the two rounds, the \u003ccode\u003eccgo\u003c/code\u003e finding and\nthe Windows Server runs!\u003c/li\u003e\n\u003cli\u003eRe-vendor \u003ccode\u003elib/\u003c/code\u003e from \u003ca\nhref\u003d\"https://gitlab.com/cznic/libsqlite3/-/tags/v1.15.0\"\u003emodernc.org/libsqlite3\nv1.15.0\u003c/a\u003e and \u003ccode\u003evec/\u003c/code\u003e from \u003ca\nhref\u003d\"https://gitlab.com/cznic/libsqlite_vec/-/tags/v0.6.0\"\u003emodernc.org/libsqlite_vec\nv0.6.0\u003c/a\u003e; SQLite stays 3.53.4 and sqlite-vec v0.1.9. \u003cstrong\u003eGo 1.26\nis now required\u003c/strong\u003e, and the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e\nbecomes \u003ca\nhref\u003d\"https://gitlab.com/cznic/libc/-/tags/v1.77.1\"\u003ev1.77.1\u003c/a\u003e; as\nalways, downstream \u003ccode\u003ego.mod\u003c/code\u003e files must pin the same\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this repository\u0027s\n\u003ccode\u003ego.mod\u003c/code\u003e does, see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNine exported \u003ccode\u003elib\u003c/code\u003e constants that never had a\nmeaningful value are gone\u003c/strong\u003e: \u003ccode\u003eINFINITY\u003c/code\u003e,\n\u003ccode\u003eMB_CUR_MAX\u003c/code\u003e, \u003ccode\u003eNAN\u003c/code\u003e, \u003ccode\u003eRESERVED_BYTE\u003c/code\u003e,\n\u003ccode\u003eSHARED_FIRST\u003c/code\u003e, \u003ccode\u003eSQLITE_CANTOPEN_BKPT\u003c/code\u003e,\n\u003ccode\u003eSQLITE_CORRUPT_BKPT\u003c/code\u003e, \u003ccode\u003eSQLITE_DEFAULT_LOOKASIDE\u003c/code\u003e\nand \u003ccode\u003eSQLITE_MISUSE_BKPT\u003c/code\u003e. The transpiler now evaluates\nobject-like macros as C expressions, so other constants take their C\nvalue (\u003ccode\u003elib.WALINDEX_PGSZ\u003c/code\u003e is 32768, not 0) and some appear;\nthe full list is in \u003ca\nhref\u003d\"https://gitlab.com/cznic/libsqlite3/-/blob/master/CHANGELOG.md\"\u003elibsqlite3\u0027s\nCHANGELOG\u003c/a\u003e under 2026-09-19.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emake vendor\u003c/code\u003e now writes \u003ccode\u003evendor.json\u003c/code\u003e, the\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e and\n\u003ccode\u003emodernc.org/libsqlite_vec\u003c/code\u003e commits and the Go toolchain\n\u003ccode\u003elib/\u003c/code\u003e and \u003ccode\u003evec/\u003c/code\u003e were vendored with, so \u003ccode\u003egit\nshow vX.Y.Z:vendor.json\u003c/code\u003e says which revisions a release carries;\nthe test suite fails when they no longer match. Tooling only. See\n[GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/140\"\u003e#140\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/140\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/140\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003evfs.FS.Close\u003c/code\u003e now refuses while a database\nopened through it is still open\u003c/strong\u003e, returning an error that wraps\nthe new \u003ccode\u003evfs.ErrInUse\u003c/code\u003e and leaving the VFS registered. It\nused to free the VFS the open connection still called through, so the\nnext query crashed the process or read through freed memory. Close the\ndatabases first, then the \u003ccode\u003eFS\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFix handle reuse in \u003ccode\u003emodernc.org/sqlite/vfs\u003c/code\u003e on 32-bit\ntargets: after 2^32 file opens in one process the handle counter wrapped\nand could overwrite a live entry, such as a file system registered at\nstart-up, and crash. 64-bit targets were not affected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe pluggable page cache now panics when a\n\u003ccode\u003eCache\u003c/code\u003e breaks its contract\u003c/strong\u003e by returning nil, or a\ndifferent \u003ccode\u003ePage\u003c/code\u003e, from \u003ccode\u003eFetch\u003c/code\u003e for a page SQLite\nstill holds pinned. It used to free memory SQLite was still using,\ncorrupting the database without an error. Only a \u003ccode\u003eCache\u003c/code\u003e\nimplementation with that bug is affected;\n\u003ccode\u003emodernc.org/sqlite/pcache\u003c/code\u003e is not.\u003c/li\u003e\n\u003cli\u003eDocument three limits of the pluggable page cache on\n\u003ccode\u003eRegisterPageCache\u003c/code\u003e and \u003ccode\u003eCache\u003c/code\u003e: it cannot be\ncombined with \u003ccode\u003emodernc.org/sqlite/vec\u003c/code\u003e,\n\u003ccode\u003ePageCache.Create\u003c/code\u003e may be called concurrently, and under\n\u003ccode\u003ecache\u003dshared\u003c/code\u003e a \u003ccode\u003eCache\u003c/code\u003e is called from several\ngoroutines. Documentation only.\u003c/li\u003e\n\u003cli\u003eDocument in the package documentation that state set on a pooled\nconnection is inherited by the next caller to borrow it, and that a\nconnection reached through \u003ccode\u003esql.Conn.Raw\u003c/code\u003e is not safe for\nconcurrent use. Documentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eStrictPragmas\u003c/code\u003e, \u003cstrong\u003eopt-in and off by\ndefault\u003c/strong\u003e: once enabled, a connection whose \u003ccode\u003e_pragma\u003c/code\u003e\nDSN value holds more than one SQL statement fails to open with\n\u003ccode\u003eErrMultiStatementPragma\u003c/code\u003e, before any DSN parameter is\napplied. A \u003ccode\u003e_pragma\u003c/code\u003e value runs as SQL text, so anything\nafter a \u003ccode\u003e;\u003c/code\u003e runs too. Recommended for any application whose\nDSN is not a compile-time constant.\u003c/li\u003e\n\u003cli\u003eDocument SQLite\u0027s own URI query parameters on\n\u003ccode\u003eDriver.Open\u003c/code\u003e: \u003ccode\u003emode\u003c/code\u003e, \u003ccode\u003ecache\u003c/code\u003e,\n\u003ccode\u003eimmutable\u003c/code\u003e, \u003ccode\u003enolock\u003c/code\u003e, \u003ccode\u003epsow\u003c/code\u003e and\n\u003ccode\u003emodeof\u003c/code\u003e, which have always worked in a DSN starting with\n\u003ccode\u003efile:\u003c/code\u003e, and the trap that a plain file name has its query\nstripped before SQLite sees it, so \u003ccode\u003e/path/to.db?mode\u003dro\u003c/code\u003e\nopens read-write. Resolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/257\"\u003e#257\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/257\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/257\u003c/a\u003e).\nDocumentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSECURITY.md\u003c/code\u003e, the vulnerability reporting policy:\nthree private channels, what is in scope, that only the latest release\nis supported, and how a confirmed report is disclosed, including an\nentry in the Go vulnerability database so \u003ccode\u003egovulncheck\u003c/code\u003e\nreports it. \u003ccode\u003eIRP.md\u003c/code\u003e, linked from it, is the maintainers\u0027\nincident response plan. Documentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCONTRIBUTING.md\u003c/code\u003e: where to send a merge request,\nwhich files are generated and must not be edited by hand, how to build\nand test across the 20 supported targets, and the\n\u003ccode\u003eAUTHORS\u003c/code\u003e/\u003ccode\u003eCONTRIBUTORS\u003c/code\u003e convention. Documentation\nonly.\u003c/li\u003e\n\u003cli\u003eShip \u003ccode\u003eLICENSE-3RD-PARTY.md\u003c/code\u003e, a transitively flattened\ninventory of every third-party component this module carries with all\nseventeen license texts in full, and a Software Bill of Materials,\n\u003ccode\u003esbom.cdx.json\u003c/code\u003e (CycloneDX 1.6) and\n\u003ccode\u003esbom.spdx.json\u003c/code\u003e (SPDX 2.3), explained in\n\u003ccode\u003eSBOM.md\u003c/code\u003e. Both cover what a module-graph tool cannot see:\nthe transpiled SQLite and \u003ccode\u003esqlite-vec\u003c/code\u003e C, and the upstreams\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e carries, musl among them. Documentation\nonly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-15 v1.59.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBump the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to \u003ca\nhref\u003d\"https://gitlab.com/cznic/libc/-/tags/v1.75.7\"\u003ev1.75.7\u003c/a\u003e and\nre-vendor \u003ccode\u003elib/\u003c/code\u003e and \u003ccode\u003evec/\u003c/code\u003e. The transpiled SQLite\nis unchanged, still 3.53.4. On the Linux targets the new libc replaces\ntranspiled musl \u003ccode\u003ememcpy\u003c/code\u003e, \u003ccode\u003ememmove\u003c/code\u003e,\n\u003ccode\u003ememset\u003c/code\u003e, \u003ccode\u003ememcmp\u003c/code\u003e and \u003ccode\u003estrlen\u003c/code\u003e with\nnative Go, cutting CPU time on query-heavy workloads by up to a third;\nsee the new Performance section below. As always, downstream\n\u003ccode\u003ego.mod\u003c/code\u003e files must pin the same\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this repository\u0027s\n\u003ccode\u003ego.mod\u003c/code\u003e does; see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHand user-defined function and aggregate callbacks a pooled\n\u003ccode\u003e*FunctionContext\u003c/code\u003e instead of allocating a fresh one per\ncall, removing the last driver-side allocation per invocation. Like the\nargument slice, it is valid only for the duration of the callback and\nmust not be retained past its return. Updates [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/226\"\u003e#226\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/226\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/226\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/137\"\u003e#137\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/137\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/137\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd regression tests pinning the identity and the pooling of that\ncontext. See [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/138\"\u003e#138\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/138\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/138\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003cli\u003eAdd a Performance section to the package documentation: measured\nCPU-time ratios of this driver against the same SQLite compiled from C,\nwhere the gap comes from, and the two consequences for applications —\nindex the columns that \u003ccode\u003eORDER BY\u003c/code\u003e, \u003ccode\u003eGROUP BY\u003c/code\u003e and\n\u003ccode\u003eWHERE\u003c/code\u003e use, and bound the \u003ccode\u003edatabase/sql\u003c/code\u003e pool\nwith \u003ccode\u003eSetMaxOpenConns\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-01 v1.58.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_4.html\"\u003eSQLite 3.53.4\u003c/a\u003e. It\ncarries upstream\u0027s own fix for the journal-rollback data-corruption bug,\nso the local super-journal patch v1.56.0 introduced is dropped; recovery\nbehavior is unchanged. Also bumps the pinned\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.75.6; as always, downstream modules\nmust pin the same version this one does, see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd opt-in support for \u003cstrong\u003eLinux Open File Description (OFD)\nlocks\u003c/strong\u003e on database files, \u003cstrong\u003eoff by default\u003c/strong\u003e;\nwithout opting in, locking behavior is byte-for-byte that of previous\nreleases. A POSIX record lock is owned by the (process, inode) pair, so\nany \u003ccode\u003eClose\u003c/code\u003e of any descriptor of the database file anywhere\nin the process silently strips SQLite\u0027s locks; OFD locks survive that.\nEnable it process-wide with \u003ccode\u003eMODERNC_SQLITE_OFD_LOCK\u003d1\u003c/code\u003e in\nthe environment, or with the new \u003ccode\u003eOFDLocking(true)\u003c/code\u003e before\nthe first connection is opened; \u003ccode\u003eOFDLockingEnabled\u003c/code\u003e reports\nthe mode in effect, and the new \u003ccode\u003eErrOFDLockingTooLate\u003c/code\u003e and\n\u003ccode\u003eErrOFDLockingUnavailable\u003c/code\u003e report a switch attempted too late\nand a platform or filesystem without the feature. Why it is process-wide\nrather than a DSN parameter, what WAL\u0027s \u003ccode\u003e-shm\u003c/code\u003e coordination\nstill uses, and the \u003ccode\u003e/proc/locks\u003c/code\u003e measurements behind the\ndesign are in [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/136\"\u003e#136\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/136\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/136\u003c/a\u003e),\nthanks Nathan Herring (\u003ca\nhref\u003d\"https://gitlab.com/technosloth\"\u003e\u003ccode\u003e@​technosloth\u003c/code\u003e\u003c/a\u003e),\nand thanks Gani Georgiev (\u003ca\nhref\u003d\"https://gitlab.com/ganigeorgiev\"\u003e\u003ccode\u003e@​ganigeorgiev\u003c/code\u003e\u003c/a\u003e)\nfor pressing the opt-in default!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-19 v1.57.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an opt-in \u003ccode\u003e_defensive\u003c/code\u003e DSN query parameter turning on\nSQLite\u0027s defensive mode for the connection. On such a connection\n\u003ccode\u003ePRAGMA writable_schema\u003dON\u003c/code\u003e, \u003ccode\u003ePRAGMA\njournal_mode\u003dOFF\u003c/code\u003e and \u003ccode\u003ePRAGMA schema_version\u003dN\u003c/code\u003e become\nsilent no-ops, and writes to a virtual table\u0027s shadow tables and to\n\u003ccode\u003esqlite_dbpage\u003c/code\u003e fail. It is a hardening measure, not a\nsandbox for hostile database files, for which it is only one of the\nsteps \u003ca href\u003d\"https://www.sqlite.org/security.html\"\u003eSQLite\nrecommends\u003c/a\u003e, and it is a property of the connection, not of the file.\nAbsent, or \u003ccode\u003e_defensive\u003d0\u003c/code\u003e, nothing changes.\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_defensive\u003d1\u003c/code\u003e together with\n\u003ccode\u003e_journal_mode\u003dOFF\u003c/code\u003e (or \u003ccode\u003e_journal\u003dOFF\u003c/code\u003e) instead of\nopening a connection in which neither was honoured: SQLite turns that\nPRAGMA into a no-op that still reports success. Only DSNs using the new\nparameter can be affected. See [GitHub pull request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/6\"\u003e#6\u003c/a\u003e](\u003ca\nhref\u003d\"https://redirect.github.com/modernc-org/sqlite/pull/6\"\u003emodernc-org/sqlite#6\u003c/a\u003e),\nthanks wsman!\u003c/li\u003e\n\u003cli\u003eShip the \u003ca\nhref\u003d\"https://github.com/asg017/sqlite-vec\"\u003esqlite-vec\u003c/a\u003e license\nnotice this module has been missing since \u003ccode\u003evec/\u003c/code\u003e arrived in\nv1.47.0. sqlite-vec is Copyright (c) 2024 Alex Garcia, dual-licensed\nApache-2.0 OR MIT and used here under MIT; the text now ships as\n\u003ccode\u003eLICENSE-SQLITE_VEC\u003c/code\u003e, and \u003ccode\u003emake vendor\u003c/code\u003e fails\nrather than quietly dropping it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe SQLite notice is renamed from\n\u003ccode\u003eSQLITE-LICENSE\u003c/code\u003e to \u003ccode\u003eLICENSE-SQLITE\u003c/code\u003e\u003c/strong\u003e;\nupdate any direct links to it. Its contents are unchanged. The rename is\nwhat makes \u003ccode\u003ego mod vendor\u003c/code\u003e carry both notices into downstream\n\u003ccode\u003evendor/\u003c/code\u003e trees: it selects license files by name prefix, so\na name merely ending in \u003ccode\u003eLICENSE\u003c/code\u003e was never propagated.\u003c/li\u003e\n\u003cli\u003eLet a caller-constructed \u003ccode\u003eDriver\u003c/code\u003e register its own\nfunctions, collations and virtual table modules, through new\n\u003ccode\u003eRegisterFunction\u003c/code\u003e, \u003ccode\u003eRegisterScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterDeterministicScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterCollationUtf8\u003c/code\u003e and \u003ccode\u003eRegisterModule\u003c/code\u003e\nmethods plus \u003ccode\u003eMust*\u003c/code\u003e variants, and let\n\u003ccode\u003evtab.RegisterModule\u003c/code\u003e honour its \u003ccode\u003edb\u003c/code\u003e argument.\n\u003cstrong\u003eBehavior change\u003c/strong\u003e: \u003ccode\u003evtab.RegisterModule(db,\n...)\u003c/code\u003e where \u003ccode\u003edb\u003c/code\u003e was opened on a caller-constructed\n\u003ccode\u003eDriver\u003c/code\u003e used to discard \u003ccode\u003edb\u003c/code\u003e and land on the\nregistered \u003ccode\u003esqlite\u003c/code\u003e driver, reaching every connection in the\nprocess; it now lands on that \u003ccode\u003eDriver\u003c/code\u003e alone, so a\n\u003ccode\u003esql.Open(\u0026quot;sqlite\u0026quot;)\u003c/code\u003e connection that used to\nresolve such a module gets \u003ccode\u003eno such module\u003c/code\u003e. Everything else\nis additive, and the isolating change discussed in [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/254\"\u003e#254\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/254\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/254\u003c/a\u003e)\nis deliberately not made here. See [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/135\"\u003e#135\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/135\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/135\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003cli\u003ePromote \u003ccode\u003efreebsd/386\u003c/code\u003e, \u003ccode\u003efreebsd/arm\u003c/code\u003e and\n\u003ccode\u003enetbsd/amd64\u003c/code\u003e from experimental to fully supported. The\npackage documentation\u0027s platform table had carried seventeen entries\nwhile this module shipped, cross-built and tested twenty; all three have\nbeen in the builder matrix since v1.53.0 and pass the full suite on this\nrelease\u0027s commit. Documentation only — \u003ccode\u003elib/\u003c/code\u003e is\nbyte-for-byte what v1.56.0 shipped.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-03 v1.56.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRe-vendor the transpiled sources, picking up\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e\u0027s patch for an \u003cstrong\u003eupstream\ndata-corruption bug in SQLite 3.53.3\u0027s journal rollback\u003c/strong\u003e. A\ncrash during the commit of a multi-database (ATTACH) transaction can\nleave a hot journal whose zeroed super-journal name still validates, so\n\u003ccode\u003epager_playback()\u003c/code\u003e deletes it without playing it back and\nleaves the database corrupted. Not a transpilation artifact: a plain gcc\nbuild of stock 3.53.3 fails on the same bytes. The SQLite version is\nunchanged at \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_3.html\"\u003e3.53.3\u003c/a\u003e, every\nsupported target carries the patch, and it will be dropped once upstream\nships its own fix.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/b122d0417c01508beb55158faedeb64a0c5bfd8a\"\u003e\u003ccode\u003eb122d04\u003c/code\u003e\u003c/a\u003e\nconn: bind statement arguments in linear time\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/7d5a37693ebb757dcae7aa0f90d7ff833d3807e8\"\u003e\u003ccode\u003e7d5a376\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: slim the v1.60.0 section\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/a604165aed43884e6cf353a9f1a054de9a459b34\"\u003e\u003ccode\u003ea604165\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: the SEH emulation, the re-vendor and the removed lib\nconstants;...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/fb4aac493098a52c9e0d6a018f79f1835161ce0b\"\u003e\u003ccode\u003efb4aac4\u003c/code\u003e\u003c/a\u003e\nvendor.json: stamp lib/ from libsqlite3 v1.15.0 and vec/ from\nlibsqlite_vec v...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/0f7ae7d71679039a81e4f9d93d41fdfec8b81831\"\u003e\u003ccode\u003e0f7ae7d\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027master\u0027 into seh-emulation\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/2e4332404f5cc1be407523259068e5752fc9d22e\"\u003e\u003ccode\u003e2e43324\u003c/code\u003e\u003c/a\u003e\nlib: re-vendor from modernc.org/libsqlite3 v1.15.0 (SEH emulation), pin\nlibc ...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/50380ee041c17a22737c144f87eba4bb6461af1f\"\u003e\u003ccode\u003e50380ee\u003c/code\u003e\u003c/a\u003e\nlib, tests: Go side of the wal.c SEH emulation for Windows in-page\nfaults (\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/221\"\u003e#221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/4552e53ec5342cbb08542166c75c1f381ccdd84d\"\u003e\u003ccode\u003e4552e53\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027vendor-stamp\u0027 into \u0027master\u0027\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/377517737a53611045ebe5ace90dbacb03f35601\"\u003e\u003ccode\u003e3775177\u003c/code\u003e\u003c/a\u003e\nMakefile, doc.go, IRP.md: VENDORFLAGS for debug builds; name every\nrefusal\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/86c97d49058dda7e509f2248862f656ace2e083b\"\u003e\u003ccode\u003e86c97d4\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: link merge request !140\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/compare/v1.59.0...v1.60.1\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMost Recent Ignore Conditions Applied to This Pull\nRequest\u003c/summary\u003e\n\n| Dependency Name | Ignore Conditions |\n| --- | --- |\n| modernc.org/sqlite | [\u003e\u003d 1.34.a, \u003c 1.35] |\n\u003c/details\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dmodernc.org/sqlite\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.59.0\u0026new-version\u003d1.60.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": "2302a671b478f0e401f159a7e5b0e8cf08a1dfec",
      "tree": "96bbc26d5c019b72f10e605b8b52b242233a39c4",
      "parents": [
        "4818a62cdce5fca5939401636edaf40e1bea8f85"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Oct 05 18:36:05 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 18:36:05 2026 -0400"
      },
      "message": "chore: Bump github.com/andybalholm/brotli from 1.2.5 to 1.2.6 (#1358)\n\nBumps\n[github.com/andybalholm/brotli](https://github.com/andybalholm/brotli)\nfrom 1.2.5 to 1.2.6.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/451b9eb6fcc1f329d548f888b9ae2bc372ef434b\"\u003e\u003ccode\u003e451b9eb\u003c/code\u003e\u003c/a\u003e\nImprove Accept-Encoding negotiation\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/3ecb1ba5c440e558c89a1a26bd3021dae32c3f65\"\u003e\u003ccode\u003e3ecb1ba\u003c/code\u003e\u003c/a\u003e\nM4: Prevent spurious matches at distance 0.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/112bc8b76f28c1c764d387d0b5949e2f48df30c1\"\u003e\u003ccode\u003e112bc8b\u003c/code\u003e\u003c/a\u003e\nFastEncoder: explicitly reject matches less than 4 bytes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/3995d4ade7b9709b7fe45327be4fd5b32d0951f0\"\u003e\u003ccode\u003e3995d4a\u003c/code\u003e\u003c/a\u003e\nReader: clear input buffer on reset.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/078bdb070753fd04c38abb06f36706a7ab21ff04\"\u003e\u003ccode\u003e078bdb0\u003c/code\u003e\u003c/a\u003e\nZM, Trio: update history even for very short blocks\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/compare/v1.2.5...v1.2.6\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub.com/andybalholm/brotli\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.2.5\u0026new-version\u003d1.2.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\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": "4818a62cdce5fca5939401636edaf40e1bea8f85",
      "tree": "1d1f32465e24f60402944bde5142fa4f001b025a",
      "parents": [
        "954bc067a43e803c9dcbdb28301fdf8ea841ea0f"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Mon Oct 05 16:52:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 16:52:54 2026 -0400"
      },
      "message": "feat(arrow/ipc): add Reader.ContinueFrom for streams split across blobs (#1346)\n\n### Rationale for this change\n\nFixes #1325. Some callers decode one logical IPC stream that arrives as\na sequence of blobs, where only the first blob carries the schema.\nThrough v18.7.0 they could reuse one `ipc.Reader` by swapping the\nunderlying `io.Reader`. Since v18.8.0, `done` stays set once a blob\nreaches EOF and can\u0027t be reset, so every blob after the first decodes as\nzero rows with a nil error.\n\n### What changes are included in this PR?\n\n- `(*Reader).ContinueFrom(io.Reader) error` and\n`(*Reader).ContinueFromMessageReader(MessageReader) error` resume a\nreader on a new source. The schema and dictionaries already read are\nkept. Both methods also:\n- discard the current record batch, release the previous message reader,\nand clear `done`;\n- refuse to continue a reader that has already failed, so an earlier\nerror can\u0027t be hidden;\n  - refuse to continue a reader that hasn\u0027t read its schema yet.\n- As requested in\nhttps://github.com/apache/arrow-go/issues/1325#issuecomment-5878340460,\na schema message where a record batch is expected now fails with\n`arrow/ipc: unexpected schema message: …`. That marks the reader done,\nand the error is sticky. Before, this gave the generic\ninvalid-message-type error. The other invalid-type errors now also have\ntheir closing parenthesis back.\n\n### Are these changes tested?\n\nYes. `TestReaderContinueFrom` splits a single writer\u0027s output, with an\nint64 column and a dictionary column, into three blobs and checks:\n- all batches round-trip through both `Next` and `Read`, and\ndictionaries carry across blobs;\n- a continuation that starts with a schema message fails loudly and\nstays failed;\n- `ContinueFrom` on a reader whose schema hasn\u0027t been read yet returns\nan error and leaves the reader usable.\n\nThe test uses a checked allocator. Removing the `done` reset makes it\nfail.\n\n### Are there any user-facing changes?\n\nYes: two new methods on `ipc.Reader`, and a clearer error when a schema\nmessage appears mid-stream.\n\n\n### Message size limits (follow-up commit)\n\n`NewReader` built its `messageReader` without the configured limits.\nThose limits were added in #955, which never touched `reader.go`, so a\nstream `Reader` ignored `WithMetadataSizeLimit`/`WithBodySizeLimit` and\nenforced no limit at all. `NewReader` now creates its message reader\nwith the options it was given, and `ContinueFrom` reuses the same\nlimits.\n\n**Behavior change:** stream readers created with `NewReader` now enforce\nthe documented default limits, 64 MiB for metadata and 256 MiB for\nbodies. A stream with larger messages needs\n`WithBodySizeLimit`/`WithMetadataSizeLimit`; passing a value ≤ 0\ndisables the limit. `TestReaderSizeLimits` covers both `NewReader` and\n`ContinueFrom`."
    },
    {
      "commit": "954bc067a43e803c9dcbdb28301fdf8ea841ea0f",
      "tree": "12970eb951755504c757751100987517be602131",
      "parents": [
        "52edbb895a872e55ba49db8c00b748707c4570e0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Oct 02 16:56:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 02 16:56:55 2026 -0400"
      },
      "message": "chore: Bump github.com/andybalholm/brotli from 1.2.4 to 1.2.5 (#1340)\n\nBumps\n[github.com/andybalholm/brotli](https://github.com/andybalholm/brotli)\nfrom 1.2.4 to 1.2.5.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/9140f7ee89196c79405ce26a162949cef2ebc7f4\"\u003e\u003ccode\u003e9140f7e\u003c/code\u003e\u003c/a\u003e\nflate: make the two copies of match splitting look alike\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/f88900b5bca100ab439357195dbe0e1089a8c0be\"\u003e\u003ccode\u003ef88900b\u003c/code\u003e\u003c/a\u003e\nRemove test of implementation details.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/993301586613037fb369f03d9be73b2bf409aa40\"\u003e\u003ccode\u003e9933015\u003c/code\u003e\u003c/a\u003e\nflate: split long matches in the statistics and token loops\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/2e61b232e68d4a2bd2a5e41d89558cad1ab73985\"\u003e\u003ccode\u003e2e61b23\u003c/code\u003e\u003c/a\u003e\nflate: split matches longer than 258 bytes\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/compare/v1.2.4...v1.2.5\"\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.com/andybalholm/brotli\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.2.4\u0026new-version\u003d1.2.5)](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": "52edbb895a872e55ba49db8c00b748707c4570e0",
      "tree": "09a57a8fc308b9b538579f1c3f1f9199072328d0",
      "parents": [
        "68c593e81b6d9b5d7c965966cd51405639dbab93"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Oct 02 16:56:31 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 02 16:56:31 2026 -0400"
      },
      "message": "chore: Bump github.com/klauspost/compress from 1.20.0 to 1.20.1 (#1339)\n\nBumps\n[github.com/klauspost/compress](https://github.com/klauspost/compress)\nfrom 1.20.0 to 1.20.1.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/klauspost/compress/releases\"\u003egithub.com/klauspost/compress\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.20.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ezstd: apply reset options to reused frame decoders by \u003ca\nhref\u003d\"https://github.com/pellared\"\u003e\u003ccode\u003e@​pellared\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1226\"\u003eklauspost/compress#1226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eflate: Report unexpected EOF for truncated Huffman extra bits by \u003ca\nhref\u003d\"https://github.com/rupayon123\"\u003e\u003ccode\u003e@​rupayon123\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1229\"\u003eklauspost/compress#1229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eflate: avoid FMA in EstimatedBits for portable rounding by \u003ca\nhref\u003d\"https://github.com/malt3\"\u003e\u003ccode\u003e@​malt3\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1224\"\u003eklauspost/compress#1224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egzhttp: preserve caller request headers in Transport by \u003ca\nhref\u003d\"https://github.com/jakezwang\"\u003e\u003ccode\u003e@​jakezwang\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1225\"\u003eklauspost/compress#1225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egzhttp: only decompress a request when gzip is the outermost coding\nby \u003ca href\u003d\"https://github.com/youdie006\"\u003e\u003ccode\u003e@​youdie006\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1223\"\u003eklauspost/compress#1223\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd/huff0: Optimizations by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1203\"\u003eklauspost/compress#1203\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1205\"\u003eklauspost/compress#1205\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1207\"\u003eklauspost/compress#1207\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1204\"\u003eklauspost/compress#1204\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1208\"\u003eklauspost/compress#1208\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1211\"\u003eklauspost/compress#1211\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1209\"\u003eklauspost/compress#1209\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1210\"\u003eklauspost/compress#1210\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eflate: Speed improvements by \u003ca\nhref\u003d\"https://github.com/alex\"\u003e\u003ccode\u003e@​alex\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1220\"\u003eklauspost/compress#1220\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1218\"\u003eklauspost/compress#1218\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1216\"\u003eklauspost/compress#1216\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1215\"\u003eklauspost/compress#1215\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1214\"\u003eklauspost/compress#1214\u003c/a\u003e\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1217\"\u003eklauspost/compress#1217\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/xingyaner\"\u003e\u003ccode\u003e@​xingyaner\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1222\"\u003eklauspost/compress#1222\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/jakezwang\"\u003e\u003ccode\u003e@​jakezwang\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1225\"\u003eklauspost/compress#1225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/youdie006\"\u003e\u003ccode\u003e@​youdie006\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1223\"\u003eklauspost/compress#1223\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/pellared\"\u003e\u003ccode\u003e@​pellared\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1226\"\u003eklauspost/compress#1226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/malt3\"\u003e\u003ccode\u003e@​malt3\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1224\"\u003eklauspost/compress#1224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rupayon123\"\u003e\u003ccode\u003e@​rupayon123\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1229\"\u003eklauspost/compress#1229\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/klauspost/compress/compare/v1.20.0...v1.20.1\"\u003ehttps://github.com/klauspost/compress/compare/v1.20.0...v1.20.1\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/klauspost/compress/commit/5d880f230c38a0fc806b9ca1613103a44feff0ac\"\u003e\u003ccode\u003e5d880f2\u003c/code\u003e\u003c/a\u003e\ntests: Pre-release cleanups (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1231\"\u003e#1231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/5ed8a01b0df5d1c6ae5933014b7a901ca5bd1449\"\u003e\u003ccode\u003e5ed8a01\u003c/code\u003e\u003c/a\u003e\nReport unexpected EOF for truncated Huffman extra bits (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1229\"\u003e#1229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/0bed72427862f1d6e18fac32d14509659c7932f7\"\u003e\u003ccode\u003e0bed724\u003c/code\u003e\u003c/a\u003e\nflate: avoid FMA in EstimatedBits for portable rounding (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1224\"\u003e#1224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/147b531210dec3320948ca045feb4f75513c6ed2\"\u003e\u003ccode\u003e147b531\u003c/code\u003e\u003c/a\u003e\nzstd: apply reset options to reused frame decoders (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1226\"\u003e#1226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/58dac78a7837e06b478a286de653ea376a979f06\"\u003e\u003ccode\u003e58dac78\u003c/code\u003e\u003c/a\u003e\ngzhttp: only decompress a request when gzip is the outermost coding (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1223\"\u003e#1223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/9b00a552dd3ceef5cb6079efa17f135aa9783cde\"\u003e\u003ccode\u003e9b00a55\u003c/code\u003e\u003c/a\u003e\ngzhttp: preserve caller request headers in Transport (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1225\"\u003e#1225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/de8f55df9fb3af7aec787942d6b3c71e045bfee9\"\u003e\u003ccode\u003ede8f55d\u003c/code\u003e\u003c/a\u003e\nossfuzz: include zstd seqdec path tests (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1222\"\u003e#1222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/a1c49c64983e0d7f036ea25c8913255f921df630\"\u003e\u003ccode\u003ea1c49c6\u003c/code\u003e\u003c/a\u003e\nflate: precompute literal costs for findMatch (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/ebd819039813720ce6ef7b8810a8d4d08830694c\"\u003e\u003ccode\u003eebd8190\u003c/code\u003e\u003c/a\u003e\nflate: avoid the hand-rolled sorts when generating Huffman codes (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1214\"\u003e#1214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/4dc0d3242fe9d429f1da07a582fa023093040d43\"\u003e\u003ccode\u003e4dc0d32\u003c/code\u003e\u003c/a\u003e\nflate: use separate tables in histogramSplit (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1215\"\u003e#1215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/klauspost/compress/compare/v1.20.0...v1.20.1\"\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.com/klauspost/compress\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.20.0\u0026new-version\u003d1.20.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": "68c593e81b6d9b5d7c965966cd51405639dbab93",
      "tree": "5d52cb003f8ed5a9f06869d5e104571a7f723346",
      "parents": [
        "e9a7361cca27a1049d5046914589424ba9b33b51"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 25 20:27:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 14:27:15 2026 -0400"
      },
      "message": "perf(parquet): reuse DELTA_BYTE_ARRAY discard storage (#1321)\n\n**What**\n\n- Reuse decoder-owned storage while `DELTA_BYTE_ARRAY` values are\ndiscarded.\n- Add correctness tests and discard benchmarks.\n\n**Why**\n\n- `Discard` currently allocates a new byte slice for every discarded\nvalue with a non-empty suffix.\n- Skipping 65,536 values creates 65,535 allocations only to throw the\nvalues away.\n\n**Implementation**\n\n- Copy the first discarded value into owned scratch because the decoded\nsuffix can alias page data.\n- Grow the scratch buffer amortized and reuse it across pages.\n- Keep empty suffixes on the existing zero-copy path.\n- Benchmark prefix-heavy and low-prefix data at 1,024 and 65,536 values.\n\nThe benchmark changes from 65,535 allocations to 0 allocations per\noperation after warm-up, with about 3.3x lower discard time for 65,536\nvalues.\n\nTests:\n\n- `go test ./parquet/internal/encoding -count\u003d1`\n- `go test ./parquet/file -run\n\u0027^(TestWithEOFReader|TestInvalidHeaders|TestInvalidFooter|TestIncompleteMetadata|TestDeltaLengthByteArrayPackingWithNulls|TestDeltaBinaryPackedMultipleBatches|TestPageStreaming.*|TestPrimitiveReader|TestFullSeekRow|TestSkipEmptyRepeatedRows)$\u0027\n-count\u003d1`\n- `go test -race ./parquet/internal/encoding -run\n\u0027TestDeltaByteArrayDecoder(DiscardsAllEmptyValues|DiscardCopiesFirstValue|ReusesDiscardScratch|RejectsInvalidPrefixes|KeepsPartialDecodeResults)$\u0027\n-count\u003d1`\n- `go vet ./parquet/internal/encoding`"
    },
    {
      "commit": "e9a7361cca27a1049d5046914589424ba9b33b51",
      "tree": "cd421376bc780e0a3495bfeb419ea8ca327f2bac",
      "parents": [
        "9c86a0cf736b1eb7642d2bec6507a19c5b4e9806"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Fri Sep 25 12:51:08 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 12:51:08 2026 -0400"
      },
      "message": "feat(arrow/compute): scalar aggregate framework with the count and sum kernels (#1336)\n\n### Rationale for this change\n\nThe compute package has no way to compute a summary value from an array.\n`FuncScalarAgg` exists as\na function kind but nothing implements it: `exec` has a kernel type for\nscalar and vector kernels\nonly, there is no aggregate function type, and `execInternal` returns\n`ErrNotImplemented` for that\nkind. Adding a single aggregate function therefore means adding the\nframework first, which is what\nthis pull request does, together with the first two kernels.\n\nThe design was discussed on #1296 and the interface follows the changes\nasked for there.\n\n### What changes are included in this PR?\n\nThe framework, in `arrow/compute/exec`:\n\n* `ScalarAggKernel`, following the C++ `ScalarAggregateKernel`: an init\nfunction that creates a\nstate, `Consume` to fold one `ExecSpan` into it, `Merge` to combine two\nstates, `Finalize` to\n  produce the result, plus an optional `Cleanup` and an `Ordered` flag.\n* `AggregateResult`, a small carrier which holds either an owned\n`scalar.Scalar` or owned\n`arrow.ArrayData`. `exec` cannot import `compute` and so cannot name a\n`Datum`, but an aggregate\nresult is not always a scalar, so the carrier keeps the exported\ninterface general; the compute\n  executor boxes it into a `Datum`.\n* `AggKernel`, the interface the executor consumes, and `MergeAll`, for\na caller which aggregated\n  partitions of the input separately.\n\nThe executor, in `arrow/compute`:\n\n* `ScalarAggregateFunction`, `funcImpl[exec.ScalarAggKernel]` with exact\ndispatch, its own\n`SetDefaultOptions`, and `AddKernel`/`AddNewKernel` which reject a\nkernel missing any of the four\n  lifecycle functions.\n* `scalarAggExecutor`, reached from `execInternal` for `FuncScalarAgg`.\nIt iterates the input in\nspans without promoting scalars to arrays, as the C++\n`ScalarAggExecutor` does, so a kernel sees\na scalar weighted by the length of the span; it consumes into a single\nstate and finalizes once.\nAn empty input still reaches finalize, which is what lets `min_count`\ndecide the result of an\n  aggregation over no values.\n* State cleanup that runs exactly once: when `Execute` returns, whether\nit finalized or failed\npart way, and through the executor\u0027s `Clear` on the paths where\n`Execute` never ran, such as a\nfailure in `Init`. The result finalize returned owns its own value and\nis unaffected.\n\nThe kernels, in `arrow/compute/internal/kernels/aggregate_basic.go` and\n`arrow/compute/scalar_aggregate.go`:\n\n* `count`, with `CountOptions` and the modes `CountOnlyValid`,\n`CountOnlyNull` and `CountAllRows`,\nover any input type. Counting the valid or the null values of a run-end\nencoded, dictionary or\nunion array needs a logical null count that an `ArraySpan` does not\ncarry, so those return\n`ErrNotImplemented`; `CountAllRows` works for them because it never\nlooks at validity.\n* `sum` over int8..int64 (accumulating into int64), uint8..uint64 and\nbool (into uint64),\nfloat32/float64 (into float64) and the null type (into int64), with the\nC++ semantics for nulls,\n`skip_nulls` and `min_count`, wrap-around on integer overflow, and the\nC++ pairwise summation for\n  floating point input.\n* `ScalarAggregateOptions`, `DefaultScalarAggregateOptions`,\n`DefaultCountOptions`, the `Count` and\n`Sum` convenience wrappers, and registration of both option types for\ndeserialization.\n\nAggregates stay out of `exprs`, which rejects any function whose kind is\nnot `FuncScalar`\n(`arrow/compute/exprs/exec.go`, in the `*expr.ScalarFunction` case),\nmatching C++ where\naggregations run through Acero rather than through expressions.\n\nNot in this pull request: `mean`, `min_max`, `min`, `max`, `any` and\n`all`, which follow in a\nsecond one; and `product`, `count_distinct`, `first`/`last`, decimals,\nthe statistical aggregates\nand the `hash_*` family, which needs a grouper.\n\n### Are these changes tested?\n\nYes.\n\n* Table-driven tests per function over every input type, with and\nwithout nulls, all null, empty,\nsliced, chunked and scalar input, under the default options,\n`skip_nulls\u003dfalse`, and `min_count`\nabove and below the number of valid values. The expected values were\ntaken from the C++\nimplementation through pyarrow for the same fixtures and options; all 91\nof them agree exactly.\n* A differential fuzz run of 14,033 cases across the twelve input types,\nplain, sliced, chunked and\nscalar, with every option combination, compared against pyarrow: 0\nmismatches, 0 error\n  asymmetries, 0 leaked bytes.\n* Three tests cover the framework rather than the kernels. Every\naggregate runs at chunk sizes 1 to\n65 and has to agree with the single-span result, which catches a kernel\nthat writes a cached null\ncount back into the span the executor re-slices. A kernel whose result\nis an array, and one whose\nresult is a scalar backed by an allocated buffer, check that the value\nfinalize returned outlives\nthe cleanup of the state which produced it, and that cleanup runs\nexactly once on success, on\nempty input, on cancellation, and on a consume, finalize or cleanup\nerror. And the executor is\ndriven directly with a batch of scalars whose logical length is greater\nthan one, which the\n  `CallFunction` path cannot produce.\n* The pairwise summation is pinned to 100001 doubles from a fixed\ngenerator; the test also computes\na naive left-to-right sum of the same fixture and asserts that it\ndiffers, so the pinned value can\n  only be reached with the C++ summation order.\n* `go build ./...`, `go vet ./arrow/compute/...`, `go test\n./arrow/compute/...` with and without\n  `-tags assert`, `go test -race`, and golangci-lint at 0 issues.\n\n### Are there any user-facing changes?\n\nYes, all additive. `arrow/compute` gains the `count` and `sum` functions\nin the default registry,\nthe `Count` and `Sum` wrappers, `ScalarAggregateOptions`, `CountOptions`\nand their default helpers,\nand `ScalarAggregateFunction`; `arrow/compute/exec` gains\n`ScalarAggKernel`, `AggregateResult`,\n`AggKernel` and `MergeAll`. Nothing existing changes behaviour:\n`execInternal` previously fell through to its default\nbranch, `ErrNotImplemented: direct execution of ScalarAggregate`, and no\nfunction of that kind was\nregistered."
    },
    {
      "commit": "9c86a0cf736b1eb7642d2bec6507a19c5b4e9806",
      "tree": "cca725576c3cbaf6d1fc002770ff5203e7100fdb",
      "parents": [
        "6754a46c1bc08ce9c7021a89331e989f0dbf68a3"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 25 18:01:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 12:01:49 2026 -0400"
      },
      "message": "perf(arrow/array): copy view buffers directly (#1324)\n\n**What**\n\n- Copy BinaryView headers and ListView sizes directly from `ArrayData`\nduring concatenation.\n\n**Why**\n\n- Avoid one temporary `memory.Buffer` wrapper per input chunk.\n- Reduce allocations for fragmented view arrays.\n\n**Implementation**\n\n- Use the existing `concatFixedWidthBuffers` helper for BinaryView\nheaders and ListView/LargeListView sizes.\n- Added a benchmark for 64, 1,024, and 8,192 chunks.\n- Existing concatenate tests cover sliced and nullable view arrays.\n\nBenchmark on an Apple M1 Pro:\n\n| Case | Runtime before -\u003e after | Allocations before -\u003e after |\n| --- | ---: | ---: |\n| BinaryView, 1,024 chunks | 1.02ms -\u003e 0.93ms | 1,050 -\u003e 25 |\n| BinaryView, 8,192 chunks | roughly flat | 8,227 -\u003e 34 |\n| ListView, 8,192 chunks | 2.27ms -\u003e 1.92ms | 26,477 -\u003e 18,388 |\n| LargeListView, 8,192 chunks | 2.28ms -\u003e 1.95ms | 26,124 -\u003e 17,304 |\n\nTests:\n\n- `go test ./arrow/array -count\u003d1`\n- `go vet ./arrow/array`\n- `git diff --check`"
    },
    {
      "commit": "6754a46c1bc08ce9c7021a89331e989f0dbf68a3",
      "tree": "ed705304c7cb60460b6620cde612fabbe6473021",
      "parents": [
        "871b21973ef1a52baba41daa16f2bbfa67f21197"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 23 14:31:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 14:31:20 2026 -0400"
      },
      "message": "chore: Bump github.com/pierrec/lz4/v4 from 4.1.29 to 4.1.30 (#1335)\n\nBumps [github.com/pierrec/lz4/v4](https://github.com/pierrec/lz4) from\n4.1.29 to 4.1.30.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pierrec/lz4/releases\"\u003egithub.com/pierrec/lz4/v4\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.30\u003c/h2\u003e\n\u003cp\u003eMultiple contributed fixes and performance enhancements.\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/pierrec/lz4/commit/e692a9f4ef963d14ccf688009c288120dcc541b0\"\u003e\u003ccode\u003ee692a9f\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/256\"\u003e#256\u003c/a\u003e from\ntwmb/reuse-frame-data-block\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/fb8e53b3cce5519adfe388c506f414cc31bbffe4\"\u003e\u003ccode\u003efb8e53b\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/255\"\u003e#255\u003c/a\u003e from\ntwmb/fix-close-reset-legacy\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/aaef419ecbeda38dc1d85f5194502fa7a7abe3c8\"\u003e\u003ccode\u003eaaef419\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/254\"\u003e#254\u003c/a\u003e from\nHarveyBase/fix/issue-192-flush-buffer\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/10394471684dd3bf6d5b2baef8bd2cc8fe07b0a0\"\u003e\u003ccode\u003e1039447\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/251\"\u003e#251\u003c/a\u003e from\nyoudie006/writeto-after-partial-read\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/b05d2d66ddce6bb1cce3b73805cf57b64cfb74b7\"\u003e\u003ccode\u003eb05d2d6\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/252\"\u003e#252\u003c/a\u003e from\nhoneycombio/lizf.followup-amd64-zen3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/494edb14513d9ebcab2bd52e1212af87144f36f6\"\u003e\u003ccode\u003e494edb1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/231\"\u003e#231\u003c/a\u003e from\nsidd1809/fix-decompress-reader-v4122\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/4e8b666d527cc20743fd2126791f78b2be53f0f0\"\u003e\u003ccode\u003e4e8b666\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pierrec/lz4/issues/253\"\u003e#253\u003c/a\u003e from\nlizthegrey/lizf.add-go127-ci\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/01e8afe7840a5fd143361bc980dcb0a4c566b199\"\u003e\u003ccode\u003e01e8afe\u003c/code\u003e\u003c/a\u003e\nlz4stream: reuse the frame data block across Reset in non concurrent\nmode\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/ffe2104786fdd43e26a9aa24e5c8c35be0707a15\"\u003e\u003ccode\u003effe2104\u003c/code\u003e\u003c/a\u003e\nlz4stream: do not leak an abandoned concurrent read on Reset\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pierrec/lz4/commit/b9a9ecbb7de8fb3c6f29014abab2150921316f20\"\u003e\u003ccode\u003eb9a9ecb\u003c/code\u003e\u003c/a\u003e\nbench: load the gzipped gettysburg file in BenchmarkWriterReset\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pierrec/lz4/compare/v4.1.29...v4.1.30\"\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.com/pierrec/lz4/v4\u0026package-manager\u003dgo_modules\u0026previous-version\u003d4.1.29\u0026new-version\u003d4.1.30)](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": "871b21973ef1a52baba41daa16f2bbfa67f21197",
      "tree": "db1393d3c8e3f420df409b2d1318db12c30fa4b1",
      "parents": [
        "d939135c478c1283b46a25fadcc522f4ae258221"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Wed Sep 23 20:19:55 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 11:19:55 2026 -0700"
      },
      "message": "perf(compute): vectorize mixed 64-bit filters (#1311)\n\n## What changed\n\n- Add AVX2 and ARM64 NEON paths for null-free 64-bit fixed-width filters.\n- Compact two groups of four uint64 values from each filter byte with table-driven permutations and exact-size stores.\n- Keep the existing path for nulls, unsupported CPUs, short or unaligned inputs, dense masks, and noasm builds.\n- Add exhaustive mask tests, guard tests, and int64/float64 benchmarks.\n\n## Benchmark\n\nApple M1 Pro, macOS arm64, Go 1.26.3. Median of five runs. The baseline uses GODEBUG\u003dcpu.all\u003doff.\n\n| Case | Baseline | NEON | Speedup |\n| --- | ---: | ---: | ---: |\n| int64, 1M, alternating | 3.97 ms | 0.45 ms | 8.7x |\n| int64, 1M, random50 | 2.86 ms | 1.61 ms | 1.8x |\n| float64, 1M, alternating | 4.07 ms | 0.47 ms | 8.6x |\n| float64, 1M, random50 | 2.92 ms | 1.65 ms | 1.8x |\n\nThe mixed-mask cases also go from 33 to 32 allocations per operation. The output allocation is still the main B/op cost.\n\n## Tests\n\n- Full go test suite with Parquet test data\n- go test ./arrow/compute/...\n- go test -tags noasm ./arrow/compute/...\n- go test -race ./arrow/compute/internal/kernels ./arrow/compute\n- amd64 cross-build of the kernel package"
    },
    {
      "commit": "d939135c478c1283b46a25fadcc522f4ae258221",
      "tree": "2dc175eb0aa05c8c9faf37bfc142eb1002ee1f28",
      "parents": [
        "cacefb5534cc65ff578dbf283c5f5c99c30d7a9c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 23 13:41:03 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 13:41:03 2026 -0400"
      },
      "message": "chore: Bump google.golang.org/grpc from 1.83.2 to 1.84.0 (#1334)\n\nBumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from\n1.83.2 to 1.84.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/releases\"\u003egoogle.golang.org/grpc\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 1.84.0\u003c/h2\u003e\n\u003ch1\u003eBehavior Changes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003estats/otel: The \u003ccode\u003egrpc.lb.pick_first.*\u003c/code\u003e metrics have been\nremoved and replaced with \u003ccode\u003egrpc.subchannel.*\u003c/code\u003e metrics. See \u003ca\nhref\u003d\"https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md\"\u003egRFC\nA94\u003c/a\u003e for more details. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9215\"\u003e#9215\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eNew Features\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003exds: Add support for \u003ccode\u003econtains_match\u003c/code\u003e in route header\nmatchers. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9223\"\u003e#9223\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBug Fixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eclient: Fix a bug where a \u003ccode\u003eClientConn\u003c/code\u003e could get\npermanently stuck in IDLE when an RPC was canceled during stream\ncreation. Previously, such cancellations triggered stream cleanup twice,\ncorrupting the channel\u0027s idleness state and causing subsequent RPCs to\nfail with deadline exceeded errors. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9191\"\u003e#9191\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/utkuozdemir\"\u003e\u003ccode\u003e@​utkuozdemir\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eclient: Fix a bug where non-gRPC HTTP responses ending with an empty\nDATA frame failed the RPC with status code \u003ccode\u003eInternal\u003c/code\u003e instead\nof preserving the HTTP-mapped status code and response body. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9217\"\u003e#9217\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/chengxilo\"\u003e\u003ccode\u003e@​chengxilo\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ecredentials: Validate metadata returned by per-RPC credentials,\nfailing the RPC with status code \u003ccode\u003eInternal\u003c/code\u003e if invalid keys\nor values are found. Previously, invalid metadata from credentials was\nsent to the server in outgoing HTTP/2 requests. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9202\"\u003e#9202\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/buger\"\u003e\u003ccode\u003e@​buger\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ecredentials/sts: Prevent potential token leakage by disallowing HTTP\nredirects during STS token exchange. Previously, 3xx redirects were\nfollowed automatically, replaying the request body containing\nauthentication tokens to the redirect destination. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9299\"\u003e#9299\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003erandomsubsetting: Ignore endpoints that contain no addresses.\nPreviously, this could cause the policy to panic while computing hashes.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9259\"\u003e#9259\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/fallintoplace\"\u003e\u003ccode\u003e@​fallintoplace\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003estats/otel: Ensure method names are populated in trace spans when\nmetrics are disabled. Previously, running with tracing enabled and\nmetrics disabled resulted in server trace spans lacking the RPC method\nname (recording only \u0026quot;Recv.\u0026quot;). (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9262\"\u003e#9262\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etransport: Return \u003ccode\u003eio.ErrUnexpectedEOF\u003c/code\u003e when EOF is\nencountered after partial header or message body reads. Previously,\npartial reads could return a plain \u003ccode\u003eio.EOF\u003c/code\u003e, failing to\ndistinguish truncated data from a clean end of stream. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9204\"\u003e#9204\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/buger\"\u003e\u003ccode\u003e@​buger\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003etransport: Validate metadata supplied by balancers (in\n\u003ccode\u003ePickResult.Metadata\u003c/code\u003e) and resolver addresses, failing the\nRPC with status code \u003ccode\u003eInternal\u003c/code\u003e if invalid keys or values are\nfound. Previously, invalid metadata from these sources was sent to the\nserver in outgoing HTTP/2 requests. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9203\"\u003e#9203\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/buger\"\u003e\u003ccode\u003e@​buger\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds: Fix a rare corner case that could prevent a cluster from being\nremoved when it is no longer in use. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9140\"\u003e#9140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003exds: Fix panic during route matching for routes containing header\nmatchers with empty \u003ccode\u003eexact_match\u003c/code\u003e strings. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9223\"\u003e#9223\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds: Reject routes containing header matchers with empty\n\u003ccode\u003eprefix_match\u003c/code\u003e or \u003ccode\u003esuffix_match\u003c/code\u003e strings.\nPreviously, this caused a panic during route matching. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9223\"\u003e#9223\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds: Fix EDS drop policies being applied at a much lower rate than\nconfigured due to an integer overflow. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9257\"\u003e#9257\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds: Reject EDS resources containing drop policies with unsupported\ndenominators. Previously, such resources caused the client to panic when\ncalculating drop rates. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9218\"\u003e#9218\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds/rbac: Reject RBAC configurations containing nested\n\u003ccode\u003ePrincipal\u003c/code\u003e or \u003ccode\u003ePermission\u003c/code\u003e rules with\n\u003ccode\u003e:scheme\u003c/code\u003e or \u003ccode\u003egrpc-\u003c/code\u003e prefixed header matchers.\nPreviously, such configurations could cause DENY policies to fail open.\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9258\"\u003e#9258\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds/rbac: Rewrite \u003ccode\u003ehost\u003c/code\u003e header matchers to\n\u003ccode\u003e:authority\u003c/code\u003e in nested \u003ccode\u003ePrincipal\u003c/code\u003e and\n\u003ccode\u003ePermission\u003c/code\u003e rules. Previously, this rewrite only applied to\ntop-level rules, causing nested \u003ccode\u003ehost\u003c/code\u003e matchers to never\nmatch incoming requests and DENY policies to fail open. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9258\"\u003e#9258\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003exds/rbac: Reject \u003ccode\u003eCidrRanges\u003c/code\u003e with an unset prefix\nlength. Previously, an omitted \u003ccode\u003eprefix_len\u003c/code\u003e field caused a\npanic during RBAC configuration parsing. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9250\"\u003e#9250\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/nvxbug\"\u003e\u003ccode\u003e@​nvxbug\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ePerformance Improvements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003etransport: Avoid a heap allocation when flushing shared write\nbuffers. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9233\"\u003e#9233\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eSpecial Thanks: \u003ca\nhref\u003d\"https://github.com/zaidoon1\"\u003e\u003ccode\u003e@​zaidoon1\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ecredentials/alts: Support dynamic frame size negotiation and add the\n\u003ccode\u003eGRPC_GO_EXPERIMENTAL_ALTS_MAX_FRAME_SIZE\u003c/code\u003e environment\nvariable (default 4KiB, max 512KiB) to configure the maximum ALTS record\nframe size. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9268\"\u003e#9268\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/e84aa5ab15d1d2b29d54f838312ad490cb7551a8\"\u003e\u003ccode\u003ee84aa5a\u003c/code\u003e\u003c/a\u003e\nChange version to 1.84.0 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9324\"\u003e#9324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/c5ae88df420fcc0c24c6267bdf8cdd3b2711ba2c\"\u003e\u003ccode\u003ec5ae88d\u003c/code\u003e\u003c/a\u003e\nCherrypick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9204\"\u003e#9204\u003c/a\u003e\nand \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9321\"\u003e#9321\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9407\"\u003e#9407\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/a592f6a8d26237b5476eb18b08ee1203393e27b9\"\u003e\u003ccode\u003ea592f6a\u003c/code\u003e\u003c/a\u003e\nCherrypick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9351\"\u003e#9351\u003c/a\u003e\nand \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9404\"\u003e#9404\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9408\"\u003e#9408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/d5a41119e0e3189ea913cf839586ce34a44f1a3f\"\u003e\u003ccode\u003ed5a4111\u003c/code\u003e\u003c/a\u003e\ncherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9365\"\u003e#9365\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9370\"\u003e#9370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/89d55e04f9f3213a2de543e00df15f1468ea9d9a\"\u003e\u003ccode\u003e89d55e0\u003c/code\u003e\u003c/a\u003e\ncherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9346\"\u003e#9346\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9372\"\u003e#9372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/8a9f866584e36f0adb8c60a779581ab4bb486d1b\"\u003e\u003ccode\u003e8a9f866\u003c/code\u003e\u003c/a\u003e\nCherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9332\"\u003e#9332\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9338\"\u003e#9338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/f8b54e7c913347537e168f5219d8f6cbaeb8860b\"\u003e\u003ccode\u003ef8b54e7\u003c/code\u003e\u003c/a\u003e\nCherry-pick \u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9331\"\u003e#9331\u003c/a\u003e to\nv1.84.x (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9334\"\u003e#9334\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/30ce1d594fa9d7b86ff9d3d7dd7873ef0c161acf\"\u003e\u003ccode\u003e30ce1d5\u003c/code\u003e\u003c/a\u003e\nxds: support injecting bootstrap and server config into HTTP filter\nconfig pa...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/54c743e4e9829208f264e092160d2b0768a01bf2\"\u003e\u003ccode\u003e54c743e\u003c/code\u003e\u003c/a\u003e\nextproc : wait for async RPC to complete in test (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9311\"\u003e#9311\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/commit/538bb2f7af6e36be46ec1d2ae90f65b972f14083\"\u003e\u003ccode\u003e538bb2f\u003c/code\u003e\u003c/a\u003e\nendpointsharding: decouple locking, and simplify ChildState API (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-go/issues/9290\"\u003e#9290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/grpc/grpc-go/compare/v1.83.2...v1.84.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "cacefb5534cc65ff578dbf283c5f5c99c30d7a9c",
      "tree": "405759add81488cf7b1136f63c2272652c0ea3ec",
      "parents": [
        "6f2e89599a990f466b89374835762e8ab1a6e422"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 21 15:56:57 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 15:56:57 2026 -0400"
      },
      "message": "chore: Bump modernc.org/sqlite from 1.58.0 to 1.59.0 (#1333)\n\nBumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.58.0\nto 1.59.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md\"\u003emodernc.org/sqlite\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eEntries for v1.38.1 through v1.44.1 and for v1.49.1 were added on\n2026-09-05, reconstructed from the git history and the merge requests\nthey cite; they were missing at release time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-15 v1.59.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDocument two properties of connections in the package documentation:\nstate set on a pooled connection -- PRAGMAs set with \u003ccode\u003eExec\u003c/code\u003e,\nATTACHed databases, temporary tables, anything registered through\n\u003ccode\u003esql.Conn.Raw\u003c/code\u003e -- is inherited by the next caller to borrow\nit, and a driver connection reached through \u003ccode\u003eRaw\u003c/code\u003e is not safe\nfor concurrent use even though every connection is opened\n\u003ccode\u003eSQLITE_OPEN_FULLMUTEX\u003c/code\u003e. Documentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eStrictPragmas\u003c/code\u003e, \u003cstrong\u003eopt-in and off by\ndefault\u003c/strong\u003e: once enabled, a connection whose \u003ccode\u003e_pragma\u003c/code\u003e\nDSN value holds more than one SQL statement fails to open with\n\u003ccode\u003eErrMultiStatementPragma\u003c/code\u003e, before any DSN parameter is\napplied. A \u003ccode\u003e_pragma\u003c/code\u003e value runs as SQL text, so\n\u003ccode\u003e_pragma\u003dforeign_keys(1);ATTACH \u0027x.db\u0027 AS x\u003c/code\u003e also attaches,\nand creates, \u003ccode\u003ex.db\u003c/code\u003e; the \u003ccode\u003eDriver.Open\u003c/code\u003e\ndocumentation said \u0026quot;a PRAGMA statement\u0026quot; and now says what\nactually happens. Enabling it is recommended for any application whose\nDSN is not a compile-time constant.\u003c/li\u003e\n\u003cli\u003eDocument SQLite\u0027s own URI query parameters on\n\u003ccode\u003eDriver.Open\u003c/code\u003e: \u003ccode\u003emode\u003c/code\u003e, \u003ccode\u003ecache\u003c/code\u003e,\n\u003ccode\u003eimmutable\u003c/code\u003e, \u003ccode\u003enolock\u003c/code\u003e, \u003ccode\u003epsow\u003c/code\u003e and\n\u003ccode\u003emodeof\u003c/code\u003e. Every connection is opened with\n\u003ccode\u003eSQLITE_OPEN_URI\u003c/code\u003e, so in a DSN starting with\n\u003ccode\u003efile:\u003c/code\u003e these have always worked; only the driver\u0027s own keys\nwere listed. The docstring also spells out the trap that a plain file\nname has its query stripped before SQLite sees it, so\n\u003ccode\u003e/path/to.db?mode\u003dro\u003c/code\u003e opens read-write. Documentation\nonly.\u003c/li\u003e\n\u003cli\u003eResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/257\"\u003e#257\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/257\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/257\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eIRP.md\u003c/code\u003e, an incident response plan: who runs a\nresponse when there are two maintainers in different time zones, how a\nreport is scoped across the three layers this module is built from, the\nfix path for each, and what to do when a released version is itself the\nproblem -- a published Go module version cannot be recalled, so\n\u003ccode\u003eretract\u003c/code\u003e plus a new release is the remedy. Linked from\n\u003ccode\u003eSECURITY.md\u003c/code\u003e. Documentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eCONTRIBUTING.md\u003c/code\u003e: where to send a merge request,\nwhich files are generated and must not be edited by hand, how to build\nand test across the 20 supported targets, and the\n\u003ccode\u003eAUTHORS\u003c/code\u003e/\u003ccode\u003eCONTRIBUTORS\u003c/code\u003e convention. Contribution\nguidance previously existed only in \u003ccode\u003eGOVERNANCE.md\u003c/code\u003e and\n\u003ccode\u003eHACKING.md\u003c/code\u003e, neither of which a first-time contributor is\nlikely to open. Documentation only.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSECURITY.md\u003c/code\u003e: report a vulnerability through GitHub\nprivate vulnerability reporting, a confidential GitLab issue, or the\nproject\u0027s Service Desk address, never a public issue. It states what is\nin scope -- including transpilation faults, where the generated Go does\nnot faithfully implement the C it came from -- that only the latest\nrelease is supported, and that a confirmed report is disclosed through a\nGitHub advisory, an entry in the Go vulnerability database so\n\u003ccode\u003egovulncheck\u003c/code\u003e reports it, and a release note. Documentation\nonly.\u003c/li\u003e\n\u003cli\u003eShip a Software Bill of Materials: \u003ccode\u003esbom.cdx.json\u003c/code\u003e\n(CycloneDX 1.6) and \u003ccode\u003esbom.spdx.json\u003c/code\u003e (SPDX 2.3), both\nvalidated against the published schemas, with \u003ccode\u003eSBOM.md\u003c/code\u003e\nexplaining what they cover. They name what an SBOM built from the module\ngraph cannot see -- the transpiled SQLite 3.53.4 and\n\u003ccode\u003esqlite-vec\u003c/code\u003e C, and the upstreams\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e vendors, musl among them -- and mark every\ncomponent as linked into your binary, test-only, or compiled into\nnothing. Documentation only.\u003c/li\u003e\n\u003cli\u003eShip \u003ccode\u003eLICENSE-3RD-PARTY.md\u003c/code\u003e, a transitively flattened\ninventory of every third-party component this module carries: the whole\nGo module graph, the transpiled SQLite and \u003ccode\u003esqlite-vec\u003c/code\u003e C\nthat no \u003ccode\u003ego.mod\u003c/code\u003e names, and the upstreams\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e carries in turn, musl among them. It\nreproduces all seventeen distinct license texts in full and separates\nwhat is linked into your binary from what only appears in the module\ngraph. The \u003ccode\u003eLICENSE\u003c/code\u003e name prefix is what makes \u003ccode\u003ego mod\nvendor\u003c/code\u003e carry it into downstream \u003ccode\u003evendor/\u003c/code\u003e trees.\nDocumentation only.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-15 v1.59.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eBump the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to \u003ca\nhref\u003d\"https://gitlab.com/cznic/libc/-/tags/v1.75.7\"\u003ev1.75.7\u003c/a\u003e and\nre-vendor \u003ccode\u003elib/\u003c/code\u003e and \u003ccode\u003evec/\u003c/code\u003e. The transpiled SQLite\nis unchanged, still 3.53.4. On the Linux targets the new libc replaces\ntranspiled musl \u003ccode\u003ememcpy\u003c/code\u003e, \u003ccode\u003ememmove\u003c/code\u003e,\n\u003ccode\u003ememset\u003c/code\u003e, \u003ccode\u003ememcmp\u003c/code\u003e and \u003ccode\u003estrlen\u003c/code\u003e with\nnative Go, cutting CPU time on query-heavy workloads by up to a third;\nsee the new Performance section below. As always, downstream\n\u003ccode\u003ego.mod\u003c/code\u003e files must pin the same\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this repository\u0027s\n\u003ccode\u003ego.mod\u003c/code\u003e does; see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHand user-defined function and aggregate callbacks a pooled\n\u003ccode\u003e*FunctionContext\u003c/code\u003e instead of allocating a fresh one per\ncall, removing the last driver-side allocation per invocation. Like the\nargument slice, it is valid only for the duration of the callback and\nmust not be retained past its return. Updates [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/226\"\u003e#226\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/226\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/226\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/137\"\u003e#137\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/137\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/137\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd regression tests pinning the identity and the pooling of that\ncontext. See [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/138\"\u003e#138\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/138\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/138\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003cli\u003eAdd a Performance section to the package documentation: measured\nCPU-time ratios of this driver against the same SQLite compiled from C,\nwhere the gap comes from, and the two consequences for applications —\nindex the columns that \u003ccode\u003eORDER BY\u003c/code\u003e, \u003ccode\u003eGROUP BY\u003c/code\u003e and\n\u003ccode\u003eWHERE\u003c/code\u003e use, and bound the \u003ccode\u003edatabase/sql\u003c/code\u003e pool\nwith \u003ccode\u003eSetMaxOpenConns\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-01 v1.58.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_4.html\"\u003eSQLite 3.53.4\u003c/a\u003e. It\ncarries upstream\u0027s own fix for the journal-rollback data-corruption bug,\nso the local super-journal patch v1.56.0 introduced is dropped; recovery\nbehavior is unchanged. Also bumps the pinned\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.75.6; as always, downstream modules\nmust pin the same version this one does, see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd opt-in support for \u003cstrong\u003eLinux Open File Description (OFD)\nlocks\u003c/strong\u003e on database files, \u003cstrong\u003eoff by default\u003c/strong\u003e;\nwithout opting in, locking behavior is byte-for-byte that of previous\nreleases. A POSIX record lock is owned by the (process, inode) pair, so\nany \u003ccode\u003eClose\u003c/code\u003e of any descriptor of the database file anywhere\nin the process silently strips SQLite\u0027s locks; OFD locks survive that.\nEnable it process-wide with \u003ccode\u003eMODERNC_SQLITE_OFD_LOCK\u003d1\u003c/code\u003e in\nthe environment, or with the new \u003ccode\u003eOFDLocking(true)\u003c/code\u003e before\nthe first connection is opened; \u003ccode\u003eOFDLockingEnabled\u003c/code\u003e reports\nthe mode in effect, and the new \u003ccode\u003eErrOFDLockingTooLate\u003c/code\u003e and\n\u003ccode\u003eErrOFDLockingUnavailable\u003c/code\u003e report a switch attempted too late\nand a platform or filesystem without the feature. Why it is process-wide\nrather than a DSN parameter, what WAL\u0027s \u003ccode\u003e-shm\u003c/code\u003e coordination\nstill uses, and the \u003ccode\u003e/proc/locks\u003c/code\u003e measurements behind the\ndesign are in [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/136\"\u003e#136\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/136\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/136\u003c/a\u003e),\nthanks Nathan Herring (\u003ca\nhref\u003d\"https://gitlab.com/technosloth\"\u003e\u003ccode\u003e@​technosloth\u003c/code\u003e\u003c/a\u003e),\nand thanks Gani Georgiev (\u003ca\nhref\u003d\"https://gitlab.com/ganigeorgiev\"\u003e\u003ccode\u003e@​ganigeorgiev\u003c/code\u003e\u003c/a\u003e)\nfor pressing the opt-in default!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-19 v1.57.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an opt-in \u003ccode\u003e_defensive\u003c/code\u003e DSN query parameter turning on\nSQLite\u0027s defensive mode for the connection. On such a connection\n\u003ccode\u003ePRAGMA writable_schema\u003dON\u003c/code\u003e, \u003ccode\u003ePRAGMA\njournal_mode\u003dOFF\u003c/code\u003e and \u003ccode\u003ePRAGMA schema_version\u003dN\u003c/code\u003e become\nsilent no-ops, and writes to a virtual table\u0027s shadow tables and to\n\u003ccode\u003esqlite_dbpage\u003c/code\u003e fail. It is a hardening measure, not a\nsandbox for hostile database files, for which it is only one of the\nsteps \u003ca href\u003d\"https://www.sqlite.org/security.html\"\u003eSQLite\nrecommends\u003c/a\u003e, and it is a property of the connection, not of the file.\nAbsent, or \u003ccode\u003e_defensive\u003d0\u003c/code\u003e, nothing changes.\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_defensive\u003d1\u003c/code\u003e together with\n\u003ccode\u003e_journal_mode\u003dOFF\u003c/code\u003e (or \u003ccode\u003e_journal\u003dOFF\u003c/code\u003e) instead of\nopening a connection in which neither was honoured: SQLite turns that\nPRAGMA into a no-op that still reports success. Only DSNs using the new\nparameter can be affected. See [GitHub pull request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/6\"\u003e#6\u003c/a\u003e](\u003ca\nhref\u003d\"https://redirect.github.com/modernc-org/sqlite/pull/6\"\u003emodernc-org/sqlite#6\u003c/a\u003e),\nthanks wsman!\u003c/li\u003e\n\u003cli\u003eShip the \u003ca\nhref\u003d\"https://github.com/asg017/sqlite-vec\"\u003esqlite-vec\u003c/a\u003e license\nnotice this module has been missing since \u003ccode\u003evec/\u003c/code\u003e arrived in\nv1.47.0. sqlite-vec is Copyright (c) 2024 Alex Garcia, dual-licensed\nApache-2.0 OR MIT and used here under MIT; the text now ships as\n\u003ccode\u003eLICENSE-SQLITE_VEC\u003c/code\u003e, and \u003ccode\u003emake vendor\u003c/code\u003e fails\nrather than quietly dropping it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe SQLite notice is renamed from\n\u003ccode\u003eSQLITE-LICENSE\u003c/code\u003e to \u003ccode\u003eLICENSE-SQLITE\u003c/code\u003e\u003c/strong\u003e;\nupdate any direct links to it. Its contents are unchanged. The rename is\nwhat makes \u003ccode\u003ego mod vendor\u003c/code\u003e carry both notices into downstream\n\u003ccode\u003evendor/\u003c/code\u003e trees: it selects license files by name prefix, so\na name merely ending in \u003ccode\u003eLICENSE\u003c/code\u003e was never propagated.\u003c/li\u003e\n\u003cli\u003eLet a caller-constructed \u003ccode\u003eDriver\u003c/code\u003e register its own\nfunctions, collations and virtual table modules, through new\n\u003ccode\u003eRegisterFunction\u003c/code\u003e, \u003ccode\u003eRegisterScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterDeterministicScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterCollationUtf8\u003c/code\u003e and \u003ccode\u003eRegisterModule\u003c/code\u003e\nmethods plus \u003ccode\u003eMust*\u003c/code\u003e variants, and let\n\u003ccode\u003evtab.RegisterModule\u003c/code\u003e honour its \u003ccode\u003edb\u003c/code\u003e argument.\n\u003cstrong\u003eBehavior change\u003c/strong\u003e: \u003ccode\u003evtab.RegisterModule(db,\n...)\u003c/code\u003e where \u003ccode\u003edb\u003c/code\u003e was opened on a caller-constructed\n\u003ccode\u003eDriver\u003c/code\u003e used to discard \u003ccode\u003edb\u003c/code\u003e and land on the\nregistered \u003ccode\u003esqlite\u003c/code\u003e driver, reaching every connection in the\nprocess; it now lands on that \u003ccode\u003eDriver\u003c/code\u003e alone, so a\n\u003ccode\u003esql.Open(\u0026quot;sqlite\u0026quot;)\u003c/code\u003e connection that used to\nresolve such a module gets \u003ccode\u003eno such module\u003c/code\u003e. Everything else\nis additive, and the isolating change discussed in [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/254\"\u003e#254\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/254\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/254\u003c/a\u003e)\nis deliberately not made here. See [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/135\"\u003e#135\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/135\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/135\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003cli\u003ePromote \u003ccode\u003efreebsd/386\u003c/code\u003e, \u003ccode\u003efreebsd/arm\u003c/code\u003e and\n\u003ccode\u003enetbsd/amd64\u003c/code\u003e from experimental to fully supported. The\npackage documentation\u0027s platform table had carried seventeen entries\nwhile this module shipped, cross-built and tested twenty; all three have\nbeen in the builder matrix since v1.53.0 and pass the full suite on this\nrelease\u0027s commit. Documentation only — \u003ccode\u003elib/\u003c/code\u003e is\nbyte-for-byte what v1.56.0 shipped.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-03 v1.56.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRe-vendor the transpiled sources, picking up\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e\u0027s patch for an \u003cstrong\u003eupstream\ndata-corruption bug in SQLite 3.53.3\u0027s journal rollback\u003c/strong\u003e. A\ncrash during the commit of a multi-database (ATTACH) transaction can\nleave a hot journal whose zeroed super-journal name still validates, so\n\u003ccode\u003epager_playback()\u003c/code\u003e deletes it without playing it back and\nleaves the database corrupted. Not a transpilation artifact: a plain gcc\nbuild of stock 3.53.3 fails on the same bytes. The SQLite version is\nunchanged at \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_3.html\"\u003e3.53.3\u003c/a\u003e, every\nsupported target carries the patch, and it will be dropped once upstream\nships its own fix.\u003c/li\u003e\n\u003cli\u003eTwo targets change beyond that patch. \u003ccode\u003elinux/s390x\u003c/code\u003e now\nallocates C bit-fields MSB-first as the big-endian ABI requires, from\n\u003ccode\u003emodernc.org/cc/v4\u003c/code\u003e v4.29.1. \u003ccode\u003elinux/riscv64\u003c/code\u003e was\nregenerated on a host running GCC 11.4.0 rather than 13.3.0, which drops\nsome unreferenced compiler-predefined macro constants and changes what\n\u003ccode\u003ePRAGMA compile_options\u003c/code\u003e reports; no SQLite code generation\ndiffers. Every other target is byte-identical to v1.55.0 apart from the\npatch above.\u003c/li\u003e\n\u003cli\u003eBump the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.74.4 and the\nremaining dependencies to their current releases. v1.74.2 and v1.74.3\nare retracted upstream over a \u003ccode\u003efreeaddrinfo\u003c/code\u003e lock leak that\ndeadlocks name resolution, and v1.74.4 is the fix. As always, downstream\nmodules must pin the same \u003ccode\u003emodernc.org/libc\u003c/code\u003e version this one\ndoes, see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eNewConnector\u003c/code\u003e, returning a\n\u003ccode\u003edatabase/sql/driver.Connector\u003c/code\u003e for use with\n\u003ccode\u003esql.OpenDB\u003c/code\u003e. It opens the same connections\n\u003ccode\u003esql.Open(\u0026quot;sqlite\u0026quot;, dsn)\u003c/code\u003e does, from the same\nregistered driver, so every function, collation, connection hook and\nvirtual table module registered through this package applies to them. It\nexists for callers that need to interpose on the physical connections\n\u003ccode\u003edatabase/sql\u003c/code\u003e opens — tracing, metrics, connection-scoped\nsetup — for which the alternative was \u003ccode\u003esql.Register\u003c/code\u003e, which\nis process-global, panics on a repeated name and cannot be undone. A\nrunnable sample is in \u003ccode\u003eexamples/connector\u003c/code\u003e. Resolves [GitLab\nissue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/253\"\u003e#253\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/253\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/253\u003c/a\u003e),\nthanks Alessandro Segala (\u003ca\nhref\u003d\"https://gitlab.com/ItalyPaleAle\"\u003e\u003ccode\u003e@​ItalyPaleAle\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003cli\u003eDocumentation sweep. \u003ccode\u003eopenbsd/amd64\u003c/code\u003e and\n\u003ccode\u003eopenbsd/arm64\u003c/code\u003e join the supported platforms table, the\n\u003ccode\u003evfs\u003c/code\u003e DSN query parameter is documented alongside the others\non \u003ccode\u003eDriver.Open\u003c/code\u003e, the stale \u003ccode\u003ego generate\u003c/code\u003e and\n\u003ccode\u003eGO_GENERATE\u003c/code\u003e instructions are replaced by\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e and \u003ccode\u003emake vendor\u003c/code\u003e, and\n\u003ccode\u003evec\u003c/code\u003e and \u003ccode\u003evfs\u003c/code\u003e gained the package doc comments\nthey were missing. A caller-constructed \u003ccode\u003esqlite.Driver\u003c/code\u003e is\nnow documented as \u003cem\u003enot\u003c/em\u003e being the driver this package registers\nas \u003ccode\u003e\u0026quot;sqlite\u0026quot;\u003c/code\u003e: it carries none of the package-level\nfunctions and collations, so it can evaluate \u003ccode\u003eupper(x)\u003c/code\u003e or\n\u003ccode\u003edate(x)\u003c/code\u003e differently. Documentation only.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-07-20 v1.55.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003egithub.com/mattn/go-sqlite3\u003c/code\u003e-compatible shorthand\nDSN query parameters to ease migration from that driver:\n\u003ccode\u003e_busy_timeout\u003c/code\u003e/\u003ccode\u003e_timeout\u003c/code\u003e,\n\u003ccode\u003e_foreign_keys\u003c/code\u003e/\u003ccode\u003e_fk\u003c/code\u003e,\n\u003ccode\u003e_journal_mode\u003c/code\u003e/\u003ccode\u003e_journal\u003c/code\u003e,\n\u003ccode\u003e_synchronous\u003c/code\u003e/\u003ccode\u003e_sync\u003c/code\u003e,\n\u003ccode\u003e_auto_vacuum\u003c/code\u003e/\u003ccode\u003e_vacuum\u003c/code\u003e and\n\u003ccode\u003e_query_only\u003c/code\u003e, each setting the correspondingly named PRAGMA.\nValues are validated against the same set \u003ccode\u003emattn/go-sqlite3\u003c/code\u003e\naccepts and an unrecognized one fails the connection, so a typo cannot\nsilently downgrade durability. \u003cstrong\u003eReview DSNs carried over from\nthat driver before upgrading\u003c/strong\u003e: a key prior releases ignored\nentirely now takes effect, so \u003ccode\u003e_foreign_keys\u003don\u003c/code\u003e begins\nenforcing constraints and \u003ccode\u003e_journal_mode\u003dwal\u003c/code\u003e persistently\nconverts the file; and a duration-style \u003ccode\u003e_busy_timeout\u003d5s\u003c/code\u003e\nnow fails an open that previously succeeded. See [GitLab merge request\n\u003ca href\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/134\"\u003e#134\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/134\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/134\u003c/a\u003e),\nthanks Toni Spets (\u003ca\nhref\u003d\"https://gitlab.com/beeper-hifi\"\u003e\u003ccode\u003e@​beeper-hifi\u003c/code\u003e\u003c/a\u003e)\nand Ian Chechin!\u003c/li\u003e\n\u003cli\u003eValidate every DSN query parameter before applying any of them.\nParameters were checked as each was reached, so a DSN rejected for a\nlater parameter had already executed the PRAGMAs ahead of it:\n\u003ccode\u003efile:x.db?_journal_mode\u003dwal\u0026amp;_synchronous\u003dbogus\u003c/code\u003e failed\nthe connection and yet left \u003ccode\u003ex.db\u003c/code\u003e converted to WAL. A failed\n\u003ccode\u003eOpen\u003c/code\u003e now leaves the database as it found it. The accepted\nvalues are unchanged. \u003ccode\u003e_pragma\u003c/code\u003e remains the sole exception,\nsince its values are executed verbatim and can only be rejected by\nSQLite as they run.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-07-15 v1.54.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_3.html\"\u003eSQLite 3.53.3\u003c/a\u003e. This\nalso bumps the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.74.1; as\nalways, downstream modules must pin the exact same\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this module\u0027s \u003ccode\u003ego.mod\u003c/code\u003e\npins (see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e)).\u003c/li\u003e\n\u003cli\u003eUnder the opt-in \u003ccode\u003e_texttotime\u003c/code\u003e DSN parameter, best-effort\nparse date-shaped TEXT values from columns SQLite reports with an empty\ndeclared type — aggregates and expressions over a date column\n(\u003ccode\u003eMAX(d)\u003c/code\u003e, \u003ccode\u003eCOALESCE(d, ...)\u003c/code\u003e,\n\u003ccode\u003eupper(d)\u003c/code\u003e, \u003ccode\u003ed || \u0027\u0027\u003c/code\u003e), subqueries, and typeless\nreal columns (\u003ccode\u003eCREATE TABLE t(x)\u003c/code\u003e) — into\n\u003ccode\u003etime.Time\u003c/code\u003e, instead of delivering them as a raw string that\n\u003ccode\u003eScan\u003c/code\u003e cannot store into a \u003ccode\u003e*time.Time\u003c/code\u003e. The\nexisting declared\n\u003ccode\u003eDATE\u003c/code\u003e/\u003ccode\u003eDATETIME\u003c/code\u003e/\u003ccode\u003eTIME\u003c/code\u003e/\u003ccode\u003eTIMESTAMP\u003c/code\u003e\npath is unchanged; this only adds the empty-decltype case. The\nconversion is strictly best-effort: a value that does not parse as a\ntime falls through to the original string, so no \u003ccode\u003eScan\u003c/code\u003e that\nworked before can newly fail. \u003ccode\u003eColumnTypeScanType\u003c/code\u003e continues\nto report \u003ccode\u003estring\u003c/code\u003e for empty-decltype columns, since the\ndeclared type cannot prove the column is temporal. Without\n\u003ccode\u003e_texttotime\u003c/code\u003e the behavior is byte-for-byte unchanged.\nResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/248\"\u003e#248\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/248\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/133\"\u003e#133\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/133\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/133\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-06-21 v1.53.0:\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://gitlab.com/cznic/sqlite/commit/c96a4e6cb22254bf70026502a781a54a053c2cf0\"\u003e\u003ccode\u003ec96a4e6\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: document the libc v1.75.7 bump and the Performance\nsection\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/35c446e7366d96996563e6c11e4331a9a24a6833\"\u003e\u003ccode\u003e35c446e\u003c/code\u003e\u003c/a\u003e\nupdate dependencies, make vendor\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/9ad02acfd2d7b296bf3a4fd769ccac9e369c9511\"\u003e\u003ccode\u003e9ad02ac\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027udf-context-tests\u0027 into \u0027master\u0027\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/d6d84a97943928b2ee7e02c94b9314032260d2d6\"\u003e\u003ccode\u003ed6d84a9\u003c/code\u003e\u003c/a\u003e\nsqlite: pin the identity and the pooling of the FunctionContext in\ntests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/59ec397ba01a0e261203a4787e705f40e8176bd5\"\u003e\u003ccode\u003e59ec397\u003c/code\u003e\u003c/a\u003e\ndoc.go: add a Performance section with measured driver-vs-C ratios\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/51cbcbff3abb241103b2d4507ffaa5234f3b3111\"\u003e\u003ccode\u003e51cbcbf\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027udf-call-pool\u0027 into \u0027master\u0027\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/e390a0ca584a320680a5ad02cd5a5eab2d9ae68f\"\u003e\u003ccode\u003ee390a0c\u003c/code\u003e\u003c/a\u003e\nsqlite: pool the FunctionContext handed to UDF and aggregate\ncallbacks\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/38af58174508625ec5c678ae118421303f6992d1\"\u003e\u003ccode\u003e38af581\u003c/code\u003e\u003c/a\u003e\ndoc.go, README.md: point readers at CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/37e55e472f4f1f5c17726c4385b02c0e98ba4895\"\u003e\u003ccode\u003e37e55e4\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: reconstruct the missing entries for v1.38.1 through\nv1.44.1 and...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/2f7234fc73d8954e8a726890b1c43ff847daa32a\"\u003e\u003ccode\u003e2f7234f\u003c/code\u003e\u003c/a\u003e\nAUTHORS, CONTRIBUTORS: add Nathan Herring; CHANGELOG.md: credit him by\nname\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/compare/v1.58.0...v1.59.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMost Recent Ignore Conditions Applied to This Pull\nRequest\u003c/summary\u003e\n\n| Dependency Name | Ignore Conditions |\n| --- | --- |\n| modernc.org/sqlite | [\u003e\u003d 1.34.a, \u003c 1.35] |\n\u003c/details\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dmodernc.org/sqlite\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.58.0\u0026new-version\u003d1.59.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "6f2e89599a990f466b89374835762e8ab1a6e422",
      "tree": "047c53edfc09dfc9b9f856b58f809c210b26ff58",
      "parents": [
        "b35023bba102cb08b69c51733970e5710cd8e6f2"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Mon Sep 21 15:52:38 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 12:52:38 2026 -0700"
      },
      "message": "docs(compute): attach the NewDatumWithoutOwning doc comment and say what Release does to it (#1320)\n\n### Rationale for this change\n\nThe comment above `NewDatumWithoutOwning` is separated from the declaration by a blank line, so\n`go doc` and pkg.go.dev show the function with no documentation at all. The text itself has a\nsentence with no main clause and ends in stray characters (`convenience function.+-`). The\nfunction\u0027s one hazard, a `Release` call that releases the caller\u0027s reference (#1298), is the thing\na reader most needs to see and currently cannot.\n\n### What changes are included in this PR?\n\nThe comment now sits on the declaration and states the contract: the returned `Datum` owns nothing,\nthe caller keeps the value alive for as long as the `Datum` is in use and must not call `Release` on\nit, and since the `Datum` is an ordinary `ArrayDatum`/`ChunkedDatum`/`RecordDatum`/`TableDatum`/\n`ScalarDatum`, a `Release` call compiles and releases the caller\u0027s reference, which with a C-backed\nallocator or cdata-imported buffers frees memory under a live value. It ends by pointing at\n`NewDatum` for the owning case.\n\n### Are these changes tested?\n\nDocumentation only. `go doc ./arrow/compute NewDatumWithoutOwning` renders the two paragraphs;\ngofmt and `go vet ./arrow/compute/` are clean.\n\n### Are there any user-facing changes?\n\nDocumentation only. Whether a non-owning `Datum` should refuse `Release` (a no-op, a distinct\ntype, or a panic) is a separate decision and stays with #1298; this change does not close it."
    },
    {
      "commit": "b35023bba102cb08b69c51733970e5710cd8e6f2",
      "tree": "0933ac6973582ee7be86f20afc784dfeab60beda",
      "parents": [
        "7cdbbea36f8ae666e9c0c82b1dc81533157c79ce"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Mon Sep 21 10:57:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:57:56 2026 -0400"
      },
      "message": "test(flightsql): isolate fixture setup timeout (#1332)\n\n## What changed\n\n- add an `execFixture` helper with an explicit one-minute setup deadline\n- use it for all ten large Flight SQL row fixture inserts\n- preserve the driver\u0027s five-second default timeout and the cancellation\ntests\u0027 existing query deadlines\n\n## Why\n\nThe ASan/no-ASM job in\nhttps://github.com/apache/arrow-go/actions/runs/35436626598/job/106171165623?pr\u003d1328\nfailed while inserting the 6,000-row test fixture, before the\ncancellation behavior under test began. Context-free `db.Exec` inherited\nthe suite\u0027s five-second driver timeout, and the instrumented insert\nexceeded that deadline. A sibling cancellation test failed at the same\nsetup boundary in another matrix job.\n\nGiving fixture construction its own bounded context separates setup cost\nfrom the behavior timeout being tested without changing production\ndriver behavior.\n\n## Verification\n\n```text\ngo test -asan -short -tags assert,test,noasm ./arrow/flight/flightsql/driver -run \u0027^TestSqliteBackend/TestRowsInterruptionByContext(ManualCancellation|Timeout)(Stmt)?$\u0027 -count\u003d25\nok  github.com/apache/arrow-go/v18/arrow/flight/flightsql/driver  250.547s\n\ngo test -asan -short -tags assert,test,noasm ./arrow/flight/flightsql/driver -run \u0027^TestSqliteBackend/TestRows\u0027 -count\u003d10\nok  github.com/apache/arrow-go/v18/arrow/flight/flightsql/driver  191.764s\n\ngo test -asan -short -tags assert,test,noasm ./arrow/flight/flightsql/driver\nok  github.com/apache/arrow-go/v18/arrow/flight/flightsql/driver  20.363s\n```"
    },
    {
      "commit": "7cdbbea36f8ae666e9c0c82b1dc81533157c79ce",
      "tree": "6d6192d1335388920431786cebfc7569f52b33f6",
      "parents": [
        "55d009b9e23b2966788f7078d1f567c165445dd9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 21 13:51:49 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:51:49 2026 -0400"
      },
      "message": "chore: Bump golang.org/x/sync from 0.22.0 to 0.23.0 (#1317)\n\nBumps [golang.org/x/sync](https://github.com/golang/sync) from 0.22.0 to\n0.23.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sync/commit/f75267d8412fc1dfd12b343644a7ea46e4d9c85d\"\u003e\u003ccode\u003ef75267d\u003c/code\u003e\u003c/a\u003e\nsemaphore: panic on negative capacity\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sync/commit/3ffd83cb522e5ef49bd2fa50f0c0d63dc152ad1f\"\u003e\u003ccode\u003e3ffd83c\u003c/code\u003e\u003c/a\u003e\nall: upgrade go directive to at least 1.26.0 [generated]\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/golang/sync/compare/v0.22.0...v0.23.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "55d009b9e23b2966788f7078d1f567c165445dd9",
      "tree": "bc36b122f324751fb5451b333fa776082e813a46",
      "parents": [
        "a7a6c19b6b8db92e3d01463356e69f26ac569b33"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Sep 21 19:48:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:48:03 2026 -0400"
      },
      "message": "perf(parquet): encode dictionary indices in RLE batches (#1328)\n\n### What\n\n- Encode Parquet dictionary indices in RLE batches.\n\n### Why\n\n- `WriteIndices` currently sends every index through `Put`, including\nlong repeated runs and complete literal groups.\n\n### Implementation\n\n- Add `PutBatchIndices` for `int32` indices.\n- Encode repeated runs and complete literal groups directly.\n- Pack literal groups through one batched bit-writer call.\n- Keep scalar handling for partial literal groups.\n- Preserve encoded bytes and dictionary state on write errors.\n\n### Benchmark\n\nCommand, run six times per version with before/after order alternated:\n\n`go test -run \u0027^$\u0027 -bench \u0027^BenchmarkDictEncoderWriteIndices$\u0027 -benchmem\n-benchtime\u003d500ms -count\u003d1 ./parquet/internal/encoding`\n\nApple M1 Pro, Go 1.26.3, `GOMAXPROCS\u003d1`. `WriteIndices` on 65,536\nindices.\n\n| Input | Before | After | Time change |\n| --- | ---: | ---: | ---: |\n| Constant | 187.7 µs | 26.0 µs | -86.1% |\n| Runs of 8 | 388.9 µs | 200.9 µs | -48.3% |\n| Runs of 32 | 219.4 µs | 67.0 µs | -69.5% |\n| Runs of 256 | 197.6 µs | 41.9 µs | -78.8% |\n| Random, 16 entries | 580.7 µs | 306.3 µs | -47.3% |\n| Random, 256 entries | 452.8 µs | 302.8 µs | -33.1% |\n| Alternating | 400.7 µs | 270.6 µs | -32.5% |\n\nAllocations stay at 232 B/op and 4 allocs/op. The benchmark also covers\n64-index batches.\n\n### Compatibility\n\n- Encoded bytes match the existing scalar path.\n- No Parquet format or public API changes.\n\n### Tests\n\n- `go test ./parquet/...`\n- `go test -race ./parquet/internal/utils ./parquet/internal/encoding`\n- `go test -tags noasm ./parquet/internal/utils\n./parquet/internal/encoding`\n- `go vet -composites\u003dfalse ./parquet/internal/utils\n./parquet/internal/encoding`"
    },
    {
      "commit": "a7a6c19b6b8db92e3d01463356e69f26ac569b33",
      "tree": "e4cdc2b17b1f67b6b2782766a6123bce7152033c",
      "parents": [
        "ac80364a20fda4ee582c4643c84b545b8f015d24"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Sep 21 19:11:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:11:36 2026 -0400"
      },
      "message": "perf(parquet): reuse DELTA decoder scratch (#1322)\n\n**What**\n\n- Reuse DELTA length and prefix scratch buffers across decoder pages.\n- Add tests for scratch reuse and page-to-page correctness.\n\n**Why**\n\n- The column reader caches decoders by encoding.\n- Each page currently allocates fresh length and prefix arrays even when\nthe decoder already has enough capacity.\n\n**Implementation**\n\n- Keep stable backing buffers for decoded lengths and prefix lengths.\n- Expose sliced views to the existing Decode and Discard paths.\n- Keep the existing page-size behavior when a larger page needs more\ncapacity.\n- The existing repeated `SetData + Decode` benchmark now shows 18 to 15\nallocations/op and about 512 KiB less allocation for a full 65,536-value\nprefix-heavy page.\n\nTests:\n\n- `go test ./parquet/internal/encoding -count\u003d1`\n- `go test ./parquet/file -run\n\u0027^(TestWithEOFReader|TestInvalidHeaders|TestInvalidFooter|TestIncompleteMetadata|TestDeltaLengthByteArrayPackingWithNulls|TestDeltaBinaryPackedMultipleBatches|TestPageStreaming.*|TestPrimitiveReader|TestFullSeekRow|TestSkipEmptyRepeatedRows)$\u0027\n-count\u003d1`\n- `go test -race ./parquet/internal/encoding -run\n\u0027TestDelta(ByteArrayDecoderReusesPageScratch|LengthByteArrayDecoderReusesLengthScratch|ByteArrayDecoderKeepsResultsAcrossPages|ByteArrayDecoderRejectsInvalidPrefixes)$\u0027\n-count\u003d1`\n- `go vet ./parquet/internal/encoding`"
    },
    {
      "commit": "ac80364a20fda4ee582c4643c84b545b8f015d24",
      "tree": "85649b4ffd547c1c94a3d7072235df2e99ef72c6",
      "parents": [
        "8f3285c2ae42bf439af47a6bb2d531f8454b5e40"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 21 13:10:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 13:10:21 2026 -0400"
      },
      "message": "chore: Bump golang.org/x/sys from 0.47.0 to 0.48.0 (#1319)\n\nBumps [golang.org/x/sys](https://github.com/golang/sys) from 0.47.0 to\n0.48.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/613e2570718ecde85c04e69ebd5585c3881c442c\"\u003e\u003ccode\u003e613e257\u003c/code\u003e\u003c/a\u003e\ncpu: add riscv64 hwprobe drift test\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/6f7b10ff75aa2a3a1229116f47d194a97f66f174\"\u003e\u003ccode\u003e6f7b10f\u003c/code\u003e\u003c/a\u003e\nunix: add MLOCK_ONFAULT constant\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/663e7c83671d6d15250999d93bb45e03741b3014\"\u003e\u003ccode\u003e663e7c8\u003c/code\u003e\u003c/a\u003e\ncpu: add basic support for GOARCH\u003dsparc64\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/de5f12f6057cc60a98b17cfd2aedcf50a0aea7a7\"\u003e\u003ccode\u003ede5f12f\u003c/code\u003e\u003c/a\u003e\ncpu: add ppc64le POWER10 detection\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/80e8acfdcd3dacd2e8a4c2906d5b6a2ba0fdbc68\"\u003e\u003ccode\u003e80e8acf\u003c/code\u003e\u003c/a\u003e\nunix: run go fix\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/1e3c182d5eb393bbf86cba8b726d9edab596c50d\"\u003e\u003ccode\u003e1e3c182\u003c/code\u003e\u003c/a\u003e\nunix: add IPMI interface\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/d429e20367b198593bc9d6e1babac786eafb5434\"\u003e\u003ccode\u003ed429e20\u003c/code\u003e\u003c/a\u003e\nunix: stop generating sparc termbits from the generic header\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/bd3bddf0517f9d9b5e00f8ffeedd939dc80652f5\"\u003e\u003ccode\u003ebd3bddf\u003c/code\u003e\u003c/a\u003e\nunix: add missing HWTSTAMP_* constants\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/e812f53e86a9631a2922a068229188c29fdf5795\"\u003e\u003ccode\u003ee812f53\u003c/code\u003e\u003c/a\u003e\nwindows: add SO_SNDTIMEO constant for socket options\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/golang/sys/commit/f6989c5959ab33dcb983eaf490de10d83dbc810d\"\u003e\u003ccode\u003ef6989c5\u003c/code\u003e\u003c/a\u003e\nunix: align Ifreq so its union accessors cannot fault\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/golang/sys/compare/v0.47.0...v0.48.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8f3285c2ae42bf439af47a6bb2d531f8454b5e40",
      "tree": "ec6a803de7deff2e3b4ceb9502137b03f0910c69",
      "parents": [
        "ee8ecae49bf164eb9ba39a88b8c0804e9a49bf15"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Sun Sep 20 16:49:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 19:49:16 2026 -0400"
      },
      "message": "ci: shard the benchmark workflow across parallel jobs (#958)\n\n### Rationale for this change\n\nThe `Benchmarks` workflow runs `go test -bench\u003d. ./...` sequentially\nacross every\npackage. Because `go test`\u0027s `-timeout` is applied per package, the\nwall-clock time\nis the sum over all packages — recent `main` runs have taken roughly 3.3\nhours\n(198–208 min).\n\n### What changes are included in this PR?\n\nSplit the benchmark run so it can be parallelized, then combine the\nresults into a\nsingle upload:\n\n- **`ci/scripts/bench.sh`** — adds `--run` (benchmark a subset of\npackages, writing\nraw output to a `.dat`) and `--aggregate` (merge one or more `.dat`\nfiles into a\n  single `bench_stats.json` via `gobenchdata`) modes. The existing\n`bench.sh \u003cdir\u003e [--json|-json]` interface is unchanged, so nothing else\nthat calls\n  it needs to change.\n- **`ci/scripts/bench_shard.sh`** (new) — prints a GitHub Actions matrix\nthat buckets\n  the packages containing benchmarks into N shards.\n- **`.github/workflows/benchmark.yml`** — reworked into three jobs:\n`setup` (compute\nthe shard matrix) → `benchmark` (matrix; each shard runs its packages\nand uploads\nits `.dat`) → `combine` (download all `.dat`, aggregate into one\n`bench_stats.json`,\n  and — only on push to `main` — upload once to Conbench).\n- **`ci/scripts/bench_adapt.py`** — reuses an existing\n`bench_stats.json` (produced by\n  `combine`) instead of re-running the whole suite.\n\nBecause the shards are merged into one JSON and uploaded once, Conbench\nstill sees a\nsingle run (no `run_id` fragmentation).\n\n### Are these changes tested?\n\nLocally:\n- `shellcheck` clean on both scripts; `actionlint` clean on the\nworkflow; `py_compile`\n  OK on `bench_adapt.py`.\n- Verified the split→merge end to end: ran `--run` on two packages, then\n`--aggregate`\nproduced one `bench_stats.json` containing both suites, in the exact\nshape\n  `bench_adapt.py` consumes.\n- The legacy `bench.sh \u003cdir\u003e --json` path still runs → aggregates →\ncleans up.\n\nOpened as a **draft** to exercise the reworked workflow in CI end to end\n(it triggers\non changes to these files).\n\n### Are there any user-facing changes?\n\nNo. This only touches CI / benchmark tooling.\n\n### Notes / follow-ups\n\n- Sharding is currently round-robin by package, not runtime-weighted, so\na single\nshard can hold two heavy packages (e.g. `arrow/compute` +\n`parquet/internal/encoding`)\nand become the long pole. The per-package `-timeout` (40m) remains the\nhard floor for\nany single package. Once this runs, per-shard timings can seed a\nruntime-weighted\n  split or tune the shard count.\n\n---------\n\nSigned-off-by: Matt Topol \u003cmatt@columnar.tech\u003e"
    },
    {
      "commit": "ee8ecae49bf164eb9ba39a88b8c0804e9a49bf15",
      "tree": "68512613ac9f909824ee9b0d0f5564e6ede00c58",
      "parents": [
        "f554e65fcf1522177b2f6cf1c8c4a29b1311a599"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Sun Sep 20 16:48:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 19:48:19 2026 -0400"
      },
      "message": "chore: require Go 1.26 (#1326)\n\n### Rationale for this change\n\nThe next `golang.org/x/sync` and `golang.org/x/sys` releases require Go\n1.26, blocking dependency updates in #1317 and #1319. Raise the project\nbaseline first so those updates can be rebased without each owning the\ntoolchain migration.\n\n### What changes are included in this PR?\n\n- raise the module minimum from Go 1.25 to Go 1.26\n- update the default development/container toolchain to Go 1.26.8\n- remove Go 1.25 from CI and run linting with Go 1.26\n- update the Debian container fallback and Flight SQL driver\nprerequisite\n- fix format diagnostics reported by `go test` under Go 1.26\n\n### Are these changes tested?\n\n- `GOTOOLCHAIN\u003dgo1.26.8 go test ./...`\n- `GOTOOLCHAIN\u003dgo1.26.8 ci/scripts/build.sh $(pwd)`\n- `actionlint -shellcheck\u003d .github/workflows/lint.yml\n.github/workflows/test.yml`\n- `docker compose config --quiet`\n\n### Are there any user-facing changes?\n\nYes. Go 1.26 is now the minimum supported Go version."
    },
    {
      "commit": "f554e65fcf1522177b2f6cf1c8c4a29b1311a599",
      "tree": "69ceaadd335c0c4bd88477da03257436f9cb415c",
      "parents": [
        "9e0b802a81ef7796af80bde49a631f54b284e872"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 18 22:20:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:20:20 2026 -0400"
      },
      "message": "perf(arrow/array): append dictionary indices directly (#1313)\n\n## What does this change?\n\n- `DictionaryBuilder.AppendIndices` used to allocate a new typed slice\non every call.\n- Convert the input values directly into the final typed index buffer.\n- Keep the existing bulk validity bitmap path.\n- Add coverage for all eight index types, nullable appends, split\nappends, and invalid validity lengths.\n- No public API changes.\n\n## Benchmark\n\nCommand:\n\n```\ngo test ./arrow/array -run \u0027^$\u0027 -bench \u0027^BenchmarkDictionaryBuilderAppendIndices$\u0027 -benchmem -benchtime\u003d300ms -count\u003d8\n```\n\nApple M1 Pro, Go 1.26.3. The benchmark uses 65,536 indices and a\n256-entry dictionary.\n\n| Case | Before ns/op | After ns/op | Before B/op | After B/op | Allocs\n|\n| --- | ---: | ---: | ---: | ---: | ---: |\n| int32, non-null | 110,370 | 75,398 | 815,908 | 553,762 | 18 -\u003e 17 |\n| int32, nullable | 116,578 | 75,895 | 815,907 | 553,762 | 18 -\u003e 17 |\n\nThis is about 32% less time and allocation bytes for the non-null case,\nand about 35% less time for the nullable case.\n\nThe Parquet decoder\u0027s separate `[]uint64 -\u003e []int` scratch conversion is\nintentionally outside this PR.\n\n## Tests\n\n- `go test ./...`\n- `go test -race ./arrow/array`\n- `go vet ./arrow/array`"
    },
    {
      "commit": "9e0b802a81ef7796af80bde49a631f54b284e872",
      "tree": "9fdb96fb142daa6dc77c836e5ee5fe35d490054d",
      "parents": [
        "7c210e364d8b54ff1328acdd7c6edff2a46bd720"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Fri Sep 18 10:14:35 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 13:14:35 2026 -0400"
      },
      "message": "ci: use clang ASan runtime for -asan tests (#1299)\n\n### Rationale for this change\n\nThe Ubuntu RC verification job intermittently fails with\nAddressSanitizer *internal* CHECK failures under `go test -asan`,\nstriking arbitrary pure-Go packages with no failing Go assertion. Most\nrecent occurrence on `main`:\nhttps://github.com/apache/arrow-go/actions/runs/34250658983/job/102145334765\n—\n\n```text\nAddressSanitizer: CHECK failed: sanitizer_common.h:522 \"((i)) \u003c ((size_))\"\n  #2 InternalMmapVectorNoCtor\u003cThreadContextBase*\u003e::operator[]\n  #3 ThreadRegistry::StartThread   sanitizer_thread_registry.cpp:314\n  #4 AsanThread::ThreadStart\nFAIL github.com/apache/arrow-go/v18/arrow/util 0.287s\n```\n\nSibling signatures over the last month include\n`sanitizer_thread_registry.cpp:161/316`,\n`sanitizer_allocator_secondary.h:297`, and plain segfaults, hitting\n`arrow/float16`, `arrow/internal/dictutils`, `arrow/util`, and\n`arrow/flight/flightsql/example`. Every crash site is GCC libasan\u0027s\nthread-registry/allocator bookkeeping at thread start or exit: the Go\nruntime creates and retires threads in ways GCC\u0027s libasan thread\nregistry does not tolerate. This is the dominant recurring RC\nverification flake (~5 of the last ~11 Ubuntu failures).\n\n### What changes are included in this PR?\n\nWhen `ci/scripts/test.sh` selects `-asan`, export\n`CC\u003dclang`/`CXX\u003dclang++` if clang is available and `CC` is not already\nset, so the test binaries link LLVM\u0027s compiler-rt ASan runtime instead\nof GCC\u0027s libasan. Environments without clang (e.g. the Debian golang\nimages) keep the current behavior unchanged.\n\n`ubuntu-latest` runners ship clang, so the RC `Verify (ubuntu-latest)`\njob — the only recurring victim — picks up the LLVM runtime\nautomatically.\n\n### Are these changes tested?\n\n- `bash -n` and `shellcheck` pass on the edited script\n- This PR\u0027s own RC `Verify (ubuntu-latest)` check executes exactly this\ncode path with clang\n\n### Are there any user-facing changes?\n\nNo, CI-only.\n\n---------\n\nSigned-off-by: Matt Topol \u003cmatt@columnar.tech\u003e"
    },
    {
      "commit": "7c210e364d8b54ff1328acdd7c6edff2a46bd720",
      "tree": "9f3bc8ba1c90af81b0f305690e35d37368d605e6",
      "parents": [
        "d577b68a4f0330b4c9c42889023736f72883ff91"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Sep 15 21:14:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 15:14:27 2026 -0400"
      },
      "message": "perf(parquet): decode nullable plain values into valid runs (#1314)\n\n## What does this change?\n\n- `PlainDecoder.DecodeSpaced` used to decode all non-null values into a\ndense prefix first, then move them into their bitmap positions.\n- For simple validity patterns, decode each valid run directly into its\nfinal output range.\n- Keep the existing dense plus spaced expansion path for highly\nfragmented validity.\n- Use the reverse bitmap reader so trailing-null pages stop after\nfinding the dense prefix.\n- Add edge-case tests and a focused benchmark.\n\n## Benchmark\n\nApple M1 Pro, Go 1.26.3, 65,536 `int32` values, 8 runs, 300ms per\nsample:\n\n| Validity pattern | Before | After |\n| --- | ---: | ---: |\n| leading null | 11.6 us/op | 7.1 us/op |\n| clustered nulls | 8.6 us/op | 7.2 us/op |\n| trailing null | 5.6 us/op | 5.6 us/op |\n\nRandom 10% nulls and alternating validity keep the existing fallback\npath. All cases stayed at **0 B/op** and **0 allocs/op**.\n\n## Tests\n\n- `PARQUET_TEST_DATA\u003dparquet-testing/data\nARROW_TEST_DATA\u003darrow-testing/data go test -p 2 ./... -count\u003d1`\n- `go test -race -p 2 ./parquet/internal/encoding ./parquet/file`\n- `go vet -p 2 ./parquet/internal/encoding ./parquet/file`"
    },
    {
      "commit": "d577b68a4f0330b4c9c42889023736f72883ff91",
      "tree": "5657325f3836fcfa5ce5a4702cdb6ae9edffa8b1",
      "parents": [
        "df6bddc456b13dd916dba83496d35c8aaa1528be"
      ],
      "author": {
        "name": "Madan Kumar",
        "email": "winklemad@outlook.com",
        "time": "Wed Sep 16 00:28:26 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:58:26 2026 -0400"
      },
      "message": "fix(arrow/decimal): widen Decimal64 rescale to 64 bits (#1307)\n\n### Rationale for this change\n\n`Decimal64.rescaleWouldCauseDataLoss` (arrow/decimal/decimal.go) is a\ncopy of the `Decimal32` version that was never widened to 64 bits — it\nstill uses `bits.Div32` / `bits.Mul32` with `uint32(n)` /\n`uint32(multiplier)`. Any `Decimal64` whose magnitude exceeds `uint32`\nmax (~4.29e9, well inside Decimal64\u0027s 18-digit range) is truncated to 32\nbits before the multiply/divide, so `Rescale` returns a corrupt value\nand/or a spurious `rescale data loss` error.\n\nConcretely, on `main`:\n\n```go\ndecimal.Decimal64(10_000_000_000).Rescale(2, 1)\n// returns (141006540, error \"rescale data loss\")\n// correct: (1000000000, nil)   // 1e10 / 10 \u003d 1e9, exact\n```\n\n### What changes are included in this PR?\n\n- Use `bits.Div64` / `bits.Mul64` over `uint64` in\n`Decimal64.rescaleWouldCauseDataLoss` (the `Decimal32` version is\nalready correct for 32 bits).\n- `TestDecimalRescale` had baked in the truncated behavior: it asserted\nthat `Decimal64(555555).Rescale(0, 5)` returns `rescale data loss`, but\n`555555` at scale 5 is `55,555,500,000`, which fits in `Decimal64` and\nis lossless. Corrected that assertion, checked the exact result, and\nadded a value that genuinely overflows `Decimal64` (`5e18` rescaled up)\nso the real data-loss path stays covered.\n\nRED→GREEN verified: the updated `TestDecimalRescale` fails on the\nunpatched code and passes with the fix; the full `arrow/decimal` package\nsuite is green; `gofmt`/`go vet`/`golangci-lint` clean.\n\n### Are these changes tested?\n\nYes — `arrow/decimal/decimal_test.go`.\n\n### Are there any user-facing changes?\n\n`Decimal64.Rescale` now returns correct results (and no spurious error)\nfor values above ~4.29e9. No API change.\n\nSigned-off-by: Madan Kumar \u003cwinklemad@outlook.com\u003e"
    },
    {
      "commit": "df6bddc456b13dd916dba83496d35c8aaa1528be",
      "tree": "b6346047e5b23d5d6c4fcc74cd7e6cab3c98c04a",
      "parents": [
        "eda27cd162dd2e92ba23be2c0cc00dcbd29eeddc"
      ],
      "author": {
        "name": "Jake Thomas",
        "email": "aerialfly@gmail.com",
        "time": "Tue Sep 15 14:58:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:58:13 2026 -0400"
      },
      "message": "fix(arrow): support zero-length fixed-size lists (#1308)\n\n### Rationale for this change\n\nDataFusion can return `FixedSizeList(0, Null)` for an empty list. Arrow\nGo currently rejects the C data schema `+w:0`, and its fixed-size list\nconstructors also panic for size zero. This prevents importing results\nsuch as:\n\n```sql\nselect arrow_cast(a, \u0027FixedSizeList(0, Null)\u0027)\nfrom values ([]), (NULL) t(a);\n```\n\nA zero-size list has no child values, but its parent array still has\nrows and a validity bitmap that distinguishes empty lists from null\nlists. This fixes the two failing cases in DataFusion\u0027s\n[`arrow_typeof.slt`](https://github.com/apache/datafusion/blob/d5552342012888b7d1a3ab88d92e3d292fc0cde0/datafusion/sqllogictest/test_files/arrow_typeof.slt#L400).\n\n### What changes are included in this PR?\n\n- Accept zero in the three fixed-size list type constructors and in C\ndata schema imports.\n- Allow zero-size fixed-size list arrays to validate without dividing by\nzero. Negative sizes, invalid child schemas, and overflowing C schema\nsizes remain rejected.\n- Add constructor, array, C data, and IPC regression tests covering\nempty and null rows, bulk appends, nonzero slice offsets, and\nchecked-allocator cleanup with null, integer, and nested-list element\ntypes.\n\n### Are these changes tested?\n\nLocal verification on macOS ARM64 with Go 1.25.2:\n\n- `pre-commit run --all-files --show-diff-on-failure`\n- `ci/scripts/build.sh \"$PWD\"`\n- `ci/scripts/test.sh \"$PWD\"` (race detector, `assert,test`, and `noasm`\nvariants)\n- `go test -race -short -tags\u003dassert,test ./internal/...`\n\nThe datafusion-go SQLLogicTest corpus also passes **24,958/24,958\nassertions across 365 executable SQL files** on macOS when an isolated\nGo module file replaces Arrow Go with this checkout. That includes all\n62 records in `arrow_typeof.slt`; the released Arrow Go dependency fails\ntwo of those records. This downstream run used DataFusion 55.0.0 and\ndatafusion-go commit `8fbd0218b6c5f3d9d64ec798ae466f66725be325`.\n\n### Are there any user-facing changes?\n\nZero-size fixed-size lists can now be constructed, validated, and\nimported through the C data interface. Existing constructor and import\nchecks for negative sizes are preserved."
    },
    {
      "commit": "eda27cd162dd2e92ba23be2c0cc00dcbd29eeddc",
      "tree": "3848c92c95d039d347f6af159ad29bf9afb9c402",
      "parents": [
        "e6615cb75db5a5fef4510c936b6840f022b76cb3"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Sep 15 20:57:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:57:56 2026 -0400"
      },
      "message": "perf(parquet): use typed memo insertion for fixed-width dictionaries (#1312)\n\n## What changed\n\n- Use BinaryMemoTable.InsertOrGet for FLBA dictionary Put and\nPutDictionary.\n- Use the same typed insertion path for DictInt96Encoder.Put.\n- Keep empty Put calls as no-ops.\n- Add Int96 dictionary round-trip coverage and FLBA/Int96 benchmarks.\n\n## Why\n\nThese encoders already use the binary memo table, but still called\nGetOrInsert through the generic interface for every value. The typed\nentry point avoids the extra interface conversion. Dictionary order and\nencoded output stay unchanged.\n\n## Benchmark\n\nApple M1 Pro, macOS arm64, Go 1.26.3. 65,535 values and 100 unique\nvalues, median of five runs.\n\n| Case | Before | After | Change |\n| --- | ---: | ---: | ---: |\n| FLBA, width 16 | 4.59 ms | 3.09 ms | 33% faster |\n| Int96 | 5.41 ms | 3.87 ms | 29% faster |\n| FLBA allocations | 131,117 | 65,581 | 50% fewer |\n| Int96 allocations | 196,655 | 131,118 | 33% fewer |\n\nAllocated bytes also fell by about 42% for FLBA and 33% for Int96.\n\n## Tests\n\n- go test ./... with Arrow and Parquet test data\n- go test ./parquet/internal/encoding/...\n- go test -race ./parquet/internal/encoding/...\n- go vet ./parquet/internal/encoding/...\n- go test -tags noasm ./parquet/internal/encoding/..."
    },
    {
      "commit": "e6615cb75db5a5fef4510c936b6840f022b76cb3",
      "tree": "53f0c7a09eebdcbd73b0fddf867d694bc9d1b1e4",
      "parents": [
        "30e27499fbb5fbeae92b7f564086598e02f5e6c9"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Sep 15 20:51:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:51:47 2026 -0400"
      },
      "message": "perf(internal/hashing): avoid boxing byte slices in InsertOrGet (#1310)\n\n## What changed\n\n- `InsertOrGet` already receives a `[]byte`.\n- It still called `getHash`, which accepts `interface{}` and boxed the\nslice.\n- This now calls `Hash(val, 0)` directly, matching the typed hashing\npath.\n- There is no behavior change.\n\n## Benchmark\n\nThe focused `BenchmarkBinaryMemoTableInsertOrGet` exercises this exact\nmethod with 65,536 lookups over 100 repeated values.\n\nApple M1 Pro, Go 1.26.3:\n\n| | After |\n| --- | ---: |\n| ns/op | 1.28 ms |\n| B/op | 0 |\n| allocs/op | 0 |\n\nThe old Parquet byte-array benchmark was removed from this description\nbecause it uses a separate memo implementation.\n\n## Testing\n\n- `go test ./internal/hashing`\n- `go test ./...` with `PARQUET_TEST_DATA` configured"
    },
    {
      "commit": "30e27499fbb5fbeae92b7f564086598e02f5e6c9",
      "tree": "cd51a70b843cdf8e548a2e8635a778409bc27398",
      "parents": [
        "1e2963d4e6a95326276059fe3b3035a9cd78a8b8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 15 14:50:34 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:50:34 2026 -0400"
      },
      "message": "chore: Bump github.com/twmb/avro from 1.8.0 to 1.9.0 (#1316)\n\nBumps [github.com/twmb/avro](https://github.com/twmb/avro) from 1.8.0 to\n1.9.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/d4de8e1130760f0d035e690c4505ece4901332bf\"\u003e\u003ccode\u003ed4de8e1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/twmb/avro/issues/58\"\u003e#58\u003c/a\u003e from\ntwmb/jsonv2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/d99ac57b5424f464eb31b7a994e441c0c4827e74\"\u003e\u003ccode\u003ed99ac57\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/twmb/avro/issues/57\"\u003e#57\u003c/a\u003e from\ntwmb/voice\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/794de547fc2ae8bb27df0dd81cbf4816d927e578\"\u003e\u003ccode\u003e794de54\u003c/code\u003e\u003c/a\u003e\nschema: name map keys and replace invalid UTF-8 before json.Marshal\nruns\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/9d783d06792a263e3a1ebad84c1398d0ee4e0dd2\"\u003e\u003ccode\u003e9d783d0\u003c/code\u003e\u003c/a\u003e\ndocs: write the README and exported docs the way franz-go writes\nthem\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/1e30f02f11863aa9989e900abf230711bbb98965\"\u003e\u003ccode\u003e1e30f02\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/twmb/avro/issues/56\"\u003e#56\u003c/a\u003e from\ntwmb/slab-bytes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/ce20fea4d1fbbcb76f424ed27670d13c5427ba0c\"\u003e\u003ccode\u003ece20fea\u003c/code\u003e\u003c/a\u003e\ncomments: cut the new options\u0027 docs down\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/0e7dd77aa18201a37285d7be24fb2e151eb42694\"\u003e\u003ccode\u003e0e7dd77\u003c/code\u003e\u003c/a\u003e\ncomments: write them the way franz-go writes them\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/054f962dd53d26d7600b2414cbe48bec81b3a3c7\"\u003e\u003ccode\u003e054f962\u003c/code\u003e\u003c/a\u003e\ndeser: stop copying a resolved record\u0027s pre-encoded default\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/3291929d5226e0914b2273adbe0cd71be77fa56f\"\u003e\u003ccode\u003e3291929\u003c/code\u003e\u003c/a\u003e\nocf: add WithDecodeOpts to reach the datum decode\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/twmb/avro/commit/a006ff5a8a7a0b9968936bb8aeebb86e15ceaeb2\"\u003e\u003ccode\u003ea006ff5\u003c/code\u003e\u003c/a\u003e\nschema: add SchemaNode.ExpandReferences\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/twmb/avro/compare/v1.8.0...v1.9.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\u003dgithub.com/twmb/avro\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.8.0\u0026new-version\u003d1.9.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1e2963d4e6a95326276059fe3b3035a9cd78a8b8",
      "tree": "22bd7a9ad75602f7e2f513386555d58fac606303",
      "parents": [
        "281776d9292c5229c48c336bca3af4d339369cce"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 15 14:50:22 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:50:22 2026 -0400"
      },
      "message": "chore: Bump github.com/andybalholm/brotli from 1.2.3 to 1.2.4 (#1318)\n\nBumps\n[github.com/andybalholm/brotli](https://github.com/andybalholm/brotli)\nfrom 1.2.3 to 1.2.4.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/eede31285845c44ddf1e333dfd896bc7d44696ac\"\u003e\u003ccode\u003eeede312\u003c/code\u003e\u003c/a\u003e\nFix problems found by go vet\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/fc20d302fc8a45fb58c07679589c4ae6f3aa6832\"\u003e\u003ccode\u003efc20d30\u003c/code\u003e\u003c/a\u003e\nreorder conditions for better performance\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/e50c2fb5a5ee9b4f4e293c4a003d4e7e1371a211\"\u003e\u003ccode\u003ee50c2fb\u003c/code\u003e\u003c/a\u003e\nFix false match at position 0 in ZDFast\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/a3e65284bcf4568ba9aed5603784832959d953e2\"\u003e\u003ccode\u003ea3e6528\u003c/code\u003e\u003c/a\u003e\nDo not drop history that is shorter than MaxDistance\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/621e17e01dee8a17be5ea9c625701ad16ccd1dd0\"\u003e\u003ccode\u003e621e17e\u003c/code\u003e\u003c/a\u003e\nFix false match in ZFast.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/commit/448f1a02df126724924a84437e01ba6134f51b94\"\u003e\u003ccode\u003e448f1a0\u003c/code\u003e\u003c/a\u003e\nAdd a utility for testing against multi-file compression corpora.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/andybalholm/brotli/compare/v1.2.3...v1.2.4\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub.com/andybalholm/brotli\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.2.3\u0026new-version\u003d1.2.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "281776d9292c5229c48c336bca3af4d339369cce",
      "tree": "2ce0b6628ecca0184ec558339aab9b184262d54c",
      "parents": [
        "e7b1e355c6f2b895e090d9ed71b0506b453f1311"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Tue Sep 08 15:18:36 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 15:18:36 2026 -0400"
      },
      "message": "docs(arrow/memory): document allocator alignment and which allocator to use when C retains buffers (#1302)\n\n### Rationale for this change\n\nNothing in the `memory` package said what alignment an allocator\nguarantees, or which allocator to\nuse for buffers that C will keep after the cgo call. The `cdata` export\ncomment named only the\n`CgoArrowAllocator`, which needs the Arrow C++ library, while\n`mallocator` covers the same need\nwithout it. Discussed in #1297.\n\n### What changes are included in this PR?\n\nTwo sections in the `memory` package comment: the 64-byte alignment\n`GoAllocator` and\n`mallocator.NewMallocator` provide and `NewMallocatorWithAlignment` for\nanything larger; and the\ncgo pointer rule with the two allocators that return C memory. Doc\ncomments on `GoAllocator` and\n`NewGoAllocator`. The `ExportArrowRecordBatch` comment now names\n`mallocator.Mallocator` alongside\n`CgoArrowAllocator` and points at the package doc.\n\n### Are these changes tested?\n\nDocumentation only; `go vet` and `go build ./...` pass and `go doc\n./arrow/memory` renders the new sections.\n\n### Are there any user-facing changes?\n\nDocumentation only.\n\nCloses #1297."
    },
    {
      "commit": "e7b1e355c6f2b895e090d9ed71b0506b453f1311",
      "tree": "ad8a691b68665a2bc2d303693ea59e969684084d",
      "parents": [
        "164c0c3be6cbf33f6e7dcf55f1c6f2f412a8920f"
      ],
      "author": {
        "name": "singhpratech",
        "email": "42719720+singhpratech@users.noreply.github.com",
        "time": "Tue Sep 08 15:18:27 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 15:18:27 2026 -0400"
      },
      "message": "docs(compute): state which function kinds the registry implements (#1303)\n\n### Rationale for this change\n\nThe package comment describes an Acero-like engine but does not say that\nscalar aggregate and hash\naggregate functions are not implemented, so a reader coming from\n`pyarrow.compute` or the C++\nfunction list finds out by a failed `GetFunction`. #1296.\n\n### What changes are included in this PR?\n\nA \"What is implemented\" section in the `compute` package comment listing\nthe function kinds the\nregistry holds (scalar, vector, meta, with the families and the\nvector/meta names) and stating that\n`FuncScalarAgg` and `FuncHashAgg` have no registered functions yet.\n\n### Are these changes tested?\n\nDocumentation only; the names were taken from `GetFunctionRegistry()` on\nmain.\n\n### Are there any user-facing changes?\n\nDocumentation only. The aggregate kernels themselves are a separate\npiece of work; see the issue."
    },
    {
      "commit": "164c0c3be6cbf33f6e7dcf55f1c6f2f412a8920f",
      "tree": "a418822726129c0033920b7b48584b23b87688b6",
      "parents": [
        "98bb02bb1cae6c3ca5fab2042a14f3ff5905b2b0"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Tue Sep 08 14:58:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 14:58:41 2026 -0400"
      },
      "message": "ci: run parquet/file alone on macOS instead of serializing all packages (#1301)\n\n### Rationale for this change\n\n#1275 added `-p\u003d1` for Darwin to keep the 7 GB macOS ARM64 runners from\nOOM-killing `parquet/file`. That works, but it serializes *every*\nparquet\npackage, across both the `assert` and `assert,noasm` passes, under\n`-race`.\nThe cost is about 4.5 minutes per macOS job, which ate the entire\nheadroom\nagainst the `timeout-minutes: 20` cap on the `macos` job.\n\nJob durations on `main`, 631 samples over Aug 6 – Sep 8, split at the\n#1275\nmerge on Sep 3:\n\n| macOS ARM64 job | before avg | after avg | after max | cap |\n| --- | --- | --- | --- | --- |\n| Go 1.25 | 11.6m | 16.4m | 20.1m | 20 |\n| Go 1.26 | 11.5m | 16.0m | 20.4m | 20 |\n| Go 1.25 - CGO | 17.9m | 19.7m | 24.1m | 25 |\n| Go 1.26 - CGO | 14.5m | 18.5m | 24.8m | 25 |\n\nLinux is flat across the same window (AMD64 Debian −0.1/+0.2, ARM64\nDebian\n−0.1/+0.4), which isolates the change to the Darwin-only branch rather\nthan\nnew tests or runner drift.\n\nThree macOS jobs on `main` have since been killed at the 20-minute mark\n(20.1m, 20.4m, 20.4m), and the CGO jobs at 24.8m are one bad run from\nthe\nsame fate.\n\n### What changes are included in this PR?\n\nOnly `parquet/file` holds the large-value regression tests that exhaust\nthe\nrunner, so give that one package its own `go test` invocation on Darwin\nand\nlet the other 17 parquet packages keep their default parallelism. The\nmemory\nfix from #1275 is preserved — `parquet/file` still never shares a runner\nwith\nanother parquet package — without paying for it across the whole tree.\n\nNon-Darwin behaviour is byte-identical to before: two invocations over\n`./...`, no `-p` flag.\n\n### Are these changes tested?\n\n- `bash -n ci/scripts/test.sh`\n- `shellcheck ci/scripts/test.sh` — clean\n- `shfmt -d ci/scripts/test.sh` — clean\n- Dry-ran the package partition against this tree: on Darwin it yields 1\nserial package (`.../parquet/file`) and 17 parallel, with no leakage of\n  `file` into the parallel set; on non-Darwin it yields exactly `./...`.\n- `go test -tags assert -run XXX ./...` and `go test -tags assert,noasm\n-run\nXXX ./...` in `parquet/` both compile clean, confirming the invocation\nform.\n\nThe real check is the macOS timings on this PR\u0027s own CI run.\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "98bb02bb1cae6c3ca5fab2042a14f3ff5905b2b0",
      "tree": "8988b0cf1d6c65f28e07132df56df8b82bcf8b0e",
      "parents": [
        "97f780beb5a9129cbcf2c14193bc5830cf4ad035"
      ],
      "author": {
        "name": "Matt Topol",
        "email": "zotthewizard@gmail.com",
        "time": "Tue Sep 08 13:57:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 13:57:13 2026 -0400"
      },
      "message": "fix(parquet/utils): make unpack32 NEON profiler-safe (#1300)\n\n### Rationale for this change\n\nAddresses the `_unpack32_neon` part of #983 following the regeneration\napproach outlined in\nhttps://github.com/apache/arrow-go/issues/983#issuecomment-5332134569.\n\nThe previous assembly repurposed Go\u0027s reserved registers (R18 platform,\nR27 REGTMP, R28 `g`) and adjusted SP through opaque `WORD` directives,\nso the assembler\u0027s pcsp tables were wrong and `sigprof` could observe a\nclobbered `g` — truncated/invalid tracebacks, and a crash with\n`CGO_ENABLED\u003d0`.\n\n### What changes are included in this PR?\n\n- Regenerate `bit_packing_neon_arm64.s` from `_lib/bit_packing_neon.c`\nwith `-ffixed-x18 -ffixed-x27 -ffixed-x28 -fomit-frame-pointer` (per the\nissue comment, plus omitting the frame). The result is a **leaf function\nwith zero stack usage and zero reserved-register usage**: constants load\nvia `VMOVQ` pseudo-instructions and every branch is a real Go branch\ninstruction, so unwind state is always valid.\n- Add `_lib/neon2goasm.py`, which converts the compiled ELF object into\nthe Go assembly and **rejects any instruction touching SP or a reserved\nregister**, plus a `make bit_packing_neon_arm64.s` rule\n(`C_FLAGS_NEON_GOASM`) so regeneration is reproducible.\n- Drop the unused `\u003cstring.h\u003e` include so the C compiles freestanding\nfor cross-generation.\n- Add `BenchmarkUnpack32` (from the issue) so the packed-decode fast\npath is exercised under `-cpuprofile`.\n- Document the new generation path in `_lib/README.md`.\n\n### Verification\n\n- Semantic equivalence: instruction-by-instruction comparison of the\nassembled Go function against the source ELF object (branch topology\nindex-normalized, `VMOVQ` constants resolved and compared against\n`.rodata`) — no differences besides the parameter/return glue.\n- `go test ./parquet/internal/utils` (native NEON), `-race`, `-tags\nnoasm`, and `go test -tags assert ./parquet/...` all pass on Apple\nSilicon.\n- The issue\u0027s failure mode is fixed: `CGO_ENABLED\u003d0 go test -bench\nBenchmarkUnpack32 -cpuprofile` no longer crashes, and profiles now show\nfull caller chains:\n\n```text\n10ms  utils._unpack32_neon\n      utils.unpack32NEON\n      utils.(*BitReader).GetBatch\n      utils.BenchmarkUnpack32\n      testing.(*B).runN\n```\n\n- Throughput improved ~27% as a side effect of the newer codegen (387 →\n280 ns/op on `BenchmarkUnpack32`, Apple M4).\n\n### Are there any user-facing changes?\n\nNo API changes. CPU profiles of workloads that hit the ARM64 packed\ndecoder are now correct.\n\nNote: `unpack_bool_neon_arm64.s` has a smaller instance of the same\npattern (one `WORD`-encoded `stp` with SP writeback); left for a\nfollow-up to keep this reviewable.\n\nSigned-off-by: Matt Topol \u003cmatt@columnar.tech\u003e"
    },
    {
      "commit": "97f780beb5a9129cbcf2c14193bc5830cf4ad035",
      "tree": "b9eb719250449400153543cc621645113b2f77ab",
      "parents": [
        "27952c740323854874284c355251d3c17c29e648"
      ],
      "author": {
        "name": "matanper",
        "email": "matanper@gmail.com",
        "time": "Tue Sep 08 20:21:09 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 13:21:09 2026 -0400"
      },
      "message": "fix(arrow/extensions): avoid child values for missing variant lists (#1293)\n\n### Rationale for this change\n\nWriting shredded VARIANT values to Parquet fails with `lists with\nnon-zero length null components are not supported` when a nested list\nhas a null, missing, or scalar parent between populated rows. For\nexample:\n\n```json\n{\"obj\":{\"items\":[1]}}\n{\"obj\":null}\n{\"obj\":{\"items\":[2]}}\n```\n\n`shreddedObjBuilder.AppendMissing` marks the parent struct null, but\nrecursively calling `shreddedArrayBuilder.AppendMissing` adds a valid\nlist and a placeholder child element. The Parquet writer rejects the\nresulting skipped child range.\n\nFixes #1292.\n\n### What changes are included in this PR?\n\nMake `shreddedArrayBuilder.AppendMissing` append a null list without\nadding child elements. The production change is two added lines\n(including a comment) and four removed lines.\n\nAdd a self-contained Parquet write/read regression for null, missing,\nand scalar parent values between populated lists. It verifies all\ndecoded JSON values, row count, and checked-allocator cleanup. No\nexternal fixtures are required.\n\n### Are these changes tested?\n\nAll three regression cases reproduce the original write error before the\nfix and pass afterward.\n\n- `go test ./parquet/pqarrow -run\nTestShreddedVariantListsUnderMissingParent -count\u003d1`\n- `go test ./arrow/extensions ./parquet/variant`\n\n### Are there any user-facing changes?\n\nThese valid shredded VARIANT values can now be written to Parquet while\npreserving null, missing, and scalar parent values. No public API\nchanges."
    },
    {
      "commit": "27952c740323854874284c355251d3c17c29e648",
      "tree": "d0dec571e426eaca130464458502e71f49836950",
      "parents": [
        "67ef40b0e11a2696a4f10c05ec09a6429815c4f2"
      ],
      "author": {
        "name": "matanper",
        "email": "matanper@gmail.com",
        "time": "Tue Sep 08 20:10:02 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 13:10:02 2026 -0400"
      },
      "message": "fix(parquet/variant): prevent metadata offset cursor overflow (#1290)\n\n### Rationale for this change\n\nReading valid VARIANT metadata with 126 dictionary keys and two-byte\noffsets panics with `slice bounds out of range [255:1]`. The metadata\noffset cursor inherits `uint8` from `offsetSz`; both advancing the\ncursor and computing the slice end can wrap at byte 256. Three- and\nfour-byte offset tables hit the same problem with even fewer keys.\n\nThis also affects current main after #1063: validating the complete\noffset table does not prevent the cursor arithmetic from overflowing\nwhile reading that valid table.\n\n### What changes are included in this PR?\n\nUse an `int` offset width and cursor for indexing the metadata buffer.\nKeep the wire-format width and existing metadata validation unchanged.\n\nAdd synthetic valid-metadata tests immediately before, at, and after the\nfailure boundary for two-, three-, and four-byte offsets, plus larger\ndictionaries. Check every decoded dictionary key. No external test data\nis required.\n\n### Are these changes tested?\n\n- Before the fix, `go test ./parquet/variant -run\nTestMetadataOffsetTableCrossesByteBoundary -count\u003d1` reproduces the\npanic at `width_2/keys_126`.\n- After the fix, `go test ./parquet/variant ./arrow/extensions` passes,\nincluding all 13 new boundary cases.\n\n### Are there any user-facing changes?\n\nValid VARIANT dictionaries spanning byte 255 decode successfully instead\nof panicking. There are no public API or format changes.\n\n\nFixes #1291."
    },
    {
      "commit": "67ef40b0e11a2696a4f10c05ec09a6429815c4f2",
      "tree": "92bcbea00d51b09d6dfc4bd4b070a423d097ff49",
      "parents": [
        "a67b527089160664b334bd10d5c3a3da987894d2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 08 12:22:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 12:22:29 2026 -0400"
      },
      "message": "chore: Bump modernc.org/sqlite from 1.57.0 to 1.58.0 (#1295)\n\nBumps [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) from 1.57.0\nto 1.58.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/blob/master/CHANGELOG.md\"\u003emodernc.org/sqlite\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eEntries for v1.38.1 through v1.44.1 and for v1.49.1 were added on\n2026-09-05, reconstructed from the git history and the merge requests\nthey cite; they were missing at release time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-05 v1.59.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHand user-defined function and aggregate callbacks a pooled\n\u003ccode\u003e*FunctionContext\u003c/code\u003e instead of allocating a fresh one per\ncall. After the \u003ccode\u003e[]driver.Value\u003c/code\u003e pooling of \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/226\"\u003e#226\u003c/a\u003e this\nwas the last driver-side heap allocation per invocation: one 16-byte\nobject for every \u003ccode\u003eScalar\u003c/code\u003e, \u003ccode\u003eStep\u003c/code\u003e,\n\u003ccode\u003eWindowInverse\u003c/code\u003e, \u003ccode\u003eWindowValue\u003c/code\u003e and\n\u003ccode\u003eFinal\u003c/code\u003e call. The context now also carries the invocation\u0027s\n\u003ccode\u003esqlite3_context\u003c/code\u003e, so accessor methods can be added to it\nlater without touching the trampolines. Like the argument slice, it is\nvalid only for the duration of the callback and must not be retained\npast its return; the documentation on \u003ccode\u003eFunctionContext\u003c/code\u003e and\non the callbacks now says so. On the 1000-row, 3-argument noop scalar\nUDF benchmark this removes a further 1000 allocs/op (5756 to 4756, and\n3756 to 2756 with \u003ccode\u003eVolatileArgs\u003c/code\u003e) and 16 KB/op; on the\nreporter\u0027s reproducer from \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/226\"\u003e#226\u003c/a\u003e it\nremoves about 12% of the remaining allocations (25.3M to 22.4M\nallocs/op, 553 MB to 505 MB per iteration).\u003c/li\u003e\n\u003cli\u003eUpdates [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/226\"\u003e#226\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/226\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/226\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/137\"\u003e#137\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/137\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/137\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-09-01 v1.58.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_4.html\"\u003eSQLite 3.53.4\u003c/a\u003e.\nUpstream\u0027s own fix for the journal-rollback data-corruption bug is part\nof this release, so the local super-journal patch v1.56.0 introduced —\nand promised to drop once upstream shipped theirs — is dropped; recovery\nbehavior is unchanged. This also bumps the pinned\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.75.6; as always, downstream modules\nmust pin the exact \u003ccode\u003emodernc.org/libc\u003c/code\u003e version this module\u0027s\n\u003ccode\u003ego.mod\u003c/code\u003e pins (see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e)).\u003c/li\u003e\n\u003cli\u003eAdd opt-in support for \u003cstrong\u003eLinux Open File Description (OFD)\nlocks\u003c/strong\u003e on database files. A POSIX record lock is owned by the\n(process, inode) pair, so the kernel drops every lock the process holds\non a database file whenever any descriptor of that file is closed: an\n\u003ccode\u003eos.Open\u003c/code\u003e/\u003ccode\u003eClose\u003c/code\u003e for a hash, a backup check or a\nmetadata probe anywhere in the process — third-party libraries included\n— silently strips SQLite\u0027s transaction locks and leaves the file\nunprotected against other processes. With OFD locking enabled, the locks\nbelong to the open file description that placed them and survive such a\nclose. \u003cstrong\u003eOff by default, and staying off until the mode has\nreal-world mileage\u003c/strong\u003e: without opting in, locking behavior is\nbyte-for-byte that of previous releases. Enable it by setting\n\u003ccode\u003eMODERNC_SQLITE_OFD_LOCK\u003d1\u003c/code\u003e in the environment the process\nstarts with (any value but the empty string or one starting with\n\u003ccode\u003e0\u003c/code\u003e; read once, at library initialization), or from Go with\nthe new \u003ccode\u003eOFDLocking(true)\u003c/code\u003e, which overrides the variable and\nmust run before the first connection is opened;\n\u003ccode\u003eOFDLockingEnabled\u003c/code\u003e reports the mode in effect. The switch is\ndeliberately \u003cstrong\u003eprocess-wide rather than a DSN parameter\u003c/strong\u003e:\nPOSIX and OFD locks taken by one process are different owners to the\nkernel and genuinely conflict, so every connection to a database file\ninside one process must use the same kind, and a per-DSN knob would\nadvertise a granularity the kernel does not offer (see the discussion in\n\u003ca href\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e).\nBecause the two kinds do not release one another, the mode is frozen at\nthe process\u0027s first lock attempt: later attempts to change it return the\nnew \u003ccode\u003eErrOFDLockingTooLate\u003c/code\u003e, while querying, and setting the\nvalue already in effect, keep working. On kernels older than 3.15, and\non filesystems that reject OFD locks, the first lock attempt falls back\nto POSIX locks for good and \u003ccode\u003eOFDLocking\u003c/code\u003e returns the new\n\u003ccode\u003eErrOFDLockingUnavailable\u003c/code\u003e from then on, which is also how\n\u003ccode\u003eOFDLockingEnabled\u003c/code\u003e turning false reports the fallback; the\nsame error is returned on every platform but Linux, where the API exists\nbut OFD locks do not. Two boundaries to note: the immunity covers the\nlocks on the database file itself, while WAL\u0027s \u003ccode\u003e-shm\u003c/code\u003e\ncoordination stays on POSIX locks; and code in the same process that\ntakes fcntl record locks of its own on a database file — which used to\nnever conflict with SQLite\u0027s, while quietly destroying them — now\nconflicts with them loudly instead. The C side —\n\u003ccode\u003eF_OFD_SETLK\u003c/code\u003e routing through a designated per-inode locking\ndescriptor that preserves upstream\u0027s \u003ccode\u003eunixInodeInfo\u003c/code\u003e\nsemantics (last-unlocker release, PENDING piggybacking,\n\u003ccode\u003eunix-excl\u003c/code\u003e), guarded to \u003ccode\u003e__linux__\u003c/code\u003e — ships in\nthe transpiled sources via \u003ca\nhref\u003d\"https://gitlab.com/cznic/libsqlite3/-/merge_requests/3\"\u003elibsqlite3!3\u003c/a\u003e\nand its follow-up hardening, with the OFD lock constants from \u003ca\nhref\u003d\"https://gitlab.com/cznic/libc/-/merge_requests/33\"\u003elibc!33\u003c/a\u003e;\nthe review rounds, the \u003ccode\u003e/proc/locks\u003c/code\u003e measurements behind the\ndesign, and the Tcl lock/WAL gate that runs both modes are recorded in\n[GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e)\nand those merge requests.\u003c/li\u003e\n\u003cli\u003eAdd the accompanying regression tests. The four OFD scenarios\ncontributed in merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/136\"\u003e#136\u003c/a\u003e — lock\nsurvival across a rogue \u003ccode\u003eos.Close\u003c/code\u003e, the interleaved-readers\nlock lifecycle, the read-only-first designated-descriptor migration, and\nthe failed-first-lock cleanup — run in a re-executed child process with\n\u003ccode\u003eMODERNC_SQLITE_OFD_LOCK\u003d1\u003c/code\u003e, since the mode is process-wide\nand frozen at the first lock so the suite\u0027s own process cannot switch; a\npositive control asserts the variable really switched the mode on before\neach scenario runs, and the two scenarios whose invariants hold under\nboth modes also run in the parent process\u0027s inherited mode.\n\u003ccode\u003eTestOFDLockingSetter\u003c/code\u003e exercises the Go call path end to end\nin a clean child — off by default, enabled before the first connection,\nthe kernel-visible \u003ccode\u003eOFDLCK\u003c/code\u003e record in\n\u003ccode\u003e/proc/locks\u003c/code\u003e as the positive control, frozen after the first\nlock — and on every other platform the switch is asserted to report\nitself unavailable.\u003c/li\u003e\n\u003cli\u003eResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/255\"\u003e#255\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/255\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/255\u003c/a\u003e).\nSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/136\"\u003e#136\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/136\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/136\u003c/a\u003e),\nthanks Nathan Herring (\u003ca\nhref\u003d\"https://gitlab.com/technosloth\"\u003e\u003ccode\u003e@​technosloth\u003c/code\u003e\u003c/a\u003e),\nand thanks Gani Georgiev (\u003ca\nhref\u003d\"https://gitlab.com/ganigeorgiev\"\u003e\u003ccode\u003e@​ganigeorgiev\u003c/code\u003e\u003c/a\u003e)\nfor pressing the opt-in default!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-19 v1.57.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd an opt-in \u003ccode\u003e_defensive\u003c/code\u003e DSN query parameter that turns\non SQLite\u0027s defensive mode for the connection, disabling the SQL-level\nfeatures that let ordinary statements deliberately corrupt the database\nfile. When \u003ccode\u003e_defensive\u003d1\u003c/code\u003e (or any\n\u003ccode\u003estrconv.ParseBool\u003c/code\u003e true value) is supplied, the driver calls\n\u003ccode\u003esqlite3_db_config\u003c/code\u003e with\n\u003ccode\u003eSQLITE_DBCONFIG_DEFENSIVE\u003c/code\u003e immediately after\n\u003ccode\u003esqlite3_open_v2\u003c/code\u003e and before every other parameter is\napplied, so the PRAGMAs the driver itself runs, the \u003ccode\u003e_pragma\u003c/code\u003e\nlist, and every statement the caller prepares are all subject to it. On\nsuch a connection \u003ccode\u003ePRAGMA writable_schema\u003dON\u003c/code\u003e, \u003ccode\u003ePRAGMA\njournal_mode\u003dOFF\u003c/code\u003e and \u003ccode\u003ePRAGMA schema_version\u003dN\u003c/code\u003e become\nsilent no-ops, and writes to a virtual table\u0027s shadow tables (fts5\u0027s\n\u003ccode\u003e_data\u003c/code\u003e, \u003ccode\u003e_idx\u003c/code\u003e and so on) and to\n\u003ccode\u003esqlite_dbpage\u003c/code\u003e fail with \u0026quot;table ... may not be\nmodified\u0026quot;; reading those tables, ordinary use of the virtual tables\nthat own them, and \u003ccode\u003eVACUUM\u003c/code\u003e are unaffected. The flag has no\nPRAGMA equivalent, so \u003ccode\u003esqlite3_db_config\u003c/code\u003e — and therefore a\nDSN parameter — is the only way to reach it short of dropping to\n\u003ccode\u003emodernc.org/sqlite/lib\u003c/code\u003e. The value is parsed before\n\u003ccode\u003esqlite3_open_v2\u003c/code\u003e, so an invalid one fails the connection\nwithout creating the database file, and the parameter must appear at\nmost once: a repeated \u003ccode\u003e_defensive\u003c/code\u003e is an error rather than\nletting the first value silently win. Absence of the parameter, or\n\u003ccode\u003e_defensive\u003d0\u003c/code\u003e, leaves SQLite\u0027s default behavior unchanged;\nexisting DSNs continue to work byte-for-byte. Two limits are worth\nstating plainly, since the name invites more confidence than the flag\nearns. Defensive mode is a hardening measure, not a sandbox for hostile\ndatabase files: it is one of several steps \u003ca\nhref\u003d\"https://www.sqlite.org/security.html\"\u003eSQLite recommends\u003c/a\u003e for\nthat purpose, and this build compiles with neither\n\u003ccode\u003eSQLITE_TRUSTED_SCHEMA\u003d0\u003c/code\u003e nor \u003ccode\u003eSQLITE_DQS\u003d0\u003c/code\u003e and\nexposes no authorizer. And it is a property of the connection, not of\nthe database file — a second handle opened on the same file without the\nparameter is unrestricted.\u003c/li\u003e\n\u003cli\u003eReject the one DSN combination defensive mode would otherwise\nswallow in silence. \u003ccode\u003e_defensive\u003d1\u003c/code\u003e together with\n\u003ccode\u003e_journal_mode\u003dOFF\u003c/code\u003e (or \u003ccode\u003e_journal\u003dOFF\u003c/code\u003e) now fails\nthe connection instead of opening one in which neither parameter was\nhonoured: SQLite turns \u003ccode\u003ePRAGMA journal_mode\u003dOFF\u003c/code\u003e into a no-op\nthat still reports success, so the driver would have accepted the mode,\nexecuted it, and left the journal untouched without telling anyone. The\ncheck runs in the validation phase introduced in v1.55.0, before any\nstatement executes, so a rejected DSN cannot leave the database\nhalf-configured. \u003ccode\u003e_pragma\u003c/code\u003e remains the exception it has\nalways been: \u003ccode\u003e_pragma\u003djournal_mode(OFF)\u003c/code\u003e alongside\n\u003ccode\u003e_defensive\u003d1\u003c/code\u003e still runs and is still silently ignored by\nSQLite. Only DSNs using \u003ccode\u003e_defensive\u003c/code\u003e can be affected, and\nthat parameter is new, so no DSN that opened before changes\nbehavior.\u003c/li\u003e\n\u003cli\u003eSee [GitHub pull request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/6\"\u003e#6\u003c/a\u003e](\u003ca\nhref\u003d\"https://redirect.github.com/modernc-org/sqlite/pull/6\"\u003emodernc-org/sqlite#6\u003c/a\u003e),\nthanks wsman!\u003c/li\u003e\n\u003cli\u003eShip the sqlite-vec license notice this module has been missing.\n\u003ccode\u003emodernc.org/sqlite/vec\u003c/code\u003e has bundled the transpiled \u003ca\nhref\u003d\"https://github.com/asg017/sqlite-vec\"\u003esqlite-vec\u003c/a\u003e sources since\nv1.47.0, but the module carried only its own BSD-3-Clause\n\u003ccode\u003eLICENSE\u003c/code\u003e and the public-domain SQLite notice. sqlite-vec is\nCopyright (c) 2024 Alex Garcia, dual-licensed Apache-2.0 OR MIT and used\nhere under MIT, whose terms require the copyright and permission notice\nto accompany substantial portions of the software — which 2.8 MB of\ntranspiled \u003ccode\u003evec/\u003c/code\u003e plainly is. The notice now ships as\n\u003ccode\u003eLICENSE-SQLITE_VEC\u003c/code\u003e in the module root, byte-identical to\nthe \u003ccode\u003eLICENSE-MIT\u003c/code\u003e in the upstream v0.1.9 archive and named\nafter the file \u003ccode\u003emodernc.org/libsqlite_vec\u003c/code\u003e extracts it into.\nAttribution was never absent — \u003ccode\u003evec\u003c/code\u003e\u0027s package documentation\nhas named the extension, pinned the version and linked upstream — but\nthe license text itself was, and the omission was ours:\n\u003ccode\u003evendor_libs/main.go\u003c/code\u003e copied the per-target transpiles and\nnothing else. It now copies the notice alongside them and fails the\nvendoring run if it cannot, so a \u003ccode\u003emake vendor\u003c/code\u003e can no longer\nquietly drop it. The \u003ccode\u003evec\u003c/code\u003e package documentation gained a\nLicense section recording that the package is under a different license\nfrom the rest of this module.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eThe SQLite notice is renamed from\n\u003ccode\u003eSQLITE-LICENSE\u003c/code\u003e to \u003ccode\u003eLICENSE-SQLITE\u003c/code\u003e\u003c/strong\u003e;\nupdate any direct links to it. Its contents are unchanged and SQLite\nremains public domain. The name now matches both the new\n\u003ccode\u003eLICENSE-SQLITE_VEC\u003c/code\u003e beside it and the\n\u003ccode\u003eLICENSE-\u0026lt;upstream\u0026gt;\u003c/code\u003e convention every other modernc.org\nrepository follows, but it is more than cosmetic: \u003ccode\u003ego mod\nvendor\u003c/code\u003e selects the files it copies into a downstream\n\u003ccode\u003evendor/\u003c/code\u003e tree by matching each name against a fixed list of\nprefixes — \u003ccode\u003eLICENSE\u003c/code\u003e among them — so a name merely\n\u003cem\u003eending\u003c/em\u003e in \u003ccode\u003eLICENSE\u003c/code\u003e was never propagated. Both\nbundled notices now travel with the code into vendored builds, which is\nwhere the MIT terms on \u003ccode\u003evec/\u003c/code\u003e keep applying. No code changes;\nno behavior changes.\u003c/li\u003e\n\u003cli\u003eLet a caller-constructed \u003ccode\u003eDriver\u003c/code\u003e register its own\nfunctions, collations and virtual table modules. \u003ccode\u003eDriver\u003c/code\u003e has\nalways held four categories of registration state, but only\n\u003ccode\u003eRegisterConnectionHook\u003c/code\u003e could put anything on a constructed\none: functions and collations were reachable through the package-level\nAPI alone, and modules through the package-level driver only, which left\nthe \u003ccode\u003emodules\u003c/code\u003e field written and read through that instance\nand so process-global state wearing a per-instance field.\n\u003ccode\u003eDriver\u003c/code\u003e now has \u003ccode\u003eRegisterFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterDeterministicScalarFunction\u003c/code\u003e,\n\u003ccode\u003eRegisterCollationUtf8\u003c/code\u003e and \u003ccode\u003eRegisterModule\u003c/code\u003e, plus\n\u003ccode\u003eMust*\u003c/code\u003e variants of the first four, each registering on that\n\u003ccode\u003eDriver\u003c/code\u003e alone; the methods are safe to call concurrently,\nand the zero \u003ccode\u003eDriver\u003c/code\u003e is ready to use as-is.\n\u003ccode\u003evtab.RegisterModule\u003c/code\u003e also honours its \u003ccode\u003edb\u003c/code\u003e\nargument now: a non-nil \u003ccode\u003edb\u003c/code\u003e registers on the driver backing\nit when that driver implements the new\n\u003ccode\u003evtab.ModuleRegisterer\u003c/code\u003e, while a nil \u003ccode\u003edb\u003c/code\u003e keeps\ntargeting the driver this package registers as \u003ccode\u003esqlite\u003c/code\u003e. One\nexisting pattern changes behavior, narrowly and loudly:\n\u003ccode\u003evtab.RegisterModule(db, ...)\u003c/code\u003e where \u003ccode\u003edb\u003c/code\u003e was\nopened on a caller-constructed \u003ccode\u003eDriver\u003c/code\u003e used to discard the\n\u003ccode\u003edb\u003c/code\u003e argument and land on the \u003ccode\u003esqlite\u003c/code\u003e driver,\nreaching every connection in the process; it now lands on the\nconstructed driver alone, so a \u003ccode\u003esql.Open(\u0026quot;sqlite\u0026quot;)\u003c/code\u003e\nconnection that used to resolve such a module gets \u003ccode\u003eno such\nmodule\u003c/code\u003e instead. The same pattern is also the one way an existing\nprogram could hold one module name on both a constructed\n\u003ccode\u003eDriver\u003c/code\u003e and the package-level one: there the first of the\ntwo registrations used to win and the second was refused as already\nregistered, whereas now the package-level implementation wins on the\nconstructed \u003ccode\u003eDriver\u003c/code\u003e\u0027s connections regardless of the order\nthey ran in. Reaching that case at all means the program ignored an\nerror the older version returned. Two smaller deviations round out the\nlist: \u003ccode\u003eDriver.RegisterModule\u003c/code\u003e reports no error for such a\ncollision, and \u003ccode\u003evtab.RegisterModule\u003c/code\u003e now validates its name\nand module arguments before the not-implemented check, so a call with an\nempty name that returned \u003ccode\u003evtab: RegisterModule not wired into\nengine\u003c/code\u003e outside this driver returns \u003ccode\u003evtab: module name must\nbe non-empty\u003c/code\u003e instead. Everything else is additive against\nv1.56.0: the package-level registration functions target the same driver\nthey always did, connections still receive every module registered\nthrough the package-level path whichever \u003ccode\u003eDriver\u003c/code\u003e opened\nthem, and a \u003ccode\u003edb\u003c/code\u003e opened on the \u003ccode\u003esqlite\u003c/code\u003e driver\nresolves to that same driver. The isolating change discussed in [GitLab\nissue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/254\"\u003e#254\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/254\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/254\u003c/a\u003e)\nis deliberately not made here.\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/135\"\u003e#135\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/135\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/135\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003cli\u003ePromote \u003ccode\u003efreebsd/386\u003c/code\u003e, \u003ccode\u003efreebsd/arm\u003c/code\u003e and\n\u003ccode\u003enetbsd/amd64\u003c/code\u003e to fully supported platforms. All three are\nnow listed in the package documentation\u0027s platform table, which had\ncarried seventeen entries while this module shipped, cross-built and\ntested twenty. They arrived as \u003cstrong\u003eexperimental\u003c/strong\u003e in v1.53.0\n— \u003ccode\u003enetbsd/amd64\u003c/code\u003e reviving a port that had been broken for\nyears, \u003ccode\u003efreebsd/386\u003c/code\u003e replacing a stale, effectively untested\nSQLite 3.41 transpile, and \u003ccode\u003efreebsd/arm\u003c/code\u003e entirely new — and\nwere deliberately kept out of that table until they had accumulated\nreal-world exposure, with promotion promised once \u0026quot;a period of\nbroader real-world testing … elapses without surprises\u0026quot;. That\nperiod has elapsed: all three have been in the builder test matrix and\nin \u003ccode\u003emake build_all_targets\u003c/code\u003e since v1.53.0, all three pass the\nfull test suite on this release\u0027s commit alongside the seventeen\nplatforms already listed, and no open issue reports a defect in any of\nthem. The two \u003ccode\u003enetbsd/amd64\u003c/code\u003e build failures filed before the\nrevival, [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/202\"\u003e#202\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/202\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/202\u003c/a\u003e)\nand [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/234\"\u003e#234\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/234\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/234\u003c/a\u003e),\nno longer reproduce at this commit: \u003ccode\u003eXsqlite3_is_interrupted\u003c/code\u003e\nis present in the sources that target selects, and the\n\u003ccode\u003emu.enter\u003c/code\u003e/\u003ccode\u003emu.leave\u003c/code\u003e symbols that broke the build\nare gone. Documentation only — the transpiled sources under\n\u003ccode\u003elib/\u003c/code\u003e are byte-for-byte what v1.56.0 shipped, and nothing\nabout how these targets behave changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-08-03 v1.56.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRe-vendor the transpiled SQLite sources, picking up\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e\u0027s fix for an upstream\n\u003cstrong\u003edata-corruption bug in SQLite 3.53.3\u0027s journal\nrollback\u003c/strong\u003e. The SQLite version is unchanged at \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_3.html\"\u003e3.53.3\u003c/a\u003e; what\nchanges is that the amalgamation is now patched before it is transpiled.\n3.53.3 reworked \u003ccode\u003ereadSuperJournal()\u003c/code\u003e to return the\nsuper-journal name through a \u003ccode\u003echar**\u003c/code\u003e out-parameter, and\n\u003ccode\u003epager_playback()\u003c/code\u003e now tests that pointer where it used to\ntest \u003ccode\u003ezSuper[0]\u003c/code\u003e. A crash during the commit of a\nmulti-database (ATTACH) transaction can leave the super-journal name and\nits checksum zeroed while the name length and the trailing magic\nsurvive; the checksum is a plain byte sum, so an all-zero name still\nvalidates and \u003ccode\u003ereadSuperJournal()\u003c/code\u003e hands back a non-NULL\npointer to an empty string. \u003ccode\u003epager_playback()\u003c/code\u003e then calls\n\u003ccode\u003esqlite3OsAccess(pVfs, \u0026quot;\u0026quot;, SQLITE_ACCESS_EXISTS)\u003c/code\u003e,\ngets ENOENT, and deletes the hot journal without playing it back —\nleaving the database corrupted. This is not a transpilation artifact: a\nplain gcc build of the stock 3.53.3 amalgamation fails on the same bytes\nwhile 3.53.2 recovers them, and it is what has been making upstream\u0027s\nown \u003ccode\u003etest/crash.test\u003c/code\u003e fail intermittently, in roughly 2% of\nruns, on every platform. The patch restores the pre-3.53.3 behaviour of\nreporting a \u003ccode\u003e(nul)\u003c/code\u003e super-journal name and will be dropped\nonce upstream ships its own fix. Every supported target carries it.\u003c/li\u003e\n\u003cli\u003eTwo targets change beyond that patch. On \u003ccode\u003elinux/s390x\u003c/code\u003e\nthe regenerated transpile allocates C bit-fields MSB-first, as the\nbig-endian platform ABI requires, rather than LSB-first; this comes from\n\u003ccode\u003emodernc.org/cc/v4\u003c/code\u003e v4.29.1 and touches bit-field accesses\nthroughout the SQLite core, s390x being this module\u0027s only big-endian\ntarget. On \u003ccode\u003elinux/riscv64\u003c/code\u003e the transpile was regenerated on a\nhost running GCC 11.4.0 where the previous one used GCC 13.3.0, which\ndrops a handful of unexported compiler-predefined macro constants (the\n\u003ccode\u003e__FLT16_*\u003c/code\u003e family, \u003ccode\u003e__DBL_IS_IEC_60559__\u003c/code\u003e and\nfriends) and changes the \u003ccode\u003eCOMPILER\u003dgcc-13.3.0\u003c/code\u003e entry\n\u003ccode\u003ePRAGMA compile_options\u003c/code\u003e reports to\n\u003ccode\u003eCOMPILER\u003dgcc-11.4.0\u003c/code\u003e; no SQLite code generation differs.\nEvery other target\u0027s generated code is byte-identical to v1.55.0 apart\nfrom the journal-rollback patch above.\u003c/li\u003e\n\u003cli\u003eBump the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.74.4, and the\nremaining dependencies to their current releases. v1.74.2 and v1.74.3\nare retracted upstream — a \u003ccode\u003efreeaddrinfo\u003c/code\u003e lock leak that\ndeadlocks name resolution — and v1.74.4 is the fix. As always,\ndownstream modules must pin the exact \u003ccode\u003emodernc.org/libc\u003c/code\u003e\nversion this module\u0027s \u003ccode\u003ego.mod\u003c/code\u003e pins (see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e)).\u003c/li\u003e\n\u003cli\u003eDocumentation sweep. \u003ccode\u003eopenbsd/amd64\u003c/code\u003e and\n\u003ccode\u003eopenbsd/arm64\u003c/code\u003e join the supported platforms table in the\npackage documentation: both have been in the builder test matrix since\nJanuary and are cross-built by \u003ccode\u003emake build_all_targets\u003c/code\u003e, but\nhad never been listed. The \u003ccode\u003evfs\u003c/code\u003e DSN query parameter — which\nnames a VFS registered with SQLite, such as one returned by\n\u003ccode\u003evfs.New\u003c/code\u003e — is now documented alongside the other DSN\nparameters on \u003ccode\u003eDriver.Open\u003c/code\u003e. The \u0026quot;Debug and development\nversions\u0026quot; section no longer describes a \u003ccode\u003eGO_GENERATE\u003c/code\u003e\nenvironment variable and a \u003ccode\u003ego generate\u003c/code\u003e that this repository\nhas not had since \u003ccode\u003egenerator.go\u003c/code\u003e moved to\n\u003ccode\u003emodernc.org/libsqlite3\u003c/code\u003e; it now points at that repository\nand \u003ccode\u003emake vendor\u003c/code\u003e instead, and the stale\n\u003ccode\u003e//go:generate\u003c/code\u003e directive naming the removed file is dropped\nwith it. \u003ccode\u003emodernc.org/sqlite/vec\u003c/code\u003e and\n\u003ccode\u003emodernc.org/sqlite/vfs\u003c/code\u003e gained the package doc comments they\nwere missing, so both finally carry a synopsis on pkg.go.dev.\nDocumentation only; no behavior changes.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eNewConnector\u003c/code\u003e, returning a\n\u003ccode\u003edatabase/sql/driver.Connector\u003c/code\u003e for use with\n\u003ccode\u003esql.OpenDB\u003c/code\u003e. It opens the same connections\n\u003ccode\u003esql.Open(\u0026quot;sqlite\u0026quot;, dsn)\u003c/code\u003e does, from the same\nregistered driver, so every function, collation, connection hook and\nvirtual table module registered through this package applies to them. It\nexists for callers that need to interpose on the physical connections\n\u003ccode\u003edatabase/sql\u003c/code\u003e opens — tracing, metrics, connection-scoped\nsetup — which \u003ccode\u003esql.Open\u003c/code\u003e gives no access to: such a caller\ncan embed the returned \u003ccode\u003eConnector\u003c/code\u003e, override\n\u003ccode\u003eConnect\u003c/code\u003e, and pass its own wrapper to\n\u003ccode\u003esql.OpenDB\u003c/code\u003e. Previously the only way to reach the registered\ndriver was the \u003ccode\u003edb, _ :\u003d sql.Open(\u0026quot;sqlite\u0026quot;,\n\u0026quot;\u0026quot;); drv :\u003d db.Driver(); db.Close()\u003c/code\u003e idiom, which works\nonly because \u003ccode\u003esql.Open\u003c/code\u003e does not connect and this driver does\nnot implement \u003ccode\u003edriver.DriverContext\u003c/code\u003e; and the only way to get\na wrapper into a \u003ccode\u003e*sql.DB\u003c/code\u003e was \u003ccode\u003esql.Register\u003c/code\u003e,\nwhich is process-global, panics on a name it has already seen, and\ncannot be undone, so a library had to invent a unique driver name per\nconfiguration. \u003ccode\u003esql.OpenDB\u003c/code\u003e registers nothing. Constructing a\n\u003ccode\u003e\u0026amp;sqlite.Driver{}\u003c/code\u003e is not an alternative — its fields are\nunexported, so it carries none of the registrations.\n\u003ccode\u003eNewConnector\u003c/code\u003e checks the DSN only as far as it can without\nopening a database — a query string that does not parse, and conflicting\n\u003ccode\u003evfs\u003c/code\u003e parameters; everything else continues to be validated\nwhen the connection is opened, so an unknown parameter or an\nout-of-range value is reported by \u003ccode\u003eConnect\u003c/code\u003e rather than at\nconstruction. Nothing about the existing \u003ccode\u003esql.Open\u003c/code\u003e path\nchanges: \u003ccode\u003e*Driver\u003c/code\u003e deliberately still does not implement\n\u003ccode\u003edriver.DriverContext\u003c/code\u003e, so \u003ccode\u003esql.Open\u003c/code\u003e remains lazy\nand DSN errors continue to surface where they always have. A runnable\nsample is in \u003ccode\u003eexamples/connector\u003c/code\u003e. Resolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/253\"\u003e#253\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/253\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/253\u003c/a\u003e),\nthanks Alessandro Segala (\u003ca\nhref\u003d\"https://gitlab.com/ItalyPaleAle\"\u003e\u003ccode\u003e@​ItalyPaleAle\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003cli\u003eDocument that a caller-constructed \u003ccode\u003esqlite.Driver\u003c/code\u003e is not\nthe driver this package registers as \u003ccode\u003e\u0026quot;sqlite\u0026quot;\u003c/code\u003e.\nIts fields are unexported, so it starts with no functions, collations or\nconnection hooks and the only way to give it any is its own\n\u003ccode\u003eRegisterConnectionHook\u003c/code\u003e method; the package-level\n\u003ccode\u003eRegister*\u003c/code\u003e functions always apply to the registered driver.\nConnections such a \u003ccode\u003eDriver\u003c/code\u003e opens therefore run without the\npackage-level functions and collations — and because a registered\nfunction silently replaces a SQLite built-in of the same name, a\n\u003ccode\u003eDriver\u003c/code\u003e you construct can evaluate \u003ccode\u003eupper(x)\u003c/code\u003e,\n\u003ccode\u003edate(x)\u003c/code\u003e and the like differently from one opened through\n\u003ccode\u003esql.Open\u003c/code\u003e. Virtual table modules are the one exception: they\nare held process-globally and reach every \u003ccode\u003eDriver\u003c/code\u003e.\nConstructing one remains supported for the private-hook pattern — a\ndriver registered under a name of its own with \u003ccode\u003esql.Register\u003c/code\u003e\nso its connection hooks apply only to its own connections — and is\notherwise best avoided in favour of \u003ccode\u003esql.Open\u003c/code\u003e or\n\u003ccode\u003eNewConnector\u003c/code\u003e. Documentation only; no behavior changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-07-20 v1.55.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003egithub.com/mattn/go-sqlite3\u003c/code\u003e-compatible shorthand\nDSN query parameters to ease migration from that driver:\n\u003ccode\u003e_busy_timeout\u003c/code\u003e/\u003ccode\u003e_timeout\u003c/code\u003e,\n\u003ccode\u003e_foreign_keys\u003c/code\u003e/\u003ccode\u003e_fk\u003c/code\u003e,\n\u003ccode\u003e_journal_mode\u003c/code\u003e/\u003ccode\u003e_journal\u003c/code\u003e,\n\u003ccode\u003e_synchronous\u003c/code\u003e/\u003ccode\u003e_sync\u003c/code\u003e,\n\u003ccode\u003e_auto_vacuum\u003c/code\u003e/\u003ccode\u003e_vacuum\u003c/code\u003e, and\n\u003ccode\u003e_query_only\u003c/code\u003e, each setting the correspondingly named PRAGMA.\nValues are validated against the same set \u003ccode\u003emattn/go-sqlite3\u003c/code\u003e\naccepts (case-insensitive) and an unrecognized value fails the\nconnection with an error, so a typo such as\n\u003ccode\u003e_synchronous\u003dfu1l\u003c/code\u003e or \u003ccode\u003e_foreign_keys\u003dyes_please\u003c/code\u003e\nis reported rather than silently downgrading durability or dropping\nforeign-key enforcement. The keys are applied in a fixed order\nindependent of their order in the DSN — \u003ccode\u003e_busy_timeout\u003c/code\u003e and\n\u003ccode\u003e_auto_vacuum\u003c/code\u003e before any \u003ccode\u003e_pragma\u003c/code\u003e values\n(\u003ccode\u003eauto_vacuum\u003c/code\u003e must be set before the database is first\nwritten), the rest after, and \u003ccode\u003e_query_only\u003c/code\u003e last — and where\na key and its alias are both supplied the alias wins, matching\n\u003ccode\u003emattn/go-sqlite3\u003c/code\u003e; selection is by presence rather than by\nvalue, so supplying the alias empty\n(\u003ccode\u003e_foreign_keys\u003don\u0026amp;_fk\u003d\u003c/code\u003e) suppresses the PRAGMA rather\nthan deferring to the primary key, again matching that driver. Behavior\nchange to note: prior releases ignored these keys entirely, so a DSN\ncarried over from a \u003ccode\u003emattn/go-sqlite3\u003c/code\u003e setup changes in two\nways. A recognized key that previously did nothing now takes effect —\n\u003ccode\u003e_foreign_keys\u003don\u003c/code\u003e begins enforcing constraints against data\nthat may already violate them, \u003ccode\u003e_journal_mode\u003dwal\u003c/code\u003e\npersistently converts the database file, and \u003ccode\u003e_query_only\u003d1\u003c/code\u003e\nmakes the connection read-only. And a value outside the accepted set now\nfails the connection with an error where the same DSN previously opened\nsuccessfully — for example a duration-style\n\u003ccode\u003e_busy_timeout\u003d5s\u003c/code\u003e or \u003ccode\u003e_timeout\u003d5000ms\u003c/code\u003e, neither\nof which is the integer that key requires. Review such DSNs before\nupgrading. \u003ccode\u003e_pragma\u003c/code\u003e is unchanged and no pre-existing\nparameter changes meaning, though see the following entry for a change\nin when all of them are validated.\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/134\"\u003e#134\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/134\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/134\u003c/a\u003e),\nthanks Toni Spets (\u003ca\nhref\u003d\"https://gitlab.com/beeper-hifi\"\u003e\u003ccode\u003e@​beeper-hifi\u003c/code\u003e\u003c/a\u003e)\nand Ian Chechin!\u003c/li\u003e\n\u003cli\u003eValidate every DSN query parameter before applying any of them.\nParameters were previously checked as each was reached, so a DSN whose\nlater parameter was rejected had already executed the PRAGMAs ahead of\nit. Because \u003ccode\u003ePRAGMA journal_mode\u003c/code\u003e and \u003ccode\u003ePRAGMA\nauto_vacuum\u003c/code\u003e are persistent changes to the database file, a DSN\nsuch as \u003ccode\u003efile:x.db?_journal_mode\u003dwal\u0026amp;_synchronous\u003dbogus\u003c/code\u003e\nfailed the connection and yet left \u003ccode\u003ex.db\u003c/code\u003e converted to WAL. A\nfailed \u003ccode\u003eOpen\u003c/code\u003e now leaves the database as it found it. This\ncovers the pre-existing \u003ccode\u003e_txlock\u003c/code\u003e, \u003ccode\u003e_timezone\u003c/code\u003e,\n\u003ccode\u003e_time_format\u003c/code\u003e, \u003ccode\u003e_time_integer_format\u003c/code\u003e,\n\u003ccode\u003e_inttotime\u003c/code\u003e and \u003ccode\u003e_texttotime\u003c/code\u003e parameters as well\nas the shorthand keys above: all of them were validated only after the\n\u003ccode\u003e_pragma\u003c/code\u003e list had already run, so the same DSN shape — a\nvalid \u003ccode\u003e_pragma\u003djournal_mode\u003dwal\u003c/code\u003e alongside a misspelled\n\u003ccode\u003e_txlock\u003c/code\u003e — converted the file before reporting the error.\nOnly the values accepted for each parameter are unchanged; a DSN that\nopened successfully before still opens, and one that failed still fails\nwith the same error. \u003ccode\u003e_pragma\u003c/code\u003e remains the sole exception,\nsince its values are executed verbatim and cannot be checked in advance:\na malformed \u003ccode\u003e_pragma\u003c/code\u003e is still rejected by SQLite as it runs,\nafter any earlier \u003ccode\u003e_pragma\u003c/code\u003e in the list has taken\neffect.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-07-15 v1.54.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to \u003ca\nhref\u003d\"https://sqlite.org/releaselog/3_53_3.html\"\u003eSQLite 3.53.3\u003c/a\u003e. This\nalso bumps the pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e to v1.74.1; as\nalways, downstream modules must pin the exact same\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this module\u0027s \u003ccode\u003ego.mod\u003c/code\u003e\npins (see [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/177\"\u003e#177\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/177\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/177\u003c/a\u003e)).\u003c/li\u003e\n\u003cli\u003eUnder the opt-in \u003ccode\u003e_texttotime\u003c/code\u003e DSN parameter, best-effort\nparse date-shaped TEXT values from columns SQLite reports with an empty\ndeclared type — aggregates and expressions over a date column\n(\u003ccode\u003eMAX(d)\u003c/code\u003e, \u003ccode\u003eCOALESCE(d, ...)\u003c/code\u003e,\n\u003ccode\u003eupper(d)\u003c/code\u003e, \u003ccode\u003ed || \u0027\u0027\u003c/code\u003e), subqueries, and typeless\nreal columns (\u003ccode\u003eCREATE TABLE t(x)\u003c/code\u003e) — into\n\u003ccode\u003etime.Time\u003c/code\u003e, instead of delivering them as a raw string that\n\u003ccode\u003eScan\u003c/code\u003e cannot store into a \u003ccode\u003e*time.Time\u003c/code\u003e. The\nexisting declared\n\u003ccode\u003eDATE\u003c/code\u003e/\u003ccode\u003eDATETIME\u003c/code\u003e/\u003ccode\u003eTIME\u003c/code\u003e/\u003ccode\u003eTIMESTAMP\u003c/code\u003e\npath is unchanged; this only adds the empty-decltype case. The\nconversion is strictly best-effort: a value that does not parse as a\ntime falls through to the original string, so no \u003ccode\u003eScan\u003c/code\u003e that\nworked before can newly fail. \u003ccode\u003eColumnTypeScanType\u003c/code\u003e continues\nto report \u003ccode\u003estring\u003c/code\u003e for empty-decltype columns, since the\ndeclared type cannot prove the column is temporal. Without\n\u003ccode\u003e_texttotime\u003c/code\u003e the behavior is byte-for-byte unchanged.\nResolves [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/248\"\u003e#248\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/248\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/248\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/133\"\u003e#133\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/133\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/133\u003c/a\u003e),\nthanks Ian Chechin!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e2026-06-21 v1.53.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003cstrong\u003eexperimental\u003c/strong\u003e \u003ccode\u003enetbsd/amd64\u003c/code\u003e support,\nresolving the long-standing build break in [GitLab issue \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/246\"\u003e#246\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/issues/246\"\u003ehttps://gitlab.com/cznic/sqlite/-/issues/246\u003c/a\u003e).\nThis target is intentionally \u003cstrong\u003enot yet listed among the supported\nplatforms\u003c/strong\u003e in the package documentation: the port had been\nbroken for years and is only now revived, and there is as yet no\nreal-world experience running it under production workloads. Green CI is\nnot the same as battle-tested — so while the full test suite (including\nthe \u003ccode\u003epcache\u003c/code\u003e and \u003ccode\u003evec\u003c/code\u003e packages and the\n\u003ccode\u003e-race\u003c/code\u003e concurrency test) passes on NetBSD 10.1 / Go 1.26.3,\nand the entire upstream toolchain (\u003ccode\u003elibc\u003c/code\u003e, \u003ccode\u003ecc\u003c/code\u003e,\n\u003ccode\u003eccgo\u003c/code\u003e, \u003ccode\u003elibz\u003c/code\u003e, \u003ccode\u003elibtcl8.6\u003c/code\u003e,\n\u003ccode\u003elibsqlite3\u003c/code\u003e, \u003ccode\u003elibsqlite_vec\u003c/code\u003e) is green on the\nNetBSD CI builder, the target is offered for evaluation only. If you run\nNetBSD, please exercise it with your own workloads and report back via\n\u003ca href\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/246\"\u003e#246\u003c/a\u003e; the\nintent is to promote it to a fully supported platform after a period of\nbroader real-world testing (on the order of a month) elapses without\nsurprises.\u003c/li\u003e\n\u003cli\u003eImplementation notes: the previously shipped\n\u003ccode\u003elib/sqlite_netbsd_amd64.go\u003c/code\u003e was a stale old-generator\ntranspile that no longer compiled (the\n\u003ccode\u003emu.enter\u003c/code\u003e/\u003ccode\u003emu.leave\u003c/code\u003e break in \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/246\"\u003e#246\u003c/a\u003e); it is\nreplaced by a fresh new-generator transpile consistent with every other\nplatform, and \u003ccode\u003emodernc.org/sqlite/vec\u003c/code\u003e (sqlite-vec) is\nvendored and auto-registers on netbsd. Correct operation requires the\nmatching pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e, which carries two\nNetBSD-specific fixes found during this work: the \u003ccode\u003emmap(2)\u003c/code\u003e\n\u003ccode\u003ePAD\u003c/code\u003e-argument ABI (without it, concurrent WAL access faults\nwith SIGBUS in the WAL-index shared memory) and a working\n\u003ccode\u003eabort(3)\u003c/code\u003e (the prior stub left SQLite\u0027s crash-recovery\n\u003ccode\u003ewritecrash\u003c/code\u003e test unable to terminate by signal). As usual,\ndownstream modules must pin the exact \u003ccode\u003emodernc.org/libc\u003c/code\u003e\nversion this module\u0027s \u003ccode\u003ego.mod\u003c/code\u003e pins.\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/82\"\u003e#82\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/82\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/82\u003c/a\u003e),\nthanks Leonardo Taccari (\u003ca\nhref\u003d\"https://gitlab.com/iamleot\"\u003e\u003ccode\u003e@​iamleot\u003c/code\u003e\u003c/a\u003e) and Thomas\nKlausner (@\u003cem\u003ewiz\u003c/em\u003e)!\u003c/li\u003e\n\u003cli\u003eAdd \u003cstrong\u003eexperimental\u003c/strong\u003e \u003ccode\u003efreebsd/386\u003c/code\u003e and\n\u003ccode\u003efreebsd/arm\u003c/code\u003e support. As with the \u003ccode\u003enetbsd/amd64\u003c/code\u003e\ntarget above, these two 32-bit FreeBSD ports are intentionally\n\u003cstrong\u003enot yet listed among the supported platforms\u003c/strong\u003e in the\npackage documentation: \u003ccode\u003efreebsd/386\u003c/code\u003e previously shipped a\nstale, effectively untested SQLite 3.41 transpile, and\n\u003ccode\u003efreebsd/arm\u003c/code\u003e is entirely new, so neither has real-world\nproduction mileage yet. Both are now freshly transpiled at SQLite 3.53.2\nconsistent with every other platform, build cleanly, and pass the full\ntest suite (core, WAL/concurrency, and the \u003ccode\u003evec\u003c/code\u003e package) on\nthe FreeBSD CI builders; they are offered for evaluation only. If you\nrun 32-bit FreeBSD, please exercise these targets with your own\nworkloads and report back — the intent is to promote\n\u003ccode\u003efreebsd/386\u003c/code\u003e, \u003ccode\u003efreebsd/arm\u003c/code\u003e, and\n\u003ccode\u003enetbsd/amd64\u003c/code\u003e to fully supported platforms in a future\nrelease cycle, once a period of broader real-world testing elapses\nwithout surprises.\u003c/li\u003e\n\u003cli\u003eImplementation notes: correct operation on \u003ccode\u003efreebsd/arm\u003c/code\u003e\nrequires the matching pinned \u003ccode\u003emodernc.org/libc\u003c/code\u003e (v1.73.4),\nwhich fixes the per-arch \u003ccode\u003emmap(2)\u003c/code\u003e \u003ccode\u003eoff_t\u003c/code\u003e\nencoding for 32-bit FreeBSD; without it the WAL shared-memory mapping\nfaults with SIGBUS under concurrent access, the same class of bug found\non the netbsd port. As usual, downstream modules must pin the exact\n\u003ccode\u003emodernc.org/libc\u003c/code\u003e version this module\u0027s \u003ccode\u003ego.mod\u003c/code\u003e\npins.\u003c/li\u003e\n\u003cli\u003eSee [GitLab merge request \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/work_items/119\"\u003e#119\u003c/a\u003e](\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/-/merge_requests/119\"\u003ehttps://gitlab.com/cznic/sqlite/-/merge_requests/119\u003c/a\u003e),\nthanks Olivier Cochard-Labbé (\u003ca\nhref\u003d\"https://gitlab.com/ocochard\"\u003e\u003ccode\u003e@​ocochard\u003c/code\u003e\u003c/a\u003e)!\u003c/li\u003e\n\u003cli\u003eAdd a Go-facing wrapper for \u003ccode\u003eSQLITE_CONFIG_PCACHE2\u003c/code\u003e.\n\u003ccode\u003ePageCache\u003c/code\u003e is the factory and \u003ccode\u003eCache\u003c/code\u003e the\nper-database instance, both idiomatic Go interfaces; \u003ccode\u003ePage\u003c/code\u003e\nexposes the raw \u003ccode\u003eBuf\u003c/code\u003e and \u003ccode\u003eExtra\u003c/code\u003e pointers that\nSQLite reads through the C pcache contract.\n\u003ccode\u003eRegisterPageCache\u003c/code\u003e and \u003ccode\u003eMustRegisterPageCache\u003c/code\u003e\ninstall the module process-globally before the first\n\u003ccode\u003esql.Open\u003c/code\u003e; subsequent Open calls are gated through a\none-shot \u003ccode\u003eXsqlite3_config(SQLITE_CONFIG_PCACHE2)\u003c/code\u003e so a\ntoo-late Register returns \u003ccode\u003eErrPageCacheTooLate\u003c/code\u003e rather than\nsilently falling through to the built-in pcache1. The binding owns the\n\u003ccode\u003esqlite3_pcache_page\u003c/code\u003e stub and re-consults the implementation\non every Fetch, reusing the stub only when the returned\n\u003ccode\u003ePage\u003c/code\u003e value is unchanged, which keeps a bounded/evicting\npurgeable cache safe by construction.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/722282f38b49191a4e24569eeac960bc033bd8f0\"\u003e\u003ccode\u003e722282f\u003c/code\u003e\u003c/a\u003e\nCHANGELOG.md: document the OFD locking opt-in and the SQLite 3.53.4\nupgrade\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/5dcac5fbafc8194fd069f61ede3c7efbd482a2ff\"\u003e\u003ccode\u003e5dcac5f\u003c/code\u003e\u003c/a\u003e\nsqlite: add the opt-in OFDLocking switch to Linux OFD locks\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/51d267714fcb4ebb2ca0969c3d31815c18fd82fb\"\u003e\u003ccode\u003e51d2677\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027ofd-lock-test\u0027\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/3f99e260f63ff2de76a94976e3d976ee75a8a4d1\"\u003e\u003ccode\u003e3f99e26\u003c/code\u003e\u003c/a\u003e\nupdate dependencies, make vendor\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/9159fa5ff00bd00f72e6893b71682b3348fa853d\"\u003e\u003ccode\u003e9159fa5\u003c/code\u003e\u003c/a\u003e\ntest: add Linux OFD lock regression tests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/2acd716d384a147b8daf1d91507f6346d409deff\"\u003e\u003ccode\u003e2acd716\u003c/code\u003e\u003c/a\u003e\ntest: add Linux OFD lock persistence test across os.Close\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/bd9dcb65646988cc78aa56effa9a69fd04893478\"\u003e\u003ccode\u003ebd9dcb6\u003c/code\u003e\u003c/a\u003e\nadd Readme Headline...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/commit/93f0742ee384d5dbba5e6cd7d49afd0e9604160c\"\u003e\u003ccode\u003e93f0742\u003c/code\u003e\u003c/a\u003e\nadd Readme Headline\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://gitlab.com/cznic/sqlite/compare/v1.57.0...v1.58.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMost Recent Ignore Conditions Applied to This Pull\nRequest\u003c/summary\u003e\n\n| Dependency Name | Ignore Conditions |\n| --- | --- |\n| modernc.org/sqlite | [\u003e\u003d 1.34.a, \u003c 1.35] |\n\u003c/details\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dmodernc.org/sqlite\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.57.0\u0026new-version\u003d1.58.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a67b527089160664b334bd10d5c3a3da987894d2",
      "tree": "f53ee7fc8048c75df2cd27000e70063b65e2aadd",
      "parents": [
        "6542b630f84dda25715f6238027cc1eed9d114c6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 08 12:22:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 12:22:17 2026 -0400"
      },
      "message": "chore: Bump github.com/klauspost/compress from 1.19.2 to 1.20.0 (#1294)\n\nBumps\n[github.com/klauspost/compress](https://github.com/klauspost/compress)\nfrom 1.19.2 to 1.20.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/klauspost/compress/releases\"\u003egithub.com/klauspost/compress\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.20.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd lzw reader/writer by \u003ca\nhref\u003d\"https://github.com/klauspost\"\u003e\u003ccode\u003e@​klauspost\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1189\"\u003eklauspost/compress#1189\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003express: add Microsoft XPRESS (MS-XCA) decompression by \u003ca\nhref\u003d\"https://github.com/MP-GOWTHAM\"\u003e\u003ccode\u003e@​MP-GOWTHAM\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1195\"\u003eklauspost/compress#1195\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003es2: arm64 assembly encoders, lowered from the amd64 avo program by\n\u003ca href\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1187\"\u003eklauspost/compress#1187\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd, huff0: improved arm64 lowering, and narrow two table loads to\nMOVWQZX by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1175\"\u003eklauspost/compress#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egzhttp: limit jitter hash to jitterBuffer bytes by \u003ca\nhref\u003d\"https://github.com/VedantMadane\"\u003e\u003ccode\u003e@​VedantMadane\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1192\"\u003eklauspost/compress#1192\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003es2: clamp the Go EncodeBetter skip to match the assembly by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1190\"\u003eklauspost/compress#1190\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003exxhash: bound input of non-preemptive assembly by \u003ca\nhref\u003d\"https://github.com/AskAlexSharov\"\u003e\u003ccode\u003e@​AskAlexSharov\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1196\"\u003eklauspost/compress#1196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd/huff0: fold two ISA-gap x86 idioms in the avo arm64 lowering by\n\u003ca href\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1199\"\u003eklauspost/compress#1199\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: test against go1.27.x, drop go1.24.x by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1198\"\u003eklauspost/compress#1198\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ezstd/huff0: break false partial-register dependencies in seqdec/4X\ndecoders by \u003ca\nhref\u003d\"https://github.com/lizthegrey\"\u003e\u003ccode\u003e@​lizthegrey\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1197\"\u003eklauspost/compress#1197\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eflate: Writer L7-9 with dictionary can emit the dictionary to stream\nby \u003ca href\u003d\"https://github.com/klauspost\"\u003e\u003ccode\u003e@​klauspost\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1201\"\u003eklauspost/compress#1201\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/VedantMadane\"\u003e\u003ccode\u003e@​VedantMadane\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1192\"\u003eklauspost/compress#1192\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/AskAlexSharov\"\u003e\u003ccode\u003e@​AskAlexSharov\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1196\"\u003eklauspost/compress#1196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/MP-GOWTHAM\"\u003e\u003ccode\u003e@​MP-GOWTHAM\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/pull/1195\"\u003eklauspost/compress#1195\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/klauspost/compress/compare/v1.19.2...v1.20.0\"\u003ehttps://github.com/klauspost/compress/compare/v1.19.2...v1.20.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/9d8ccb1d9567304420eb55a88b6f63a2067a8da4\"\u003e\u003ccode\u003e9d8ccb1\u003c/code\u003e\u003c/a\u003e\nflate: Writer with a preset dictionary emits the dictionary into the\noutput s...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/f93f23a4bd5434ab55872aff9717f769398fa59e\"\u003e\u003ccode\u003ef93f23a\u003c/code\u003e\u003c/a\u003e\nbuild(deps): bump the github-actions group with 6 updates (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1200\"\u003e#1200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/42f9d969024a20735148e3577d4b602ed4d0590a\"\u003e\u003ccode\u003e42f9d96\u003c/code\u003e\u003c/a\u003e\nxpress: add Microsoft XPRESS (MS-XCA) decompression (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1195\"\u003e#1195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/629c2ea148ae6ddbd3b70bc1e35076aaf94b7143\"\u003e\u003ccode\u003e629c2ea\u003c/code\u003e\u003c/a\u003e\nzstd/huff0: break false partial-register dependencies in seqdec/4X\ndecoders (...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/ba74977eb2c7002604765bf9c7f3c8a497224d60\"\u003e\u003ccode\u003eba74977\u003c/code\u003e\u003c/a\u003e\nci: test against go1.27.x, drop go1.24.x (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1198\"\u003e#1198\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/f5c1529bc7838087176f39eb85e2495f5292606d\"\u003e\u003ccode\u003ef5c1529\u003c/code\u003e\u003c/a\u003e\nzstd/huff0: pin avo peephole folds, regenerate arm64 (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1199\"\u003e#1199\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/73508b25f222ed50fad2ff7540c059f893781c30\"\u003e\u003ccode\u003e73508b2\u003c/code\u003e\u003c/a\u003e\ns2: arm64 assembly encoders, lowered from the amd64 avo program (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1187\"\u003e#1187\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/0e43f04adae8400cdaf545242467c9910ce9a513\"\u003e\u003ccode\u003e0e43f04\u003c/code\u003e\u003c/a\u003e\nxxhash: bound input of non-preemptive assembly (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1196\"\u003e#1196\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/4005c155a2670b665ddc52205b6e9dacb43cf651\"\u003e\u003ccode\u003e4005c15\u003c/code\u003e\u003c/a\u003e\ns2: clamp the Go EncodeBetter skip to match the assembly (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1190\"\u003e#1190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/klauspost/compress/commit/dd6de45e8beb8833684fbafb4ecd06b0062dafa6\"\u003e\u003ccode\u003edd6de45\u003c/code\u003e\u003c/a\u003e\ngzhttp: limit jitter hash to jitterBuffer bytes (\u003ca\nhref\u003d\"https://redirect.github.com/klauspost/compress/issues/1192\"\u003e#1192\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/klauspost/compress/compare/v1.19.2...v1.20.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub.com/klauspost/compress\u0026package-manager\u003dgo_modules\u0026previous-version\u003d1.19.2\u0026new-version\u003d1.20.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\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": "6542b630f84dda25715f6238027cc1eed9d114c6",
      "tree": "76eec6d4c00798b4ffadc57574ffeebbca1634a7",
      "parents": [
        "72e9a5695337bab9ac01ec1e4d58177bc4949dc3"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 04 22:29:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 16:29:57 2026 -0400"
      },
      "message": "fix(compute): detect temporal rounding overflow (#1127)\n\n### Rationale for this change\n\nTemporal rounding can overflow while converting timestamps to\nnanoseconds, calculating the rounding interval, or multiplying a rounded\nquotient. The current unchecked arithmetic can return an incorrect\ntimestamp.\n\n### What changes are included in this PR?\n\nUse checked arithmetic for temporal conversions, interval setup,\nrounding results, calendar conversion, and origin adjustments. Propagate\noverflow as an Arrow invalid-value error.\n\n### Are these changes tested?\n\n- `go test ./arrow/compute`\n\n### Are there any user-facing changes?\n\nInputs and options that cannot be represented during temporal rounding\nnow return an error instead of a wrapped result."
    },
    {
      "commit": "72e9a5695337bab9ac01ec1e4d58177bc4949dc3",
      "tree": "0a11a45412157f4fe08c4e648d6644db0ac5f8bd",
      "parents": [
        "89448e691dcf4930492d83ebad760f54d8bea6fc"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 04 18:46:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 12:46:17 2026 -0400"
      },
      "message": "perf(compute): add ARM64 NEON compression for null-free 32-bit fixed-width filters (#1286)\n\n## Summary\n\n* **Add an ARM64 NEON path** for null-free 32-bit fixed-width filters.\n* **Compact two groups of four values** with table-driven `VTBL`.\n* **Use exact-size stores** for the selected values.\n* Keep the current fallbacks for nulls, short or unaligned inputs, dense\nmasks, unsupported CPUs, and `noasm` builds.\n\n## Benchmark\n\nHardware: Apple M1 Pro, macOS arm64, Go 1.26.3.\n\nCommand: `go test ./arrow/compute -run \u0027^$\u0027 -bench\n\u0027^BenchmarkFilter(Int32|Float32)MixedMasks$\u0027 -benchtime\u003d100ms -count\u003d3\n-benchmem`\n\nThe baseline used the same command with `GODEBUG\u003dcpu.all\u003doff`, which\nforces the existing scalar path. Values are median ns/op from three\nruns. Pattern order is `alternating / random25 / random50 / random75 /\nclustered50 / all-selected / none-selected`.\n\n| Type | Rows | Baseline ns/op | NEON ns/op | Speedup |\n| --- | ---: | --- | --- | --- |\n| int32 | 1K | 9002 / 6043 / 7167 / 6126 / 4336 / 4603 / 3376 | 4398 /\n4345 / 4617 / 4679 / 4548 / 4812 / 3432 | 2.05x / 1.39x / 1.55x / 1.31x\n/ 0.95x / 0.96x / 0.98x |\n| int32 | 64K | 274954 / 145437 / 226114 / 192618 / 36169 / 45217 / 6176\n| 37957 / 69222 / 90711 / 71447 / 35481 / 46478 / 6306 | 7.24x / 2.10x /\n2.49x / 2.70x / 1.02x / 0.97x / 0.98x |\n| int32 | 1M | 4016235 / 2118964 / 3441839 / 2839365 / 300915 / 232850 /\n48657 | 340022 / 1273778 / 1530240 / 1312927 / 291230 / 235818 / 48973 |\n11.81x / 1.66x / 2.25x / 2.16x / 1.03x / 0.99x / 0.99x |\n| float32 | 1K | 8875 / 5979 / 7188 / 6157 / 4455 / 4647 / 3373 | 4428 /\n4286 / 4579 / 4686 / 4441 / 4844 / 3418 | 2.00x / 1.40x / 1.57x / 1.31x\n/ 1.00x / 0.96x / 0.99x |\n| float32 | 64K | 267098 / 145365 / 226897 / 193153 / 35817 / 44286 /\n6171 | 37340 / 71035 / 93770 / 73563 / 36372 / 44714 / 6239 | 7.15x /\n2.05x / 2.42x / 2.63x / 0.98x / 0.99x / 0.99x |\n| float32 | 1M | 4061853 / 2116060 / 3435942 / 2850531 / 304719 / 272701\n/ 48689 | 344281 / 1268462 / 1516895 / 1300810 / 293596 / 233508 / 49292\n| 11.80x / 1.67x / 2.27x / 2.19x / 1.04x / 1.17x / 0.99x |\n\nFallback controls stayed on the existing path:\n\n| Control | Baseline ns/op | NEON build ns/op |\n| --- | ---: | ---: |\n| unaligned filter offset 3 | 280053 | 271730 |\n| short input, 56 rows | 4436 | 4392 |\n| non-multiple length, 65537 rows | 272665 | 268016 |\n\n## Tests\n\n* `go test ./arrow/compute/... -count\u003d1`\n* `go test -race ./arrow/compute/internal/kernels ./arrow/compute\n-count\u003d1`\n* `go test -tags noasm ./arrow/compute/internal/kernels ./arrow/compute\n-count\u003d1`\n* `GOARCH\u003damd64 go test -c -o /dev/null\n./arrow/compute/internal/kernels`\n* `GOARCH\u003damd64 go test -c -o /dev/null ./arrow/compute`\n\n## Limitations\n\n* This is limited to ARM64 ASIMD, 32-bit fixed-width values, no value\nnulls, no filter nulls, aligned filter bitmap offsets, and lengths\ndivisible by 8.\n* All other cases keep using the existing general or specialized paths."
    },
    {
      "commit": "89448e691dcf4930492d83ebad760f54d8bea6fc",
      "tree": "be494e7269bbc10f51bc261a0bc06e6927908d56",
      "parents": [
        "4caad589dde22a0313c6792013671e5d782c7532"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 04 18:28:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 12:28:26 2026 -0400"
      },
      "message": "perf(compute): add ARM64 NEON comparisons for 8- and 16-bit integers (#1288)\n\n## Summary\n\n- Add ARM64 NEON comparisons for `int8`, `uint8`, `int16`, and `uint16`.\n- Cover array-array, array-scalar, and scalar-array inputs.\n- Keep the existing generic fallback for tails and bitmap offsets.\n- Add correctness coverage for signed and unsigned boundaries and bit\npacking.\n- Add native benchmarks for the narrow integer types.\n\n## Benchmark\n\nApple M1 Pro, Go 1.26.3. `-benchtime\u003d50ms -count\u003d3`. Baseline is `-tags\nnoasm`.\n\n| Case | NEON | Generic | Speedup |\n| --- | ---: | ---: | ---: |\n| int8 array-array 64K alternating | 5.01 us | 75.7 us | 15.1x |\n| uint8 array-scalar 1M random50 | 68.9 us | 1.00 ms | 14.5x |\n| int16 scalar-array 64K clustered50 | 4.31 us | 59.1 us | 13.7x |\n| uint16 array-array 1M all | 79.7 us | 1.02 ms | 12.8x |\n\nThe benchmark matrix also covers 1K, 64K, and 1M elements, all three\noperand shapes, alternating, random 25/50/75%, clustered 50%, all, and\nnone patterns.\n\n## Tests\n\n- `go test ./arrow/compute/internal/kernels ./arrow/compute`\n- `go test -race ./arrow/compute/internal/kernels ./arrow/compute`\n- `go test -tags noasm ./arrow/compute/internal/kernels ./arrow/compute`\n- Darwin/amd64 and Linux/amd64 compile checks"
    },
    {
      "commit": "4caad589dde22a0313c6792013671e5d782c7532",
      "tree": "13e4dbc8e9186374bec6e1eb1f4503dd13c3c8dc",
      "parents": [
        "f9a71c002473e21051be077d4a5666da4fb4f5f0"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Fri Sep 04 18:28:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 12:28:17 2026 -0400"
      },
      "message": "perf(compute): SIMD-compact fragmented filters into take indices (#1287)\n\n### Rationale for this change\n\n`GetTakeIndices` currently grows a buffer once per selected run.\nFragmented filters such as alternating and short random runs create many\nallocations and are much slower than dense filters.\n\n### What changes are included in this PR?\n\n- Add an ARM64 NEON path for large, byte-aligned, non-null `uint32`\nfilters.\n- Compact 4-bit mask lookups into exact-size take-index output.\n- Keep `uint16`, nullable, unaligned, small, dense, long-run, and\n`EmitNulls` paths unchanged.\n- Add coverage for all 4-bit masks, offsets, tails, padding bits, null\nbehavior, and width boundaries.\n- Add GetTakeIndices and large FilterRecordBatch benchmarks.\n\n**Benchmark hardware:** Apple M1 Pro, macOS arm64\n\n**Commands:**\n\n```text\ngo test ./arrow/compute/internal/kernels -run \u0027^$\u0027 -bench\u003d\u0027^BenchmarkGetTakeIndices/(all-selected|all-clear|long-runs|alternating|short-runs|random)/\u0027 -benchmem -benchtime\u003d3x -count\u003d3\ngo test ./arrow/compute -run \u0027^$\u0027 -bench\u003d\u0027^BenchmarkFilterRecordBatchGetTakeIndices/(rows\u003d65536|rows\u003d1048576)$\u0027 -benchmem -benchtime\u003d1x -count\u003d3\n```\n\nMedian of the three reported benchmark samples. Values are ns/op per\ncall.\n\n| Workload | Selection pattern | Existing | NEON path | Speedup |\n| --- | --- | ---: | ---: | ---: |\n| GetTakeIndices 64K | all-selected | 41.8 us | 41.2 us | 1.0x |\n| GetTakeIndices 64K | all-clear | 2.54 us | 3.03 us | 0.84x |\n| GetTakeIndices 64K | long-runs | 826 us | 923 us | 0.89x |\n| GetTakeIndices 64K | alternating | 48.1 ms | 21.9 us | 2,198x |\n| GetTakeIndices 64K | short-runs | 4.87 ms | 22.6 us | 215x |\n| GetTakeIndices 64K | random | 73.5 ms | 90.0 us | 817x |\n| GetTakeIndices 1M | all-selected | 1.80 ms | 0.80 ms | 2.3x* |\n| GetTakeIndices 1M | all-clear | 37.8 us | 39.0 us | 0.97x |\n| GetTakeIndices 1M | long-runs | 705 ms | 176 ms | 4.0x* |\n| GetTakeIndices 1M | alternating | 4.31 s | 515 us | 8,369x |\n| GetTakeIndices 1M | short-runs | 201 ms | 230 us | 873x |\n| GetTakeIndices 1M | random | 3.56 s | 1.69 ms | 2,111x |\n\n`*` These patterns use the existing fallback. The measured difference is\nrun-to-run allocator and GC noise, not a new fast path.\n\nDownstream serial `FilterRecordBatch` with one Int64 column and an\nalternating filter measured **17.7 ms to 152 us (116x)** at 64K rows and\n**2.06 s to 831 us (2,477x)** at 1M rows. This benchmark includes both\ntake-index generation and the downstream Take call.\n\n### Are these changes tested?\n\n- `go test ./...` with the Arrow and Parquet test-data submodules\ninitialized and `PARQUET_TEST_DATA` / `ARROW_TEST_DATA` set.\n- `go test ./arrow/compute/...`\n- `go test -tags noasm ./arrow/compute/internal/kernels -run\n\u0027TestGetTakeIndices(BatchedRanges|Uint32Coverage)$\u0027 -count\u003d1`\n- `GOOS\u003dlinux GOARCH\u003damd64 go test -c ./arrow/compute/internal/kernels\n-o /dev/null`\n\n### Are there any user-facing changes?\n\nNo API changes. The optimization is ARM64-only and only applies to the\nnarrow `uint32`, non-null, `DropNulls` case."
    }
  ],
  "next": "f9a71c002473e21051be077d4a5666da4fb4f5f0"
}
