Releases: vortex-data/vortex
Release list
0.84.0
Changes
⚠️ Breaks
- refactor: preserve bound expression identity through scans (#9192) @joseph-isaacs
- FFI: get scalars from arrays (#8896) @myrrc
- refactor: support formatting of bound expressions (#9228) @joseph-isaacs
- Add a Normalized encoding for tensor columns (#9138) @connortsui20
- refactor: propagate bound expressions through layouts (#9126) @joseph-isaacs
- Replace DynVarBinBuilder with a generic VarBinBuilder (#9096) @robert3005
- Constrain List/ListView builder offset, size types to 32 and 64 bit types (#9053) @robert3005
- Replace LayoutStrategy buffered_bytes with a buffered bytes tracker (#8961) @robert3005
- Route StructArray through the array_slots accessors and drop unmasked_fields() (#9006) @joseph-isaacs
- Refactor layout child access to support optional slots (#9000) @joseph-isaacs
- FFI: remove arc/arc_dyn wrapper (#9002) @myrrc
- Rename scalar function strictness contract (#8930) @connortsui20
- Pin every
#[array_slots]field to an explicit slot index (#9004) @joseph-isaacs - Replace all usages of Registry with ArcSwapMap (#8919) @robert3005
- chore: Inline slot index aliases into generated slot constants (#9003) @joseph-isaacs
- refactor(array): own struct field vectors (#8957) @joseph-isaacs
✨ Features
- feat: implement take for canonical sparse Union arrays (#9246) @connortsui20
- Read hf:// URLs from DuckDB by mounting stores where the registry says (#9265) @robert3005
- take() on VarBin returns VarBinView (#9229) @myrrc
- Push hugging face storage resolution into vortex-cloud rather than vortex-python (#9199) @robert3005
DecimalMul/Div kernels (#9221) @mhk197- feat: add OpenDAL-backed GooseFS object store support (#9134) @XuQianJin-Stars
- Use RowIdxLayoutReader only when #row_idx is referenced (#9190) @myrrc
- Support Map type through JNI and Spark (#9209) @AdamGS
- Share fixed-width structural array operations (#8864) @connortsui20
- Add Map core edition (#9195) @AdamGS
- Add Arrow Map roundtrip support (#9111) @AdamGS
- Add Map compute and compression support (#9110) @AdamGS
- feat(datafusion): allow configuring
ExpressionConvertoronVortexFormatandVortexFormatFactory(#9185) @haohuaijin - Add canonical Map arrays and builder (#9108) @AdamGS
- Add Map logical type and scalar support (#9107) @AdamGS
- feat(expr): add bound expressions (#9125) @joseph-isaacs
- Exectuion and optimization tracing harness for testing (#7814) @AdamGS
- Revert "Derive optimized ScanPlanV2s from source plans" (#9124) @joseph-isaacs
- SLT tests for aggregations (#9086) @myrrc
- refactor(cloud): split cloud object store integration into a vortex-cloud crate (#8999) @robert3005
- Derive optimized ScanPlanV2s from source plans (#9005) @joseph-isaacs
- feat[file]: gate the writer on the session's enabled editions (#8946) @joseph-isaacs
- Add support for huggingface datasets to vortex-python (#8733) @robert3005
- feat: add a ci gpu compress benchmark (#8951) @joseph-isaacs
- Expose metadata reading and writing in vortex-jni (#8963) @robert3005
- Support variadic tail slots in #[array_slots] macro (#8950) @joseph-isaacs
- feat(vortex-python): Add OpenDAL-backed CosStore to the Python object-store API (#8845) @XuQianJin-Stars
- feat(arrow): export StringArray and BinaryArray directly (#8902) @ClSlaid
- feat[edition]: add enabled-editions selection to the session (#8945) @joseph-isaacs
🚀 Performance
- Skip materializing splitless chunk children during split collection (#9271) @AdamGS
- Improve take on Chunked(FSL) and FSL(Chunked) array alongside implementation of take using PiecewiseSequence (#8881) @robert3005
- Lazily untranspose DeltaArray validity take #2 (#9226) @robert3005
- Optimize ChunkedArray take routing (#9224) @gatesn
- Optimize split calculation in DF source (#9167) @AdamGS
- Vectorize checked multiplication by reporting evidence, not a comparison (#9210) @connortsui20
- Add scalar function performance baselines (#9136) @connortsui20
- duckdb: don't use tokio for local reads (#9175) @myrrc
- Shrink zstd buffer before returning (#9179) @halvorboe
- perf(vortex-geo): short-circuit predicates with bounding boxes (#9076) @HarukiMoriarty
- perf(onpair): adopt onpair 0.2 storage-backed dictionary and safety-only validation (#9117) @gargiulofrancesco
- perf(array): stop flattening appended list views in ListViewBuilder [builders-child-stack] (#9046) @claude[bot]
- block_on_stream_thread_safe: increase channel size to number of cores (#9116) @myrrc
- Use unchecked ListViewArray construction after validation (#9044) @robert3005
- optimize the array creation (slots) (#9013) @joseph-isaacs
- Unify numeric compute kernels with vortex-compute iteration functions (#8939) @robert3005
- Execute until arrays match fast path or canonical before exporting to Arrow (#8935) @mhk197
- Back EnabledEditions with a session Registry (#8956) @joseph-isaacs
- feat(expr): fold cast of a literal to a literal in Cast simplify (#8962) @HarukiMoriarty
- Enable metadata-only mask reduction for constant Boolean masks (#8934) @connortsui20
🐛 Bug Fixes
30 changes
- duckdb: don't panic on unsupported Value type (#9243) @myrrc
- duckdb: Restrict pushed aggregations (#9233) @myrrc
- Fix decimal scalar multiplication and division (#8888) @mhk197
- duckdb: convert aggregate results to duckdb requested output type (#9231) @myrrc
- Validate row-index selections (#8574) @gatesn
- duckdb: TIMESTAMPTZ keeps microsecond precision (#9241) @myrrc
- duckdb: don't return stats() for aggregate scans and scans with pushed projection expression (#9230) @myrrc
- Fix .take() overflow on VarBin with >4GB data (#9227) @myrrc
- Fill in missing functionality for maps in fuzzer (#9208) @AdamGS
- Remove the unimplemented
NotKernelextension point (#9214) @connortsui20 - fix(buffer): bound alignment exponents read from untrusted input (#9155) @lorenzhs
- Panic on DType::Null conversion to NonNullable (#9207) @myrrc
- Upgrade to fsst 0.6.0 and guard against out of bounds codes (#9149) @robert3005
- fix(spark): write null array elements as nulls instead of zeros (#9169) @jackylee-ch
- fix(spark): delete aborted output through the native filesystem layer (#9172) @jackylee-ch
- Use all cores for parquet->vortex conversion in duckdb-bench (#9165) @myrrc
- fix(zstd): validate frame content sizes (#9164) @lorenzhs
- fix
get_itemparent reduce rule (#9151) @mhk197 - Harden RLE decompression against untrusted indices and offsets (#8953) @joseph-isaacs
- Reenable float aggregation pushdown for duckdb except for min() (#9094) @myrrc
- fix: validate unsigned AVX2 take indices (#9036) @connortsui20
- mean(all null) = NULL (#9079) @myrrc
- fix: LazyScanStream prepare/execute is CPU-work not I/O (#9078) @robert3005
- Mark file-level min/max utf8/binary stats exactness correctly (#9088) @AdamGS
- duckdb: don't push down aggregation over floats (#9069) @myrrc
- make alp-rd dicts deterministic on equal frequency entries (#9032) @onursatici
- Fix escaped field names in calculate_physical_schema (#9049) @brancz
- fix: Fix datafusion benchmark, attaching table ref to table URL (#9014) @AdamGS
- fix(cuda): pass mutated CUDA device buffers as
mut(#9001) @0ax1 - fix(vortex-row): decimal sort keys are not memcmp-comparable across chunks (#8937) @HarukiMoriarty
📖 Documentation
6 changes
is_strictandis_fallibledocs improvement (#9122) @connortsui20- docs: make the 1 ms benchmark iteration budget an explicit maximum (#9176) @joseph-isaacs
- Adjust strict docs (#9033) @connortsui20
- docs: Remove empty developer guide pages (#9026) @myrrc
- Smaller docs website (#8942) @myrrc
- docs: clarify vortex-row is not production-ready (#8949) @joseph-isaacs
🧰 Maintenance
47 changes
- VarBinViewBuilder: support decoding Dict and Sparse arrays directly into the builder (#9236) @robert3005
- VarBinViewBuilder: support appending buffers directly into the builder storage (#9235) @robert3005
- Collapse the checked-arithmetic macros into one integer body (#9248) @connortsui20
- Improve agents related toolings/docs (#9264) @AdamGS
- test(spark): characterize VortexScanBuilder predicate pushdown splitting (#8857) @jackylee-ch
- VarBin: build views straight into a VarBinViewBuilder (#9127) @robert3005
- OnPair: decode straight into the builder's byte storage (#9100) @robert3005
- Zstd: append values in bulk and harden the frame metadata reads (#9099) @robert3005
- Remove stale strategy override in vortex-jni (#9102) @robert3005
- Dict: gather dictionary values straight into a VarBinBuilder (#9098) @robert3005
- FSST: decompress straight into the builder's byte storage (#9097) @robert3005
- chore(deps): bump opendal to 0.58.1 (#9163) @Xuanwo
- Fix DF benchmark pushdown options (#9184) @mprammer
- duckdb: more const for FFI (#9173) @myrrc
- docs(spark): update the published version coordinates (#9171) @jackylee-ch
- test(spark): characterize VortexCatalog path identifier resolution (#9161) @jackylee-ch
- test(spark): characterize VortexTable capabilities and builders (#9160) @jackylee-ch
- fix(spark): correct the @throws contract on VortexScanBuilder.build (#9162) @jackylee-ch
- chore: tidy up a few compile-time assertions (#9158) @connortsui20
- fix(spark): include the offending path when schema inference finds no Vortex files (#8858) @jackylee-ch
- Lock file maintenance (#9140) @renovate[bot]
- test(spark): characterize HadoopUtils S3 and Azure credential forwarding (#8850) @jackylee-ch
- test(spark): characterize VortexBatchExec input partition planning (#8859) @jackylee-ch
- Resolve semantic cargo lock conflict (#9145) @robert3005
- Use upstream ALP crate instead of our own implementation (#9103) @r...
0.83.0
What's Changed
- break: new layout tree vtable by @joseph-isaacs in #8910
- Introduce array_slots macro for type-safe array slot access by @joseph-isaacs in #8912
- fix(cuda): synchronize Arrow exports with buffer streams by @0ax1 in #8952
Full Changelog: 0.82.0...0.83.0
0.82.0
What's Changed
- Gate vortex benchmark under label by @myrrc in #8911
- New C++ API examples by @myrrc in #8755
- Increse duckdb retries when operating on parquet s3 by @robert3005 in #8903
- Bypass unknown aggregates in
ZonedLayoutby @connortsui20 in #8904 - BufferIterator can be Send + Sync by @robert3005 in #8873
- duckdb: forbid reading files with duplicate struct field names by @myrrc in #8917
DecimalAdd/Sub kernels by @mhk197 in #8724- duckdb: fix extract path with multiple versions by @myrrc in #8926
- Read the data child directly when the zone map is empty by @connortsui20 in #8905
- Fix Kleene boolean dictionary pushdown by @connortsui20 in #8929
- perf(cuda): skip patch-free bitpacked synchronization by @0ax1 in #8925
- feat(cuda): expose row block and scan batch size controls by @0ax1 in #8923
- Exclude Markdown from ruff format by @robert3005 in #8940
- Add
UnionArraycompute functions by @connortsui20 in #8884 - perf(array): hoist decimal same-scale cast plan by @ClSlaid in #8932
- perf(cuda): decode FSST strings with GPU-built Arrow offsets by @0ax1 in #8921
- duckdb: pushdown expressions with LIMIT by @myrrc in #8943
- feat[compressor]: require schemes to declare their produced encodings by @joseph-isaacs in #8944
- Expose LayoutStrategy::buffered_bytes through the jni boundary by @robert3005 in #8909
- vortex-jni includes vortex-geo, jni arrow import/export uses session methods by @robert3005 in #8914
- feat[cuda]: add direct I/O for local file scans by @onursatici in #8898
New Contributors
Full Changelog: 0.81.0...0.82.0
0.81.0
What's Changed
- Add file-level user metadata by @mprammer in #8740
- refactor[array]: serialization context filter by ids (not whole registry) by @joseph-isaacs in #8897
- StructReader::partition_expr doesn't hold lock if the expression is being newly partitioned by @robert3005 in #8892
- Add
UnionArrayby @connortsui20 in #8834 - Don't emit STB_UNIQUE symbols in GCC for vortex-duckdb by @myrrc in #8913
Full Changelog: 0.80.0...0.81.0
0.80.0
What's Changed
- Assortment of
VortexSourceimprovements and fixes by @AdamGS in #8718 - fix(spark): reject MapType instead of emitting a childless Arrow List by @jackylee-ch in #8811
- build(java): bump Spark 3 from 3.5.8 to 3.5.9 by @jackylee-ch in #8812
- build(java): bump Spark 4 from 4.1.1 to 4.1.2 by @jackylee-ch in #8813
- Skip building binaries in when there are no tests by @AdamGS in #8820
- LayoutEncodingAdapter::build doesn't need to panic, it can error by @robert3005 in #8824
- Fix nested scalar hashing by @connortsui20 in #8804
- Add documentation links to benchmark suite PR comments by @joseph-isaacs in #8815
- feat(vortex-onpair): update to the onpair 0.1 API by @gargiulofrancesco in #8675
- feat(vortex-array): union_child_validities expr helper by @HarukiMoriarty in #8829
- Add PiecewiseSequence index array by @danking in #8799
- Avoid redundant allocations in struct layout reader by @joseph-isaacs in #8851
- Validate PostscriptFragment offsets when parsing the footer by @robert3005 in #8818
- docs: introduce Vortex editions for users of the file format by @joseph-isaacs in #8855
- Use PiecewiseSequence indices for FSL take by @danking in #8800
- feat(vortex-geo): null-propagating scalar functions by @HarukiMoriarty in #8803
- feat: exploit PiecewiseSequence for faster take by @danking in #8802
- Fix remaining flaky CodSpeed microbenchmarks by @connortsui20 in #8861
- Remove unused ArrayRef::is_arrow by @connortsui20 in #8868
- Specialize VarBin PiecewiseSequence takes by @danking in #8836
- Validate untrusted footer metadata on open instead of panicking by @connortsui20 in #8867
- feat(onpair): promote OnPair to a stable read-only encoding by @gargiulofrancesco in #8872
- break[array]: Remove unimplemented child() method from VTable implementations by @joseph-isaacs in #8870
- Fix CUDA ListView dictionary export regression test by @onursatici in #8876
- Route CUDA pruning io through host memory by @onursatici in #8862
- Remove mutable state from Vortex open options by @onursatici in #8879
- bool array slice to support device buffers by @onursatici in #8875
- Use cursor copies for PiecewiseSequence slices by @danking in #8832
- feat[edition]: session-registered editions defitions by @joseph-isaacs in #8871
- Lazily untranspose DeltaArray validity and depend on fastlanes bit transpose code by @robert3005 in #8725
- Update dependency pyarrow to v23 [SECURITY] by @renovate[bot] in #8795
- Expose FFI runtime worker pool control by @onursatici in #8789
- Add
UnionValueandUnionScalarby @connortsui20 in #8838 - Use PiecewiseSequence for List take elements by @danking in #8833
- Add PiecewiseSequence take microbenchmarks by @danking in #8830
- CONTRIBUTING.md: Update committers and maintainers by @brancz in #8880
- Prevent non empty unions and clarify null docs by @connortsui20 in #8882
- Revert "Lazily untranspose DeltaArray validity and depend on fastlanes bit transpose code" by @joseph-isaacs in #8883
- Masking
List-typed array preserves zctl by @mhk197 in #8889 - Add take benchmarks for FSL(Chunked) and Chunked(FSL) arrays by @robert3005 in #8887
- feat(vortex-geo): per-row bounding-box scalar function (vortex.geo.envelope) by @HarukiMoriarty in #8831
- non_nan_check doesn't try to cast arbitrary scalars to primitive by @robert3005 in #8891
- feat[layout]: extract a
LayoutStrategyEncodingValidatorfrom theFlatLayoutStrategyby @joseph-isaacs in #8885 - duckdb 1.5.5 by @myrrc in #8895
New Contributors
- @gargiulofrancesco made their first contribution in #8675
Full Changelog: 0.79.0...0.80.0
0.79.0
What's Changed
- Remove arrow usage from VarBin::compare, VarBinView::filter and BoolArray::from_iter by @robert3005 in #8695
- Add
list_sumexpression by @mhk197 in #8676 - cuda: build.rs add trigger by @mag1c1an1 in #8708
- vortex-file: Spawn tasks via runtime instead of directly via tokio by @brancz in #8711
- Add
UnionVariantstype and embed it inDType::Unionby @connortsui20 in #8703 - Add golden-corpus determinism tests for the default compressor by @connortsui20 in #8697
- Ignore quick-xml rustsec since we cannot update it ourselves by @robert3005 in #8712
- Ignore one more quick-xml rustsec advisory by @robert3005 in #8716
- Remove stored
UnionNullabilityby @connortsui20 in #8714 - Optimize dependencies using cargo-shear by @AdamGS in #8715
- Implement LIKE in vortex instead of falling back to arrow by @robert3005 in #8709
- Update actions/setup-java digest to 0f481fc by @renovate[bot] in #8729
- Update actions/setup-python digest to ece7cb0 by @renovate[bot] in #8730
- Update actions/stale digest to 1e223db by @renovate[bot] in #8731
- Benchmarks for fixed-width array filtering by @robert3005 in #8727
- Add docs on how to use Spark vortex datasource by @robert3005 in #8728
- Fix integer overflow in BitBufferMut::truncate and append_n by @ksj1230 in #8474
- Reduce Java and vortex-jni build sizes by @AdamGS in #8734
- Update dependency ray to v2.56.0 [SECURITY] by @renovate[bot] in #8732
- fix(layout/dict): probe with the configured compressor instead of a hardcoded default by @tomsanbear in #8406
- remove old c++ api by @myrrc in #8736
- Split arrow dependency from vortex-array by @robert3005 in #8717
- New C++ api docs by @myrrc in #8737
- vx_expression_clone, remove vx_file_write_array by @myrrc in #8735
- ST_Intersects pushdown: vortex.geo.intersects kernel, DuckDB lowering, spatial function overrides by @HarukiMoriarty in #8704
- Reject negative Union type IDs by @connortsui20 in #8738
- feat(vortex-geo): add native geoarrow.box bounding-box type by @HarukiMoriarty in #8746
- Fix flaky CodSpeed microbenchmarks by @connortsui20 in #8742
- Reorganize the compressor by @connortsui20 in #8745
- Update dependency setuptools to v83 [SECURITY] by @renovate[bot] in #8752
- New C++ API by @myrrc in #8741
- fix(onpair): pin OnPair dictionary-training seed for determinism by @claude[bot] in #8756
- Better error message for unsupported Arrow vector type in Spark reader by @jackylee-ch in #8759
- duckdb 1.5.4 by @myrrc in #8761
- forbid todo!/unimplemented! in vortex-duckdb by @myrrc in #8762
- fix(spark): warn that overwrite destructively deletes existing files by @jackylee-ch in #8767
- test(spark): characterize ArrowUtils Arrow-to-Spark type mapping by @jackylee-ch in #8770
- Support reporting statistics and currently written byte size from writers in jni by @robert3005 in #8726
- feat(vortex-geo): geometry
Bboxzone-map statistic + distance-filter pruning by @HarukiMoriarty in #8646 - VortexArrowColumnVector supports conversion from all arrow types that Spark can support by @robert3005 in #8771
- feat(vortex-geo): prune ST_Intersects filters via the AABB zone statistics by @HarukiMoriarty in #8775
- fix(cuda): preserve dictionary value nulls by @0ax1 in #8774
- ci: cut wasted minutes from measurement_id and WASM jobs by @a10y in #8776
- ListArray::reset_offsets doesn't need to revalidate array after reset by @robert3005 in #8781
- New C++ API tests by @myrrc in #8751
- test(spark): characterize PartitionPathUtils partition discovery and materialization by @jackylee-ch in #8783
- Own SQL benchmark suite by @myrrc in #8719
- test(spark): characterize SparkToArrowSchema Spark-to-Arrow conversion by @jackylee-ch in #8782
- Expose CUDA-compatible file sink through FFI by @onursatici in #8784
- Expose pooled CUDA file scans through FFI by @onursatici in #8788
- feat(jni): bridge caller-provided Java I/O into VortexReadAt/VortexWrite by @robert3005 in #8748
- feat(cuda): export FSST directly to Arrow varbin by @0ax1 in #8787
- feat[buffer]: specialized
collect_boolper arch by @joseph-isaacs in #8749 - feat: arch intrinsic feature discovery pattern by @joseph-isaacs in #8750
- Use u8 Union type IDs by @connortsui20 in #8790
- Add outer nullability to Union by @connortsui20 in #8798
ListLayoutbaseline by @mhk197 in #8706- Remove the old v2 benchmarks website by @connortsui20 in #8805
- apply alp patches in parallel in cuda by @onursatici in #8793
New Contributors
- @mag1c1an1 made their first contribution in #8708
- @ksj1230 made their first contribution in #8474
- @claude[bot] made their first contribution in #8756
- @jackylee-ch made their first contribution in #8759
Full Changelog: 0.78.0...0.79.0
0.78.0
0.77.0
Changes
NOTE: 0.76.0 was yanked, because of a (hopefully very rare) latent correctness bug, that became much easier to hit in 0.76.0. There was a long-standing incorrect behavior in the TableStrategy writer, wherein it would not correctly propagate panics from the parallel writer subtasks. The fix was in #8672.
If you passed a stream of well-formed valid arrays straight to the builtin vortex writers, you are definitely unaffected.
If any of the following are true, you may have files that were silently truncated, in part (all versions) or in whole (0.76.0):
- you had a stream of well-formed arrays, AND called
mapon thatArrayStreamwith a function that panicked on invocation, then passed the resulting stream to a builtin vortex writer - you passed a stream of malformed arrays that could have triggered a panic or assertion failure (e.g., you constructed invalid vortex arrays using unsafe/new_unchecked; to our knowledge you can't hit this path with the safe/regular constructors)
If you believe you may have been affected by this issue, please reach out in slack: https://vortex.dev/slack
⚠️ Breaks
- FFI: replace vx_string/vx_binary with vx_view (#8668) @myrrc
- Replace ToCanonical trait usages with execute (#8609) @robert3005
- Remove borrowed types from FFI; fixed_size_list constructor accepts u32 (#8658) @myrrc
- Remove variants module (#8643) @robert3005
- Disallow the legacy global session and allowlist existing call sites (#8637) @robert3005
✨ Features
- feat(geo): add native
LineString,MultiPoint,MultiLineStringtypes (#8679) @HarukiMoriarty - Cast pushdown for duckdb (#8620) @myrrc
- mean() for decimals (#8649) @myrrc
- FFI: canonicalize array, data pointer for primitives (#8665) @myrrc
- VortexSession register is public and allow_unknown takes reference (#8647) @robert3005
- feat: support
ST_DWithinpushdown in vortex (#8625) @HarukiMoriarty - feat(vortex-bench): support vortex native geo types into SpatialBench, and wire into benchmark orchestrator (#8623) @HarukiMoriarty
- feat(vortex-geo): add MultiPolygon extension type + WKB export for native geometry (#8608) @HarukiMoriarty
- feat(vortex-bench): wire SpatialBench into the bench orchestrator (#8607) @HarukiMoriarty
🚀 Performance
- Optimize bit iteration and validity checking with SIMD popcount (#8636) @robert3005
- perf: branchless mask-select for listview zip (#8264) @joseph-isaacs
🐛 Bug Fixes
- fix: TableStrategy currently hides panic in spawned column writer tasks. (#8672) @AdamGS
- Grow list builders as we append elements to it (#8673) @robert3005
- Fix vortex-jni local path handling, centralise logic in vortex-file (#8650) @robert3005
🧰 Maintenance
13 changes
- Consolidate benchmark SQL queries into
vortex-bench/sqldirectory (#8684) @connortsui20 - Direct issues to templates instead of GitHub Discussions (#8685) @connortsui20
- Better error message in case of unknown encoding id (#8681) @robert3005
- Hardcode constant detection into the cascading compressor (#8667) @connortsui20
- Add policy-bot configuration file (#8659) @robert3005
- Lock file maintenance (#8654) @renovate[bot]
- Add bit iteration benchmarks (#8656) @robert3005
- Lock file maintenance (#8655) @renovate[bot]
- Update Rust crate cxx to v1.0.195 [SECURITY] (#8653) @renovate[bot]
- bench: warm ArrayKernels before the bench loop (#8479) @joseph-isaacs
- Remove execute_boolean fallback to arrow (#8644) @robert3005
- Decouple optional features from pulling
vortex-filefeatures for top crate (#8642) @AdamGS - feat: add CUDA cuDF convenience API (#8624) @0ax1
0.76.0
Changes
⚠️ Breaks
- Remove ArrayAccessor (#8603) @robert3005
- Fix bounded max partial state (#8515) @gatesn
- Use aggregate descriptors for zoned stats (#7938) @gatesn
- Remove duckdbfs (#8468) @myrrc
- Move execute-parent kernels into session registry (#8482) @gatesn
- break: add
Validity::definitely_all_null()method (#8447) @joseph-isaacs - Make
Maskexecution strict about nullable booleans (#8121) @joseph-isaacs - Support reporting statistics in spark datasource (#8057) @robert3005
✨ Features
- Add swimlane view to vortex-web that visualizes physical layout of columns in files (#8634) @robert3005
- feat(vortex-bench): infra of SpatialBench on DuckDB, plain binary (#8598) @HarukiMoriarty
- Expose array buffer replacement (#8606) @gatesn
- bool -> Primitive casts (#8621) @myrrc
- feat: add metadata bridge for Python CUDA export (#8604) @0ax1
- Add
list_lengthscalar function (#8495) @mhk197 - feat(file): make Footer::new public (#8602) @tobias-fire
- feat(array): push struct validity into children (#8589) @miniex
- Support session-time source configuration in DataFusion, and clear up precedence between config sources (#8575) @AdamGS
- feat(python): package CUDA as an optional extension (#8510) @0ax1
- Decimal casting (#8562) @gatesn
- Add JSON to Parquet Variant conversion with shredding (#8391) @AdamGS
- Add extension storage scalar function (#8540) @gatesn
- Numerical aggregate functions have an option to skip or include nans in calculation, skip by default (#8457) @robert3005
- feat(vortex-geo): ST_Distance via the
geocrate +Polygontype (#8497) @HarukiMoriarty - feat[gpu]: arrow device array stream support (#8483) @0ax1
- feat(vortex-datafusion): struct scalar conversion + extension-over-struct scan (#8453) @HarukiMoriarty
- feat: DeltaScheme adjustable compression ratio threshold (#8461) @joseph-isaacs
- Add Delta scheme to the integer compressor (unstable_encodings) (#8212) @joseph-isaacs
- Push down some expressions to Dict layout reader's cached values (#8341) @myrrc
- --patterns flag for random-access-bench (#8446) @myrrc
- ffi: create data source from memory buffer (#8426) @myrrc
- Constant comparison and byte_length OnPair kernels (#8371) @myrrc
- REGEX support for sqllogictests (#8392) @myrrc
- feat(vortex-geo): Arrow import/export for the native Point type (#8374) @HarukiMoriarty
🚀 Performance
- perf(datafusion): push down
list_lengthexpression (#8600) @mhk197 - perf: cache static identifiers to avoid per-call interner locks (#8614) @miniex
- perf(duckdb): push down list length expressions (#8544) @mhk197
- Spawn arrow conversion in jni bindings (#8595) @robert3005
- Compute zone layout stats concurrently when writing (#8594) @robert3005
- Chunked dict values pullup (#8577) @gatesn
- Tune varbinview compaction for Arrow export (#8585) @gatesn
- Report DuckDB max cardinality for exact scans (#8582) @gatesn
- perf(scan): intra-file decode parallelism — sub-split large chunk spans (#8400) @lukekim
- perf(alp): avoid per-combination allocations when searching exponents (#8565) @miniex
- Optimize interleave boolean gather (#8350) @joseph-isaacs
- RLEExporter for duckdb (#8539) @myrrc
- ReusableDict for RunEnd duckdb exporter (#8538) @myrrc
- perf: align buffer to
Alignment::DEFAULT_ALIGNMENT = Alignment::new(256)(#8490) @joseph-isaacs - DuckDB chunk exporter (#8520) @gatesn
- Faster take for runend array (#8228) @robert3005
- Inline Kleene boolean kernels (#8478) @gatesn
- Scalar functions pushdown to Duckdb (#8303) @myrrc
- perf: don't use fill_null for executing an array into a mask (#8466) @joseph-isaacs
- Optimize buffer ops (#8322) @AdamGS
- perf[gpu]: export arrow device validity on the gpu (#8440) @0ax1
- perf[buffer]: iteration for fallible operations with validity (#8120) @joseph-isaacs
- Faster str interning (#8459) @AdamGS
- perf[gpu]: generate FixedSizeList offsets on device (#8458) @0ax1
- Arithmetic Operations (#8398) @gatesn
- perf(buffer): read byte-aligned bit operands directly as words (#8436) @miniex
- perf: non-blocking Arrow Device array release (#8390) @0ax1
🐛 Bug Fixes
21 changes
- Convert extension type scalars to Value correctly (#8635) @myrrc
- fix(vortex-bench): map gs:// scheme to gcs storage label (#8630) @brancz
- fix: CUDA bitpacked sliced output allocation (#8622) @0ax1
- Fix wasm32 build by gating MultiFileSession on non-wasm targets (#8612) @robert3005
- fix: support 64K alignment (#8599) @a10y
- Guard calling is_nan on scalar value on dtype being a float (#8593) @robert3005
- vortex-datafusion: Pipe session through to converter (#8591) @brancz
- Save children dtypes/length in ZstdBuffersMetadata (#8572) @myrrc
- fix(array): don't panic on unsupported arrow types (#8564) @miniex
- fix(layout): don't panic collecting an empty stream (#8472) @miniex
- Correctly calculate FSST compressed output size (#8551) @robert3005
- refactor[fsst]: take ArrayRef in fsst_compress, decide offset width upfront (#7900) @mprammer
- Move optimizer kernels into a dedicated KernelSession (#8511) @gatesn
- Fix is_zero() for FixedSizeList and Struct scalar types (#8500) @connortsui20
- Handle null lanes in primitive take (#8505) @gatesn
- Preserve dict referenced values metadata (#8499) @gatesn
- fix: preserve operand width in DecimalValue checked arithmetic (#7380) @abnobdoss
- fix Fuzz constant OOM for CUDA (#8481) @a10y
- vortex-tui: query tab should work for non-*.vortex files (#8473) @a10y
- Ignore PyO3 rustsec (#8381) @connortsui20
- fix:
vx_data_source_new_buffersem-merge conflict (#8437) @joseph-isaacs
📖 Documentation
- Expanding conceptual docs (and some other minor docs) (#8552) @AdamGS
- docs: update doc links (#8375) @joseph-isaacs
🧰 Maintenance
49 changes
- Back VortexSession with ArcSwap for mutable but less errorprone session management (#8631) @robert3005
- chore: forbid the locking Id constructors with a clippy lint (#8617) @miniex
- Patches have correct dtype by construction instead of normalised during array construction (#8626) @robert3005
- chore: Python CUDA bridge: CI and buffer handoff ABI (#8618) @0ax1
- Lock file maintenance (#8616) @renovate[bot]
- Polish treemap view in vortex explorer (#8613) @robert3005
- Migrate WASM Arrow conversion to use VortexSession (#8619) @robert3005
- Lock file maintenance (#8615) @renovate[bot]
- Improve SLT test harness (#8567) @AdamGS
- Add benchmarks for decimal casting (#8569) @robert3005
- Use AllNonDistinct in assert_arrays_eq and implement it for variant types (#8546) @robert3005
- Refactor DictEncoder to not use ArrayAccessors (#7759) @robert3005
- Clear 3 orphan json files from root of repo (#8558) @AdamGS
- Remove LEGACY_SESSION from benchmarks and back compat tests (#8554) @robert3005
- Bump codspeed to 5.0 (#8553) @robert3005
- Remove usages of LEGACY_SESSION from tests (#8547) @robert3005
- assert_arrays_eq and assert_nth_scalar require ExecutionCtx (#8509) @robert3005
- Update Rust crate memmap2 to v0.9.11 [SECURITY] (#8545) @renovate[bot]
- Update lance benchmark dependencies (major) (#8525) @renovate[bot]
- Update actions/setup-java digest to ad2b381 (#8521) @renovate[bot]
- Update anthropics/claude-code-action digest to 2fee155 (#8522) @renovate[bot]
- Update taiki-e/install-action digest to 9e1e580 (#8523) @renovate[bot]
- Update actions/checkout action to v7 (#8524) @renovate[bot]
- Lock file maintenance JS lock file maintenance (#8536) @renovate[bot]
- Lock file maintenance Rust lock file maintenance (#8537) @renovate[bot]
- Make sure both pushdown features are always enabled for DF benchmarks (#8507) @AdamGS
- Misc upgrades to
VortexSource(#8501) @AdamGS - Generalize SIMD
takeoperations toCopy(#8496) @connortsui20 - Migrate to new stats falsification rules (#8345) @gatesn
- codegen only used functions in duckdb C API (#8491) @myrrc
- Change
ALIGNMENT_TO_HOST_COPYtoAlignment::HOST_COPY(#8488) @AdamGS - Touch up some of the interfaces and docs in vortex-datafusion (#8485) @AdamGS
- Add benchmarks for take on runend array (#8469) @robert3005
- Include vortex-compute in codspeed benchmarks (#8477) @robert3005
- Add Kleene boolean benchmarks (#8476) @gatesn
- Immutable session backed by
HashMap(#8454) @AdamGS - test[gpu]: expand cuDF CUDA e2e coverage (#8463) @0ax1
- Upgrade pyO3 to 0.29.0 (#8462) @robert3005
- Update dependency starlette to v1.3.1 [SECURITY] (#8435) @renovate[bot]
- fmt: normalize_comments = true (#8428) @joseph-isaacs
- Update taiki-e/install-action digest to 7a79fe8 (#8409) @renovate[bot]
- Update gradle/actions digest to 3f131e8 (#8408) @renovate[bot]
- Update anthropics/claude-code-action digest to d5726de (#8407) @renovate[bot]
- Update dependency duckdb to v1.4.2 [SECURITY] (#8431) @renovate[bot]
- Update dependency pip to v26.1.2 [SECURITY] (#8432) @renovate[bot]
- Align data buffers in fastlanes benchmarks (#8393) @AdamGS
- Update plugin com.palantir.java-format to v2.93.0 (#8416) @renovate[bot]
- More arithmetic benchmarks (#8402) @gatesn
- Add binary operator benchmarks (#8396) @gatesn
0.75.0
Changes
⚠️ Breaks
- aggregate fns to have grouped aggregate kernels for sum and count (#8314) @onursatici
- Remove
lenparameter fromScalarFnArray::try_new(#8378) @connortsui20 - Remove all TurboQuant stuff (#8377) @connortsui20
- Fix Validity::mask_eq semantics for mixed variants (#8334) @joseph-isaacs
- Rename Validity::no_nulls to definitely_no_nulls and add execute_no_nulls (#8333) @joseph-isaacs
- Pass execution context through list view rebuild (#8274) @connortsui20
- Initialize LazyBitBufferBuilder from Mask if available, when appending masks pass them by reference (#8221) @robert3005
- layout reader ctx (#8037) @onursatici
🚧 Deprecation
- Refactor validity checks to require explicit ExecutionCtx (#8273) @joseph-isaacs
- Deprecate vortex-array public APIs that use the hidden LEGACY_SESSION (#8269) @joseph-isaacs
✨ Features
- feat(vortex-geo): native Point extension type and GeoDistance scalar function (#8372) @HarukiMoriarty
- Add arrow import/export for vortex-json (#8339) @AdamGS
- WKB import/export VTables to Arrow (#8325) @a10y
- feat[gpu]: export as Arrow device array binary (#8320) @0ax1
- feat[gpu]: sliced validity in Arrow device export (#8318) @0ax1
- add vortex-geo crate and WKB extension type (#7722) @a10y
- Expose Merge expression in vortex-jni (#8319) @robert3005
- feat(vortex-array): add Interleave array encoding (#8277) @joseph-isaacs
- feat: add cuDF C FFI (#8236) @0ax1
- feat: export dictionary arrow device arrays (#8251) @0ax1
- Add zstd compression schemes for binary data (#8304) @AdamGS
- Upgrade DataFusion to 54 (#8044) @AdamGS
- byte_length() expression (#8298) @myrrc
- feat(vortex-row): row-oriented byte encoder (size + encode passes) (#8253) @joseph-isaacs
- Support pack expressions through JNI (#8266) @AdamGS
- feat: very wide column benchmark (#8252) @joseph-isaacs
- Support ParquetVariant through JNI (#8129) @AdamGS
- Introduce a new JSON extension type in
vortex-json(#8215) @AdamGS - feat[gpu]: arrow device array decimal export (#8155) @0ax1
- feat[gpu]: arrow device array list view export (#8219) @0ax1
- Add RoaringBitmap support to vortex-jni bindings (#8220) @robert3005
- Implement ZipKernel for ListViewArray (#8218) @robert3005
- move towards
BitBuffer/{Mut}Viewover owned bit buffers (#8208) @joseph-isaacs
🚀 Performance
- perf: branchless primitive zip kernel (#8270) @joseph-isaacs
- perf[gpu]: coalesce streaming kernels (#8357) @0ax1
- perf[mask]: check AllTrue/AllFalse in eq (#8354) @joseph-isaacs
- BitBuffer binary operations support in place updates to lhs (#8162) @robert3005
- Optimize slice for dict and minor changes in other arrays (#8321) @AdamGS
- perf: remove unneeded scalar_at and valid_at and use arrays instead (#8307) @joseph-isaacs
- Allow caching LayoutReader in VortexFile (#8244) @myrrc
- perf: branchless boolean zip kernel (#8275) @joseph-isaacs
- Initial impl for sort pushdown in DataFusion FileSource implementation (#8235) @AdamGS
- Optimize dict array validation to use true_count() (#8263) @joseph-isaacs
- Add #[inline] hints to hot path functions (#8260) @joseph-isaacs
- perf(fastlanes): fuse bit-packed compare into a transposed mask + untranspose (#8239) @joseph-isaacs
- case_when with is_null -> fill_null (#8245) @onursatici
- perf: optimize varbinview construction (#8146) @joseph-isaacs
- ViewedLayoutChildren child layout cache (#8234) @myrrc
- Don't recalculate chunk offsets for ChunkedReader (#8231) @myrrc
- Share FSST symbol table state between executed variants of arrays. (#8222) @AdamGS
🐛 Bug Fixes
13 changes
- fix: keep Arrow device schemas aligned with exports (#8360) @0ax1
- aggregate_fn: Return NaN instead of null for mean of all-null input (#8365) @dimitarvdimitrov
- fix[file]: read the one-row pruning result in can_prune instead of re… (#8369) @tomsanbear
- Fix generation of stat pruning expression for unsupported dtypes (#8326) @robert3005
- fix[gpu]: decode extension arrays on the GPU (#8353) @0ax1
- fix issue with FileSystem path handling (#8248) @robert3005
- Wrap object stores in python with Compat layer (#8316) @robert3005
- Fix semantic conflict in vortex-array (#8312) @AdamGS
- fix:
[profile.bench]codegen-units = 16(#8257) @joseph-isaacs - fix grouped sum index for listview array (#8255) @onursatici
- split registration to respect nested projection and filters (#8213) @onursatici
- Fix zoned min/max over fixed-size-list stats (#8243) @gatesn
- fix session deadlock (#8217) @onursatici
📖 Documentation
🧰 Maintenance
40 changes
- chore: clean up Arrow device export (#8359) @0ax1
- chore: polish cuDF C FFI (#8358) @0ax1
- Remove the unused website and clean other dependencies (#8362) @AdamGS
- Minor touchups for vortex-datafusion (#8356) @AdamGS
- Add docs for StatsRewriteRule (#8355) @AdamGS
- Disable wide-columns benchmark to stop benchmarks from timing out (#8331) @AdamGS
- Optimize
fsst_compress_offsets_overflow_i32by 2X locally (#8324) @AdamGS - Add slicing benchmarks for vortex-buffer (#8323) @AdamGS
- test[gpu]: more e2e tests (#8317) @0ax1
- Publish Parquet-Variant encoding (#8313) @AdamGS
- Fix javadoc warnings and run lints in ci (#8309) @robert3005
- Update all patch updates (#8286) @renovate[bot]
- Update Rust crate tabled to 0.21.0 (#8184) @renovate[bot]
- Update logback monorepo to v1.5.34 (#8287) @renovate[bot]
- Update taiki-e/install-action digest to 0631aa6 (#8285) @renovate[bot]
- Update actions/checkout digest to df4cb1c (#8281) @renovate[bot]
- Update anthropics/claude-code-action digest to fbda2eb (#8282) @renovate[bot]
- Lock file maintenance Rust lock file maintenance (#8296) @renovate[bot]
- Update aws-actions/configure-aws-credentials digest to e7f100c (#8283) @renovate[bot]
- Update netty monorepo to v4.2.15.Final (#8288) @renovate[bot]
- Update storybook monorepo to v10.4.2 (#8290) @renovate[bot]
- Update react monorepo (#8289) @renovate[bot]
- Update tokio-prost monorepo to v0.14.4 (#8291) @renovate[bot]
- Update typescript-eslint monorepo to v8.60.1 (#8292) @renovate[bot]
- Update tanstack-virtual monorepo to v3.14.2 (#8293) @renovate[bot]
- Lock file maintenance JS lock file maintenance (#8295) @renovate[bot]
- Update codecov/codecov-action action to v7 (#8294) @renovate[bot]
- Update codecov/codecov-action digest to fb8b358 (#8284) @renovate[bot]
- Ignore RUSTSEC-2026-0173 (#8300) @AdamGS
- Rename ArrayEq/Hash Precision to
EqMode(#8214) @AdamGS - use octet_length() instead of len() in clickbench (#8267) @myrrc
- Mask bool iterator (#8258) @onursatici
- Update dependency starlette to v1 [SECURITY] (#8254) @renovate[bot]
- bench: sweep bit-packed compare across all int types and bit widths (#8238) @joseph-isaacs
- Make
from_arrownot panic (#8242) @connortsui20 - clean: drop unused API lock-file (#8241) @0ax1
- CachedIds for functions (#8240) @myrrc
- vortex-io: Add explicit span on spawn_io (#8232) @brancz
- Add
select_unpredictablehint to search_sorted (#8225) @AdamGS - Add ArcSwapMap and use it throughout our session registries (#8072) @robert3005