Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
ec1012f
feat(python): fail soft on unsupported Polars predicates in to_polars…
robert3005 Oct 28, 2026
9c12160
string-bench: benchmark onpair-16 and add the OnPair paper datasets (…
joseph-isaacs Oct 28, 2026
ac513ce
fix: keep nullability when short-circuiting AND/OR against a constant…
robert3005 Oct 28, 2026
97f6d08
Upgrade fsst-rs to 0.7.0 and onpair to 0.3.0 (#10909)
robert3005 Oct 28, 2026
ba71c3b
Enable preview and unstable editions in the fuzzer (#10840)
robert3005 Oct 28, 2026
9a844c1
Fix exact/inexact mixing in uncompressed_size_in_bytes (#10925)
joseph-isaacs Oct 28, 2026
10f084b
duckdb: support windows-x86 and windows-arm64 (#9570)
myrrc Oct 28, 2026
8c58e9e
For decompression works on owned arrays (#10256)
robert3005 Oct 28, 2026
c45aa5d
Add a naive `Unary` encoding in a new `vortex-elias-fano` crate (#10609)
rapour Oct 28, 2026
5747de1
string-bench: run the new inputs in CI (#10924)
joseph-isaacs Oct 28, 2026
55dca37
Add a canonical decimal width and import decimals at it (#10897)
connortsui20 Oct 28, 2026
6005d19
Add an in-memory `Widen` encoding for integers (#10864)
connortsui20 Oct 28, 2026
565f090
Build precision 19 decimal scalars at `i128` (#10903)
connortsui20 Oct 28, 2026
641d1e9
duckdb: serialize table function state (#10929)
myrrc Oct 28, 2026
768a20e
Allocate more kernel outputs through the session allocator (#10622)
robert3005 Oct 28, 2026
2fb259b
Add compute benchmarks for `Widen` (#10888)
connortsui20 Oct 28, 2026
37031b1
Compute `Widen` aggregates on the values (#10890)
connortsui20 Oct 28, 2026
bd93ae7
Run `Widen` arithmetic, cast, fill null, zip and between on the value…
connortsui20 Oct 28, 2026
35e7097
ci: deploy explore to Vercel alongside Cloudflare Pages (#10911)
lwwmanning Oct 28, 2026
9bf403a
perf: transfer statistics to executed arrays without cloning the set …
joseph-isaacs Oct 28, 2026
3953e98
perf(bytebool): take through the fallible lane kernels (#10143)
robert3005 Oct 28, 2026
10a4d3a
ci: deploy docs to Vercel alongside Cloudflare Pages (#10912)
lwwmanning Oct 28, 2026
14b7109
Remove repeated elements from IN lists (#10685)
robert3005 Oct 28, 2026
1577edb
chore: remove the Cloudflare Pages deploys and update bench paths (#1…
lwwmanning Oct 28, 2026
10d2d39
bench: name the data directory when capturing file sizes (#10935)
mprammer Oct 28, 2026
b2faca8
vortex-bench: run ClickBench on its first N files (#10936)
mprammer Oct 28, 2026
40e0b1c
Add a scan for the range of valid decimal values (#10939)
connortsui20 Oct 28, 2026
c84e489
fix: add explore's CSP and fix docs search and previews (#10951)
lwwmanning Oct 29, 2026
bacfda9
Execute Delta iteratively (#10208)
joseph-isaacs Oct 29, 2026
48a3365
Update dependency filelock to v4 [SECURITY] (#10955)
renovate[bot] Oct 29, 2026
1a09eb4
Execute interleaved decimal arrays (#10940)
connortsui20 Oct 29, 2026
891c01a
fix(alp): bounds-check ALP-RD stored metadata and left-parts codes (#…
devtechedge Oct 29, 2026
f04a28c
Avoid a per-run `zip_eq` call in run-end bool decoding (#10962)
connortsui20 Oct 29, 2026
322a04a
Push slices through filtered arrays (#10959)
joseph-isaacs Oct 29, 2026
b229284
Update libz-sys to 1.1.31 to fix RUSTSEC-2026-0418 (#10963)
robert3005 Oct 29, 2026
c338bca
Separate RowFn batch inspection from execution planning (#10899)
connortsui20 Oct 29, 2026
705911c
Speed up V2 scans and default datafusion-bench to V2 for TPC-DS and C…
joseph-isaacs Oct 29, 2026
6cc1b92
docs: use the user as commit author and signoff in AGENTS.md (#10942)
robert3005 Oct 29, 2026
1d09649
Run each CodSpeed job on one instance type (#10965)
robert3005 Oct 29, 2026
2eae764
Make uncompressed_size_in_bytes always exact and drop its options (#1…
joseph-isaacs Oct 29, 2026
2a9c762
Add uncompressed_size_in_bytes to the preview edition (#10922)
joseph-isaacs Oct 29, 2026
e4dce8b
Layout plugins read and write more than one wire ID (#10704)
mhk197 Oct 29, 2026
1c2f6eb
`DictStrategy` probes a fixed row sample instead of the first chunk (…
mhk197 Oct 29, 2026
faa6473
Extend the RunEnd filter benchmark (#10978)
robert3005 Oct 29, 2026
67b9cf7
fix(duckdb): don't drop or reject filters on function arguments Vorte…
jackylee-ch Oct 29, 2026
c56ee88
Add a toggle for writing nested file statistics (#10972)
robert3005 Oct 29, 2026
d4d9234
Resolve three small `TODO(connor)` items (#10974)
connortsui20 Oct 29, 2026
7e70afc
Add region=us-east-1 to all runs-on configurations (#10982)
joseph-isaacs Oct 29, 2026
c6d6bad
Resolve more small `TODO(connor)` items (#10985)
connortsui20 Oct 29, 2026
b8a2095
Benchmark the copy of decimal values into the canonical width (#10990)
connortsui20 Oct 29, 2026
1d7d305
chore: refresh lockfiles to clear Dependabot alerts (#10999)
lwwmanning Oct 29, 2026
0abc850
ci: patch the Vercel CLI's vulnerable dependencies (#11000)
lwwmanning Oct 29, 2026
ff21cb1
Reduce syscall noise in Python scan benchmarks (#10998)
connortsui20 Oct 29, 2026
1905734
Clarify DCO sign-off requirements and agent attribution (#11001)
joseph-isaacs Oct 29, 2026
f2aa1c2
Record the uncompressed size in file stats when editions allow it (#1…
joseph-isaacs Oct 29, 2026
25eb07b
chore: wait 7 days for new releases and fix Renovate's lock file PRs …
lwwmanning Oct 30, 2026
016617d
ci: Split cargo hack into 2 runners and only run check for feature co…
robert3005 Oct 30, 2026
85fa27a
ci: run Rust lint commands concurrently (#11023)
joseph-isaacs Oct 30, 2026
e0976da
Enable the list layout in benchmarks through a bench-only edition (#1…
mhk197 Oct 30, 2026
1e632e2
ci: run all cargo-deny checks in one job (#11025)
joseph-isaacs Oct 30, 2026
2d7dabf
ci: consolidate small integration jobs (#11029)
joseph-isaacs Oct 30, 2026
e148f02
Lock file maintenance (#11009)
renovate[bot] Oct 30, 2026
f3aef93
Lock file maintenance (#11010)
renovate[bot] Oct 30, 2026
85466bb
Allow any Graviton4 instance for bench builds and assert the CPU (#11…
joseph-isaacs Oct 30, 2026
8a35f30
Write the list layout only for statpopgen and polarsignals benchmark …
mhk197 Oct 30, 2026
7f874b0
Lock file maintenance (#11011)
renovate[bot] Oct 30, 2026
05fd248
Compare PR benchmarks against the benchmarks database instead of S3 (…
joseph-isaacs Oct 30, 2026
996bb93
Stop writing benchmark results to S3 (#10988)
joseph-isaacs Oct 30, 2026
4c39dfd
Fix Arrow export of constant null variants (#10973)
blaginin Oct 30, 2026
5d84290
Return errors for invalid temporal types and values (#11015)
connortsui20 Oct 30, 2026
da5587f
fix(bench): retry the post-ingest database write across RDS restarts …
lwwmanning Oct 30, 2026
d197efd
fix(spark): read every column as nullable (#11020)
ChristopherWirt Oct 30, 2026
1850cab
Replace Kanal with async-channel (#11040)
gatesn Oct 30, 2026
416e3a5
Speed up the decimal widening copy (#10989)
connortsui20 Oct 30, 2026
da9a880
chore: let Renovate propose grouped major updates for vortex-web (#11…
lwwmanning Oct 30, 2026
a9ec4e7
chore: let Renovate propose minor and patch updates to GitHub Actions…
lwwmanning Oct 30, 2026
38d8fbc
Run CUDA Rust and Python tests in parallel steps (#11039)
joseph-isaacs Oct 30, 2026
efc7889
Ingest string-bench results into the compression tables (#11044)
joseph-isaacs Oct 30, 2026
56443b3
Separate benchmark data preparation from timed benchmark runs (#11045)
joseph-isaacs Oct 30, 2026
89c5009
Optimize VCF parsing with concurrent range requests and parallel row …
joseph-isaacs Oct 30, 2026
fad0b7e
Default duckdb-bench to the V2 scan for TPC-DS and ClickBench (#11047)
joseph-isaacs Oct 30, 2026
37d9e8e
Use zstd level 3 for the compress-bench Parquet baseline (#11051)
robert3005 Oct 30, 2026
f32cb54
Add serialization for aggregate functions (#11048)
gatesn Oct 30, 2026
e8dd69e
Fix benchmark runner labels exceeding 255 character limit (#11054)
joseph-isaacs Oct 30, 2026
073650f
Choose the scan version per benchmark in the bench orchestrator (#11049)
joseph-isaacs Oct 30, 2026
19dcd2f
bench: collect reproducible S3 request measurements (#10919)
joseph-isaacs Oct 30, 2026
7baa376
feat(spark): push nested struct pruning down to the native scan (#10957)
ChristopherWirt Oct 30, 2026
1200ee8
Skip CI jobs for draft pull requests (#11059)
joseph-isaacs Oct 30, 2026
493967c
Run the FineWeb benchmark on the V2 scan (#11055)
joseph-isaacs Oct 30, 2026
96fc43d
Add execution path consistency assertions (#11013)
connortsui20 Oct 30, 2026
2b52084
Vortex spark integration is a fileformat not a tableprovider (#9658)
robert3005 Oct 31, 2026
768d4fa
perf(layout): read a path below a nullable struct's field without the…
gitRasheed Oct 26, 2026
3f5946a
fix(array): accept timestamps beyond jiff's range
gitRasheed Oct 23, 2026
37cfde1
fix(datetime-parts): reject timestamps whose days do not fit i32
gitRasheed Oct 23, 2026
7c11614
fix(datetime-parts): decline days pushdown when narrowed days cannot …
gitRasheed Oct 23, 2026
bb89468
Shorten comments
gitRasheed Oct 28, 2026
32a2167
fix(jni): release the schema export in VortexWriter.build()
gitRasheed Oct 28, 2026
cb0cab4
fix(jni): attach native worker threads to the JVM as daemons
gitRasheed Oct 29, 2026
1f5bc19
perf(spark): read Utf8View values in place instead of copying each one
gitRasheed Oct 28, 2026
d4400e0
fix(spark): let scan and write options replace table options in any case
gitRasheed Oct 29, 2026
23dc118
fix(spark): use vortex.* session settings as option defaults
gitRasheed Oct 29, 2026
3d5f0a3
fix(spark): reject unusable write options on the driver
gitRasheed Oct 29, 2026
fb4fe22
perf(layout): check a nullable struct field's nulls without reading t…
gitRasheed Oct 29, 2026
0a22b29
docs(spark): say that s3a:// needs hadoop-aws on the classpath
gitRasheed Oct 29, 2026
617990a
test(spark): cover write commits, table layout and counts against Par…
gitRasheed Oct 29, 2026
165435f
test(spark): check that fields below nullable structs read only that …
gitRasheed Oct 30, 2026
e7763ba
fix(spark): resolve nested fields against each file's schema
gitRasheed Oct 30, 2026
670f128
test(spark): compare Vortex reads and writes with Parquet's
gitRasheed Oct 29, 2026
a671658
test(spark): make the retry and scan-path tests fail when their path …
gitRasheed Oct 29, 2026
7e07340
fix(spark): match file columns by shape without converting their types
gitRasheed Oct 30, 2026
cb9d3c4
perf(spark): split large files into row ranges
gitRasheed Oct 29, 2026
6963600
push list_transform lambda bodies into list layout element reads
mhk197 Oct 28, 2026
b0fa12c
push every list_transform use into element reads, mask elements the k…
mhk197 Oct 29, 2026
159b947
fix(layout): push list_transform through a nullable struct's fields
gitRasheed Oct 30, 2026
5c92644
feat(jni): build list_transform expressions
gitRasheed Oct 30, 2026
d566061
feat(spark): add a vortex.listLayout write option
gitRasheed Oct 30, 2026
24cce4d
feat(spark): prune struct fields inside arrays
gitRasheed Oct 30, 2026
e71f763
fix(jni): keep the supplied session for a list-layout write
gitRasheed Oct 30, 2026
b895313
docs(spark): say where Spark prunes fields inside arrays
gitRasheed Oct 30, 2026
4e7b141
fix(spark): return null for a null array in a pruned array column
gitRasheed Oct 30, 2026
86bbeac
test(spark): read columns as other types and compare with Parquet
gitRasheed Oct 30, 2026
1a38535
fix(spark): reject a file column read as a type it cannot be read as
gitRasheed Oct 30, 2026
1aaf6da
test(spark): read structs inside arrays and maps as other types
gitRasheed Oct 30, 2026
5640156
fix(spark): check structs inside arrays and maps against the file
gitRasheed Oct 30, 2026
079d486
perf(spark): match only filtered columns against each file
gitRasheed Oct 30, 2026
f0465f9
perf(spark): append rows straight into the Arrow batch
gitRasheed Oct 29, 2026
46d1c53
fix(spark): warn about Arrow memory left at writer close instead of f…
gitRasheed Oct 30, 2026
a22412e
test(spark): enable the writer memory test
gitRasheed Oct 30, 2026
22b1162
test(spark): write fewer rows in the nulls round-trip test
gitRasheed Oct 30, 2026
8acaaec
fix(spark): let abort close every writer after a failed write
gitRasheed Oct 30, 2026
105ea64
test(spark): run the writer abort test on the Spark 4.1 and 4.2 suites
gitRasheed Oct 30, 2026
188ec8b
test(spark): compare IN filters with Parquet and time large ones
gitRasheed Oct 30, 2026
96fa674
perf(spark): push a large IN down as a set lookup within its bounds
gitRasheed Oct 30, 2026
3c9dc19
feat(spark): prune nested fields for catalog and bucketed tables
gitRasheed Oct 30, 2026
56f8020
docs(spark): say when spark.sql.extensions is needed for V1 pruning
gitRasheed Oct 30, 2026
3a4f2c5
fix(file): weigh cached footers by the memory they hold
gitRasheed Oct 30, 2026
bc1e0f4
test(spark): measure array element pruning without id
gitRasheed Oct 31, 2026
aeeb898
fix(jni): retain imported Java buffers independently
ChristopherWirt Oct 30, 2026
551171d
feat(spark): write batches through the Java-root writer API
gitRasheed Oct 31, 2026
994af0e
test(jni): pass listLayout to NativeWriter.create
gitRasheed Oct 31, 2026
8777da6
test(spark): check written batches are freed before close
gitRasheed Oct 31, 2026
32ddfdb
test(spark): write 128 batches in the batch-release test
gitRasheed Oct 31, 2026
2cdf4b5
perf(spark): write 8,192-row batches by default
gitRasheed Oct 31, 2026
a6c3b7e
perf(spark): skip writing the leaves of null structs
gitRasheed Oct 31, 2026
f30f3ae
fix(layout): rebase sliced list chunks before writing the list layout
gitRasheed Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
[profile.default]
slow-timeout = { period = "30s", terminate-after = 5 }

# Spatial tests concurrently call INSTALL spatial which fails
[test-groups]
duckdb-extension-install = { max-threads = 1 }

[[profile.default.overrides]]
filter = 'test(compress_large_int | fsst_compress_offsets_overflow_i32)'
priority = 100

[[profile.default.overrides]]
filter = 'package(vortex-duckdb) & (test(spatial_) | test(test_geometry))'
test-group = 'duckdb-extension-install'
30 changes: 30 additions & 0 deletions .github/actions/assert-cpu/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: "Assert CPU"
description: "Fail unless the runner has the expected CPU, so `-C target-cpu=native` builds match the benchmark machine"

inputs:
implementer:
description: "Expected `CPU implementer` from /proc/cpuinfo"
required: false
default: "0x41" # Arm
part:
description: "Expected `CPU part` from /proc/cpuinfo"
required: false
default: "0xd4f" # Neoverse V2 (Graviton4)

runs:
using: "composite"
steps:
- name: Assert CPU
shell: bash
env:
EXPECTED_IMPLEMENTER: ${{ inputs.implementer }}
EXPECTED_PART: ${{ inputs.part }}
run: |
implementer=$(awk -F': *' '/^CPU implementer/ {print $2; exit}' /proc/cpuinfo)
part=$(awk -F': *' '/^CPU part/ {print $2; exit}' /proc/cpuinfo)
echo "CPU implementer=${implementer:-unknown} part=${part:-unknown}"
lscpu | grep -E "^(Model name|Vendor ID)" || true
if [[ "$implementer" != "$EXPECTED_IMPLEMENTER" || "$part" != "$EXPECTED_PART" ]]; then
echo "::error::Expected CPU implementer=$EXPECTED_IMPLEMENTER part=$EXPECTED_PART, got implementer=${implementer:-unknown} part=${part:-unknown}"
exit 1
fi
74 changes: 74 additions & 0 deletions .github/actions/fetch-bench-baseline/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright the Vortex contributors

name: "Fetch benchmark baseline"
description: >-
Write the develop baseline for a PR benchmark run, read from the benchmarks Postgres: assume the
read-only benchmarks role over OIDC and sign in as bench_ci_read with an RDS IAM token. If the
baseline cannot be read, it writes no baseline file and the report says the baseline could not be
read. The calling job needs `id-token: write`. Composite actions cannot read `vars`, so callers
pass the repository variables in.

inputs:
pr-records:
description: "The PR run's --ingest-jsonl output"
default: results.ingest.jsonl
output:
description: "Where to write the baseline records"
default: base.ingest.jsonl
role-arn:
description: "The read-only benchmarks role (vars.GH_BENCH_READ_ROLE_ARN)"
required: true
region:
description: "AWS region of the benchmarks RDS instance (vars.RDS_BENCH_REGION)"
required: true
endpoint:
description: "Hostname of the benchmarks RDS instance (vars.RDS_BENCH_INSTANCE_ENDPOINT)"
required: true
database:
description: "Name of the benchmarks database (vars.RDS_BENCH_DB_NAME)"
required: true

runs:
using: "composite"
steps:
# The credentials stay in step outputs so the job's existing AWS credentials, which later
# steps such as the S3 cleanup still use, are not replaced.
- name: Configure AWS credentials for the benchmarks database (OIDC)
id: aws
if: inputs.role-arn != ''
continue-on-error: true
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
role-to-assume: ${{ inputs.role-arn }}
aws-region: ${{ inputs.region }}
retry-max-attempts: 1
output-credentials: true
output-env-credentials: false
- name: Fetch baseline
shell: bash
env:
PR_RECORDS: ${{ inputs.pr-records }}
OUTPUT: ${{ inputs.output }}
AWS_OUTCOME: ${{ steps.aws.outcome }}
AWS_ACCESS_KEY_ID: ${{ steps.aws.outputs.aws-access-key-id }}
AWS_SECRET_ACCESS_KEY: ${{ steps.aws.outputs.aws-secret-access-key }}
AWS_SESSION_TOKEN: ${{ steps.aws.outputs.aws-session-token }}
AWS_REGION: ${{ inputs.region }}
RDS_BENCH_INSTANCE_ENDPOINT: ${{ inputs.endpoint }}
RDS_BENCH_DB_NAME: ${{ inputs.database }}
run: |
set -Eeu -o pipefail
if [[ "$AWS_OUTCOME" != "success" ]]; then
# No baseline file tells the report that the baseline could not be read.
echo "::warning::Could not assume the read-only benchmarks role; reporting without a baseline."
exit 0
fi
curl -fsSL https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem \
-o "${RUNNER_TEMP}/rds-global-bundle.pem"
DSN="postgresql://bench_ci_read@${RDS_BENCH_INSTANCE_ENDPOINT}:5432/${RDS_BENCH_DB_NAME}?sslmode=verify-full&sslrootcert=${RUNNER_TEMP}/rds-global-bundle.pem"
if ! uv run --no-project scripts/fetch-benchmark-baseline.py "$PR_RECORDS" "$OUTPUT" \
--postgres "$DSN" --region "$AWS_REGION"; then
echo "::warning::Could not read the baseline from the benchmarks database; reporting without a baseline."
rm -f "$OUTPUT"
fi
Loading