These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 6369d14 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
inital work Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | e13903e | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 562588d | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | de22eed | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
inital work Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 9348fd9 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 7101440 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 9700197 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 85ed8e4 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Add `UnionValue` and `UnionScalar` (#8838) _Revived from https://github.com/vortex-data/vortex/pull/8791 since too many things have changed._ ## Summary Tracking issue: https://github.com/vortex-data/vortex/issues/8769 Adds scalar implementation for `Union` type in Vortex. ## Changes Adds `UnionValue` which exists inside of `ScalarValue` and the typed view `UnionScalar<'a>`. ```rust pub struct UnionValue { /// The type ID selecting a variant in the enclosing [`DType::Union`]. type_id: u8, /// The selected variant scalar. /// /// This is boxed to break the recursive layout between [`ScalarValue`] /// and [`UnionValue`]. value: `Option<Box<ScalarValue>>`, } ``` ### Inner Nulls with Type IDs The type above implies that type IDs MATTER for equality of nulls. 2 values with the same union type might both be null, **but if the type IDs are different, we consider them NOT equal.** Please respond below if you think this is the incorrect behavior. I think that this might be different from arrow's semantics, but because we are already distinguishing from them with the outer nullability, I think this is fine. ### Value type ~~I was debating if we should instead store a `Option<Box<ScalarValue>>` instead of just `Box<Scalar>` (which carries an extra dtype and an extra allocation even if the value is null). I think it is nice to have the dtype in there for implementation ease. Not sure if it's worth it.~~ We use `Option<Box<ScalarValue>>` instead of `Box<Scalar>` so that we do not store `DType` in multiple places. If we did so, we run into synchronization issues with casting. ### Casting For casting, this only allows identity and null casting (like everything else), otherwise it just panics with unimplemented. We probably want to figure this out later as it is quite valuable to cast union types. ## Default and Zero value semantics Finally, the "default value" and "zero value" semantics here are as such: - `default_value(nullable Union)` -> returns an outer null. - `default_value(non-nullable Union)` -> **panics** because there is no designated default variant. - `zero_value(Union)` -> **panics** because a Union has no canonical zero variant. - `is_zero()` on a null Union -> returns `None`. - `is_zero()` on a valid Union -> returns `Some(false)`, even when its child is numerically zero. Note that none of these behaviors depend on variant ordering. And also I do think that it is possible that we just choose the first variant of a union to be the default, I think this is kind of opinionated, and it also doesn't solve the issue where there are 0 variants (empty union / void type). So I would prefer if we do this in a separate change. --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com> Co-authored-by: Joe Isaacs <joe.isaacs@live.co.uk>
The documentation is generated from this commit.
| Commit: | 41928c7 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add fixed-size binary canonical type Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 5e0113d | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add Union scalar support Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
The documentation is generated from this commit.
| Commit: | 047e4fc | |
|---|---|---|
| Author: | Adam Gutglick | |
inital work Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | d5458d2 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add Union scalar support Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 407720c | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Add outer nullability to Union (#8798) Tracking issue: https://github.com/vortex-data/vortex/issues/8769 Adds the breaking Union dtype foundation before scalar and array support. ### Changes - changes `DType::Union` to carry independent outer nullability - keeps outer nullability separate from the nullability of each variant - removes runtime-derived Union nullability - updates dtype coercion, serialization, display, and downstream matches This changes the serialized Serde representation of Union dtypes and will require the compatibility override to be reviewed explicitly. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 17f843a | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Use u8 Union type IDs (#8790) Tracking issue: https://github.com/vortex-data/vortex/issues/8769 and https://github.com/vortex-data/vortex/issues/7882 Splits the type-ID foundation for #8769 into its own change. - changes Union variant type IDs from `i8` to `u8` across the dtype APIs, protobuf, FlatBuffers, and generated bindings - supports the full `u8` tag range - supports up to 256 Union variants with consecutive tags `0..=255` Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | bd74508 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add Union scalar support Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 8ee294c | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add Union scalar support Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 4893177 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add Union scalar support Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 357a4ba | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Remove stored `Union` `Nullability` (#8714) ## Summary Tracking issue: #7882 A union has no independent parent validity. A row is null when its selected child is null, so the union's logical nullability is determined by its variants. Storing the same information on `DType::Union` created two sources of truth and allowed the outer value to disagree with the variants. This change makes inconsistent union DTypes impossible. The remaining question is how an operation such as `mask` should change a union's variants when it introduces nulls. That remains deferred and does not block the canonical sparse `UnionArray`. The Arrow implementation notes and deferred operation scope are in [this comment on #7882](https://github.com/vortex-data/vortex/issues/7882#issuecomment-4935971614). ## Changes - change `DType::Union` to store only `UnionVariants` - derive union nullability at runtime from the variant DTypes - name the non-zero-cost scan `derived_nullability` - leave `with_nullability` unchanged for unions instead of rewriting variant schemas - restrict union least-supertype coercion to identical variants for now - remove Union nullability from Serde, protobuf, and FlatBuffers Supersedes #8713. --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | a530b3b | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Add `UnionVariants` type and embed it in `DType::Union` (#8703) ## Rationale for this change Tracking Issue: https://github.com/vortex-data/vortex/issues/7882 We want to make `DType::Union` usable. This PR has been resurrected from https://github.com/vortex-data/vortex/pull/7902. ## What changes are included in this PR? Replaces `DType::Union(Nullability)` with `DType::Union(UnionVariants, Nullability)`. `UnionVariants` carries a `FieldNames` list, per-variant `FieldDType`s, and an `i8` type-id vector (supporting non-consecutive tags like `[0, 5, 7]` so children can be removed without renumbering). The flatbuffer and protobuf `Union` schemas are extended with the `names`/`dtypes`/`type_ids` fields, and serde, flatbuffers, and protobuf paths are filled in with round-trip tests and nullability-constraint checks. The flatbuffer `Union` table uses explicit field ids so that `nullable` keeps the id it had before this change, keeping the schema conformant with develop. Existing `DType::Union(..)` match arms that reject or skip unions are left in place, and concrete implementations will come later. ## What APIs are changed? Are there any user-facing changes? `DType::Union` will now have a type parameter `UnionVariants`. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 1de4f39 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add `UnionVariants` type and embed it in `DType::Union` Replaces `DType::Union(Nullability)` with `DType::Union(UnionVariants, Nullability)`. `UnionVariants` carries a `FieldNames` list, per-variant `FieldDType`s, and an `i8` type-id vector (supporting non-consecutive tags like `[0, 5, 7]` so children can be removed without renumbering). The flatbuffer and protobuf `Union` schemas are extended with the `names`/`dtypes`/`type_ids` fields, and serde, flatbuffers, and protobuf paths are filled in with round-trip tests and nullability-constraint checks. The flatbuffer `Union` table uses explicit field ids so that `nullable` keeps the id it had before this change, keeping the schema conformant with develop. Existing `DType::Union(..)` match arms that reject or skip unions are left in place; concrete implementations land alongside the array work. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 682c7b8 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
Add JSON to Parquet Variant conversion with shredding (#8391) ## Summary This PR adds a `vortex.json_to_variant` expression for converting UTF-8 or `vortex.json` extension arrays into Variant arrays. The expression lives in `vortex-json` so JSON-facing expression metadata and serialization are independent of a concrete Variant encoding. `vortex-parquet-variant` provides the concrete execution kernels, parsing JSON through `parquet_variant_compute` and producing Parquet Variant storage. --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 5df0f94 | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | GitHub | |
Numerical aggregate functions have an option to skip or include nans in calculation, skip by default (#8457) Almost all of the time you want to skip nans but for rare cases when you don't we need to be able to configure it
| Commit: | 563b7d9 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
Json-Variant exprs Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 3006be6 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
Updated Variant array and the new VariantGet expression (#7877) ## Summary This PR includes two big changes as Variant moves closer to readiness. 1. Potentially holding the `shredded` child of a variant array in the canonical VariantArray 2. A `VariantGet` expression that can pull extract data out of variant arrays, either in a typed way or as a more opaque `Variant`. For reviewers, some relevant context might be: 1. The [VariantGet](https://github.com/vortex-data/rfcs/pull/58) RFC: this RFC takes some lessons I've learned working on this into account and reflects my updated view of this problem. 2. The original [Variant type](https://vortex-data.github.io/rfcs/rfc/0015.html) RFC I think the Parquet spec is also a pretty good read and a very heavy influence of this work - [`Shredding`](https://parquet.apache.org/docs/file-format/types/variantshredding/) and the [`Variant type`](https://parquet.apache.org/docs/file-format/types/variantencoding/). --------- Signed-off-by: "Adam Gutglick" <adam@spiraldb.com> Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | bb803d1 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
Add `UnionVariants` type and embed it in `DType::Union` Replaces `DType::Union(Nullability)` with `DType::Union(UnionVariants, Nullability)`. `UnionVariants` carries a `FieldNames` list, per-variant `FieldDType`s, and an `i8` type-id vector (supporting non-consecutive tags like `[0, 5, 7]` so children can be removed without renumbering). The flatbuffer and protobuf `Union` schemas are extended with the `names`/`dtypes`/`type_ids` fields, and serde, flatbuffers, and protobuf paths are filled in with round-trip tests and nullability-constraint checks. All the `todo!()` stubs added in the previous commit for `DType::Union(..)` arms are left in place; concrete implementations land alongside the array work. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | e56c80d | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Add `DType::Union` variant carrying just `Nullability` (#7901) ## Summary Tracking issue: https://github.com/vortex-data/vortex/issues/7882 Adds the `Union(Nullability)` enum variant, plumbs it through all existing match arms with `todo!("TODO(connor)[Union]: unimplemented")`, and reserves slot 12 in the flatbuffer and protobuf wire schemas. A follow-up PR will replace `Union(Nullability)` with `Union(UnionVariants, Nullability)` and fill in the serde paths. Note that this PR doesn't have any implementation logic, it is just boilerplate. ## API Changes Adds a new `DType::Union` variant. ## Testing Nothing to test. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 7b317ef | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | GitHub | |
Remove unused protobuf dependency in java bindings (#7886) This is no longer used. Got left behind latest refactors Signed-off-by: Robert Kruszewski <github@robertk.io>
| Commit: | 3488c37 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
VariantGet with DType Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 9599d80 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
[WIP] Re-shaping the canonical variant array to support more general forms of shredding Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | b5224d3 | |
|---|---|---|
| Author: | Claude | |
Add SafeDiv binary operator ## Summary Adds `Operator::SafeDiv` — a division variant where a non-null zero divisor yields 0 rather than erroring. Integer overflow still errors (`i32::MIN / -1`), matching `Div`. Null on either side propagates. ## Implementation The array-level kernel is a hand-written single-pass `match_each_native_ptype!` loop (not a composition of existing ops). It runs over primitive slices once, combining validity from both inputs and producing a `PrimitiveArray` directly. Wiring touches the usual places a new binary arithmetic operator hits: proto enum and generated bindings, `Operator` / `NumericOperator` with their conversions, the `Binary` scalar-fn dispatcher (including stat_falsification), scalar-level `checked_binary_numeric` for both primitive and decimal scalars, and the FFI C enum. To combine validity from the two input arrays, the kernel calls `Validity::and` and then eagerly materializes the resulting lazy `Binary(And)` expression via `execute::<BoolArray>(ctx)`. This required threading `ExecutionCtx` through `execute_numeric` from the `Binary` dispatcher. Scope note: array-level SafeDiv is primitive-only. A decimal-array input fails with a clear error rather than silently inheriting the zero-rhs-errs behavior from arrow-arith; scalar-level decimal SafeDiv (used by the constant-constant fast path) is supported. ## Testing - 5 primitive scalar tests (integer, integer-by-zero, overflow still errs, float-by-zero yields 0.0 not Inf, null propagation) - 1 decimal scalar test (by-zero yields zero, not None) - 4 array-level tests (integer-by-zero, float-by-zero, nullable propagation from both sides, constant-zero rhs fast path) - Conformance harness: SafeDiv added to the operator arrays and is exercised with zero-valued scalars (unlike Div, which is skipped) - `cargo test -p vortex-array --lib` → 2556 passed, 0 failed - `cargo clippy -p vortex-array -p vortex-ffi -p vortex-proto --all-targets --all-features` → clean - `cargo fmt --all` → clean (nightly fmt unavailable in this sandbox) Signed-off-by: Claude <noreply@anthropic.com> https://claude.ai/code/session_01MLXfBVfMbrUgRPafnt5GHC Signed-off-by: Claude <noreply@anthropic.com>
| Commit: | 1c06acd | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
Better expr Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 83ab0e8 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
variant get Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 74586e2 | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
add array variant to scalar value Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 438cb57 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
Initial work Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 6d7965f | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
Filling out the missing pieces Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 0ea4a41 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
Scalar Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 213d181 | |
|---|---|---|
| Author: | Nicholas Gates | |
merge Signed-off-by: Nicholas Gates <nick@nickgates.com>
| Commit: | 43ae2dc | |
|---|---|---|
| Author: | Dmitrii Blaginin | |
| Committer: | GitHub | |
chore: `AggregateFnRef` [de]serialize (#7070) Signed-off-by: blaginin <github@blaginin.me>
| Commit: | b8b056d | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
Variant DType (#6912) This PR includes initial support for the Variant DType, as described in the [Variant RFC](https://github.com/vortex-data/rfcs/blob/develop/accepted/0015-variant-type.md). It includes most of the required boilerplate and initial structure for this new dtype. It includes the following changes: 1. New dtype 2. serialization for the dtype 3. Scalar variant and new scalar value 4. A lot of code paths that aren't supported yet and error accordingly. --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 0b3ae4d | |
|---|---|---|
| Author: | Nicholas Gates | |
Split up binary ScalarFn Signed-off-by: Nicholas Gates <nick@nickgates.com>
| Commit: | df23c37 | |
|---|---|---|
| Author: | Luke Kim | |
| Committer: | GitHub | |
feat[expr]: N-ary CASE WHEN expression (#6786) ## Summary Introduces CASE WHEN expression support in Vortex as a scalar function, implementing a true n-ary CASE WHEN cond1 THEN val1 WHEN cond2 THEN val2 ... ELSE default END expression. ## Changes included This pull request introduces support for SQL-style CASE WHEN expressions in Vortex, including both the expression logic and integration with DataFusion. The changes add new expression constructors, conversion logic, and pushdown support for CASE WHEN, as well as comprehensive benchmarks and tests to ensure correctness and performance. **CASE WHEN expression support:** * Added new constructors `case_when`, `case_when_no_else`, and `nested_case_when` to build CASE WHEN expressions in `exprs.rs`, leveraging the new `CaseWhen` scalar function and its options. [[1]](diffhunk://#diff-d1b532c524303a975ccf98376ed880c0b6e4bab2fce91e99157aac49f9c30e66R24-R25) [[2]](diffhunk://#diff-d1b532c524303a975ccf98376ed880c0b6e4bab2fce91e99157aac49f9c30e66R115-R168) * Introduced `CaseWhenOpts` protobuf message to encode CASE WHEN options for serialization. * Registered the new `case_when` scalar function module. **DataFusion integration:** * Implemented conversion from DataFusion's `CaseExpr` to Vortex's CASE WHEN expressions, supporting the "searched CASE" form and mapping WHEN/THEN/ELSE clauses. [[1]](diffhunk://#diff-ca68b66d97eff4b97ef5e70b3c324078ee441d91422f8d3a426f47882a61a202R148-R186) [[2]](diffhunk://#diff-ca68b66d97eff4b97ef5e70b3c324078ee441d91422f8d3a426f47882a61a202R278-R281) * Enhanced pushdown logic to support CASE WHEN expressions, including recursive checks for child expressions and ELSE clauses. [[1]](diffhunk://#diff-ca68b66d97eff4b97ef5e70b3c324078ee441d91422f8d3a426f47882a61a202L383-R432) [[2]](diffhunk://#diff-ca68b66d97eff4b97ef5e70b3c324078ee441d91422f8d3a426f47882a61a202R445-R510) **Benchmarking and testing:** * Added comprehensive benchmarks for various CASE WHEN scenarios in `case_when_bench.rs` and registered them in `Cargo.toml`. [[1]](diffhunk://#diff-c745f3a7a34d4a4f657c8e2e9e47197ec0f36e2886656366721559f36b76eca9R1-R210) [[2]](diffhunk://#diff-b1d55e82b9c9a25ba02540f4e1d46def7467de866587345f75b63f9ac51c04a6R130-R134) * Added an equivalence test to ensure that DataFusion CASE WHEN results match Vortex's results for the same input data. **Other improvements:** * Refined scalar function pushdown checks and utility logic for expression convertibility. * Minor code quality improvements and error handling in the expression module. ## Testing * Added a comprehensive test to verify equivalence between DataFusion and Vortex results for a `CASE WHEN` expression applied to an Arrow `RecordBatch`. ## Benchmarking * Introduced a new benchmark for various `CASE WHEN` scenarios, including simple, nested, all-true, and all-false cases, in `benches/expr/case_when_bench.rs`, and registered it in `Cargo.toml`. [[1]](diffhunk://#diff-c745f3a7a34d4a4f657c8e2e9e47197ec0f36e2886656366721559f36b76eca9R1-R144) [[2]](diffhunk://#diff-b1d55e82b9c9a25ba02540f4e1d46def7467de866587345f75b63f9ac51c04a6R130-R134) Benchmark | 1K rows | 10K rows | 100K rows -- | -- | -- | -- case_when_simple | 5.4 µs | 8.4 µs | 29.5 µs case_when_without_else | 5.5 µs | 8.7 µs | 29.4 µs case_when_all_true | 4.2 µs | 6.3 µs | 20.7 µs case_when_all_false | 4.3 µs | 6.4 µs | 20.1 µs case_when_nary_3_conditions | 15.1 µs | 25.8 µs | 87.3 µs case_when_nary_equality_lookup (5) | 25.2 µs | 39.7 µs | 125.4 µs case_when_nary_10_conditions | 45.5 µs | 73.1 µs | 257.5 µs --------- Signed-off-by: Luke Kim <80174+lukekim@users.noreply.github.com>
| Commit: | 4fb6ee3 | |
|---|---|---|
| Author: | Daniel King | |
fix: correctly (de)serialize merge with error duplicate handling Signed-off-by: Daniel King <dan@spiraldb.com>
| Commit: | 1530401 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
Expand expression pushdown to DataFusion (#4398) Started as a demo for @danking to show how to add more pushdown to Datafusion, now it includes some more expression (`IS NULL`, `IS NOT NULL` and `IN LIST`), which only leaves `substr` and dynamic expressions. It also allows for pushing more binary operators for arithmetic operations. `vortex-compact` seems really noise, but clickbench still shows nice improvements in a bunch of queries for the btrblocks compression. --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 370c6c0 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
More ops Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 247583b | |
|---|---|---|
| Author: | Adam Gutglick | |
More ops Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | c1e897a | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | GitHub | |
Feature: `FixedSizeList` infrastructure (#4385) Adds infrastructure to support `FixedSizeList` including: - Arbitrary implementations - Flatbuffers - Protobuf - Some tests (commit granularity is nice if you want to look at that) --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | aa7c59a | |
|---|---|---|
| Author: | Connor Tsui | |
| Committer: | Connor Tsui | |
add `FixedSizeList` Protobuf Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
| Commit: | 4a23f65 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
feat: Support more datafusion features (#4180) After spending some time today debugging a Datafusion issue with @joseph-isaacs and @robert3005 (ended up not being related to us), I figured I'll use the momentum to add some of the missing features: 1. Support for basic arithmetic expression pushdown (which exists in TPC-DS), including subtraction to `vortex-expr`. 2. Support files with different (but compatible) schemas in the same table. This is currently only supported if a `PhysicalExprAdapterFactory` is provided (either through the `FileScanConfig` or directly). 3. Support hive-style partitioning columns. Both features aren't fully fleshed out and probably require more tests, I want to figure out if we can use datafusion's own test suite to close that gap, they have pretty cool tooling to test SQL. One of the changes it required is making the source and opener more datafusion-y, doing most of the conversion work into Vortex in the actual `FileOpenFuture`. It allows us to utilize more of datafusion's tools for rewriting expressions over specific files. --------- Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 987b77e | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
feat: More Datafusion support Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 3ce98c9 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
feat: More Datafusion support Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 450823f | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
feat: More Datafusion support Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 8fc67e2 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | Adam Gutglick | |
feat: More Datafusion support Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 03508f9 | |
|---|---|---|
| Author: | Will Manning | |
| Committer: | GitHub | |
fix: error-prone f16 Scalar serde (#4113) ⏺ Summary of Changes The diff shows comprehensive changes to fix scalar casting bugs and ensure backwards compatibility for serialized scalar values. Here are the key changes: 1. Core Bug Fix: Floating-Point Conversion (vortex-scalar/src/pvalue.rs) - Fixed critical bug where u64 to f64 conversion was using bit reinterpretation (f64::from_bits()) instead of numeric conversion - Changed to use NumCast::from() for proper numeric conversions 2. Type Coercion System (vortex-scalar/src/lib.rs) - Added coerce_value() method in Scalar::new() to handle backwards compatibility - Specifically coerces f16 values stored as u64 (for backwards compatibility with serialized data) - Includes recursive coercion for structs and lists containing f16 fields - Protected against overflow (only coerces u64 to f16 if value ≤ u16::MAX) 3. Protobuf Support for f16 (vortex-proto/proto/scalar.proto) - Added dedicated f16_value field to protobuf schema (field 10) - Updated serialization to use this dedicated field instead of storing f16 as u64 4. Consistent Scalar Construction - Updated all direct Scalar { dtype, value } constructions to use Scalar::new() - Ensures coercion logic is always applied - Changed in: - bool.rs: into_scalar(), bool(), From<bool> - primitive.rs: primitive_value(), From<$T> for Scalar - struct_.rs: field_by_idx(), cast(), struct_() - list.rs: element(), list(), list_empty() 5. Test Coverage (vortex-scalar/src/lib.rs and proto.rs) - Fixed test_canonicalize_scalar_values to create f16 values properly - Added comprehensive coercion tests: - f16 coercion from u64 - No coercion for other type combinations - Struct field coercion - List element coercion - Overflow protection - Added ScalarValue protobuf roundtrip tests: - Direct f16 roundtripping - Value preservation for all primitive types - Handling of type consolidation (u8/u16/u32 → u64, i8/i16/i32 → i64) 6. Key Design Decision - Only f16 from u64 is coerced (minimal approach for backwards compatibility) - Other floating-point types (f32, f64) are NOT coerced - This preserves backwards compatibility while fixing the root cause The changes ensure that: 1. Scalar casting now uses numeric conversion instead of bit reinterpretation 2. Old serialized f16 values (stored as u64) are properly handled 3. All scalar constructions go through the coercion logic 4. Comprehensive tests verify the behavior --------- Signed-off-by: Will Manning <will@willmanning.io>
| Commit: | 5a09cdf | |
|---|---|---|
| Author: | Will Manning | |
| Committer: | Will Manning | |
stop tagging f16 as u64 in proto Signed-off-by: Will Manning <will@willmanning.io>
| Commit: | d0423c4 | |
|---|---|---|
| Author: | Adam Gutglick | |
| Committer: | GitHub | |
feat: Add serialization support for Select expression (#4077) Signed-off-by: Adam Gutglick <adam@spiraldb.com>
| Commit: | 8afe0fe | |
|---|---|---|
| Author: | Nicholas Gates | |
| Committer: | GitHub | |
Remove var expression (#3829) Fixes #3671 * Removes the Var expression, leaving instead a `root()` expression for resolving the scope root. * The expression scope can hold context variables, useful for passing in auth tokens for example, but not variables that would impact the return_dtype of the expression. * ScopeDType has therefore been removed, because the dtype of the scope _is_ just the dtype of the root array. * Simplifies some transformation / partitioning logic where vars no longer need to be considered. Signed-off-by: Nicholas Gates <nick@nickgates.com> Co-authored-by: Will Manning <will@spiraldb.com>
| Commit: | ee8121d | |
|---|---|---|
| Author: | Nicholas Gates | |
| Committer: | GitHub | |
VortexExpr VTables (#3713) Adds the same vtable machinery as arrays and layouts already use. It uses the "Encoding" naming scheme from arrays and layouts. I don't particularly like it, but it's consistent. Open to renames later. Further, adds an expression registry to the Vortex session that will be used for deserialization. Expressions only decide their "options" serialization. So in theory, can support many container formats, not just proto, provided each expression can deserialize their own options format. --------- Signed-off-by: Nicholas Gates <nick@nickgates.com>
| Commit: | c5c8162 | |
|---|---|---|
| Author: | Nicholas Gates | |
Merge
| Commit: | 2e04c7c | |
|---|---|---|
| Author: | Nicholas Gates | |
Merge
| Commit: | bba0e63 | |
|---|---|---|
| Author: | Will Manning | |
| Committer: | GitHub | |
chore: SPDX license & copyrights (#3753)
| Commit: | aa302a4 | |
|---|---|---|
| Author: | Nicholas Gates | |
SelectExpr Signed-off-by: Nicholas Gates <nick@nickgates.com>
| Commit: | 0b47170 | |
|---|---|---|
| Author: | Nicholas Gates | |
Fix ocmpile
| Commit: | 9aa364f | |
|---|---|---|
| Author: | Nicholas Gates | |
Extensible expression serde Signed-off-by: Nicholas Gates <nick@nickgates.com>
| Commit: | ecb4cd7 | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | GitHub | |
chore: Rename CheckedAdd operator to Add (#3612) Signed-off-by: Robert Kruszewski <github@robertk.io>
| Commit: | cb4adc4 | |
|---|---|---|
| Author: | Dan King | |
| Committer: | GitHub | |
feat[vortex-expr]: CheckedAdd operator (#3603) Signed-off-by: Daniel King <dan@spiraldb.com>
| Commit: | 6f661c1 | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
chore[vortex-expr]: remove `let` expr (#3604)
| Commit: | 0ff30aa | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
feat[vortex-layout]: add row_id layout reader to support row_id expr queries (#3449) Add the following well defined Scope value ``` dtype("$vx.row_id") = {file_index: u64, file_row_number: u64} ``` This can be used in the scan, and file pruning --------- Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | 0a53ce7 | |
|---|---|---|
| Author: | Joe Isaacs | |
update Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | f90c116 | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
list_contains to use any semantics (#3448) Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | 537d3ac | |
|---|---|---|
| Author: | Joe Isaacs | |
wip Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | 8b9eec5 | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
feat[vortex-expr]: let expression (#3447) add let x = e in e and var(x) expressions, var("") replaces identity Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> --------- Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | c30aacb | |
|---|---|---|
| Author: | Joe Isaacs | |
fix Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | 033b9b9 | |
|---|---|---|
| Author: | Joe Isaacs | |
Merge branch 'develop' into ji/let-expr # Conflicts: # vortex-layout/src/layouts/flat/writer.rs # vortex-proto/src/generated/vortex.expr.rs
| Commit: | 3fd1f05 | |
|---|---|---|
| Author: | Joe Isaacs | |
add let and var expr Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | d17f02f | |
|---|---|---|
| Author: | Marko Bakovic | |
| Committer: | GitHub | |
Adds `list_contains` expression (#3410) Co-authored-by: Andrew Duffy <andrew@a10y.dev>
| Commit: | f7f2228 | |
|---|---|---|
| Author: | Joe Isaacs | |
Merge branch 'develop' into ji/let-expr # Conflicts: # vortex-proto/src/generated/vortex.expr.rs
| Commit: | 91624db | |
|---|---|---|
| Author: | Marko Bakovic | |
| Committer: | GitHub | |
Add `cast` expression (#3440)
| Commit: | cead55b | |
|---|---|---|
| Author: | Joe Isaacs | |
let expr Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | c265ccf | |
|---|---|---|
| Author: | Marko Bakovic | |
This commit will be squashed.
| Commit: | 968ade8 | |
|---|---|---|
| Author: | Joe Isaacs | |
wip Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
| Commit: | 0ac8561 | |
|---|---|---|
| Author: | Marko Bakovic | |
This commit will be squashed.
| Commit: | 0e7253c | |
|---|---|---|
| Author: | Marko Bakovic | |
| Committer: | GitHub | |
feat: add is_null expression (#3324)
| Commit: | 94444d3 | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | GitHub | |
Use protobuf to serialize scalars (#3141)
| Commit: | ce6727e | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | Robert Kruszewski | |
fixes
| Commit: | cb2004d | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | Robert Kruszewski | |
Use protobuf to serialize scalars
| Commit: | 457c842 | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
Add decimal with storage size i8..i64 to vortex (#3161)
| Commit: | 27596aa | |
|---|---|---|
| Author: | Joe Isaacs | |
add decimal i8..i64
| Commit: | 74dca0b | |
|---|---|---|
| Author: | Robert Kruszewski | |
| Committer: | Robert Kruszewski | |
Use protobuf to serialize scalars
| Commit: | 69f99c4 | |
|---|---|---|
| Author: | Andrew Duffy | |
| Committer: | GitHub | |
feat: Decimal types (#3058) Co-authored-by: Robert Kruszewski <github@robertk.io>
| Commit: | 579a91c | |
|---|---|---|
| Author: | Andrew Duffy | |
use uint32 for decimal precision in proto
| Commit: | ceb9366 | |
|---|---|---|
| Author: | Andrew Duffy | |
| Committer: | Andrew Duffy | |
closer
| Commit: | ad7923e | |
|---|---|---|
| Author: | Andrew Duffy | |
| Committer: | Andrew Duffy | |
feat: Decimal types
| Commit: | 857c841 | |
|---|---|---|
| Author: | Andrew Duffy | |
closer
| Commit: | a677a9e | |
|---|---|---|
| Author: | Andrew Duffy | |
feat: Decimal types
| Commit: | 67984cc | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
Add all vortex expressions to proto serde (#2907) Add serde + proto expression for like and between.
| Commit: | 9fbfda9 | |
|---|---|---|
| Author: | Andrew Duffy | |
| Committer: | GitHub | |
feat(java): Expression serialization protobufs (#2744)
| Commit: | c222a4a | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
Use proto c++ (#2734) Add marshalling from C++ into Expr proto --------- Co-authored-by: Alexander Droste <alexander.droste@protonmail.com>
| Commit: | 05eb71d | |
|---|---|---|
| Author: | Joe Isaacs | |
| Committer: | GitHub | |
Vortex expr protobuf (#2725) Added a first impl sketch for voretx-expr protobufs. I think in the future we will replace the `Kind kind = 3;` with a more extendable system, maybe proto any or json?
| Commit: | b69d89b | |
|---|---|---|
| Author: | Nicholas Gates | |
| Committer: | GitHub | |
Improve expression performance (#2273) * Only simplify once in the scanner * Manually implement return_dtype instead of expensive Canonical::Empty (FLUP: we should add `return_nullability()` expr too) * Remove `Field::Index` weirdness. * More consistent APIs for Struct{Scalar,Array,DType}
| Commit: | 126c773 | |
|---|---|---|
| Author: | Andrew Duffy | |
| Committer: | GitHub | |
chore: remove unused Decimal dtype in proto/fbs (#2156)