Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8dc125d
Record frozen editions as append-only files under vortex/editions
claude Aug 11, 2026
b80b9d7
Record required_vortex_release in the frozen edition records
claude Aug 11, 2026
bd9f738
Record every edition, and lock a record only once its edition freezes
claude Aug 11, 2026
0b03aa9
Export the edition records from an xtask instead of a test
claude Aug 11, 2026
56538f0
Group the edition records by family
claude Aug 11, 2026
6e8a189
Move the edition declarations into vortex-edition, and check records …
claude Aug 12, 2026
6b28120
Document the unstable edition family
claude Aug 12, 2026
00803c5
Declare edition families, and record what each one is for
claude Aug 12, 2026
282c4aa
Port the frozen-record check to an xtask
claude Aug 12, 2026
8492a33
Fix the CI failures from adding git2
claude Aug 12, 2026
624792e
Quote the step condition with double quotes
claude Aug 12, 2026
e4ba05f
Adopt develop's edition set after the rebase
robert3005 Aug 20, 2026
b27bbe0
Require two approvals for edition changes, and document the freeze pr…
robert3005 Aug 20, 2026
747931d
Declare the json and spatial edition families
joseph-isaacs Aug 21, 2026
9e889a4
Add the SPDX header to .policy.yml
joseph-isaacs Aug 21, 2026
5147c0c
rework
robert3005 Aug 25, 2026
181ae9b
more
robert3005 Aug 26, 2026
799fbab
more
robert3005 Aug 26, 2026
de8feb9
reword
robert3005 Aug 28, 2026
d1dafe0
Move optional components into edition families
robert3005 Sep 1, 2026
e19a494
Fix edition dependency lockfile
robert3005 Sep 1, 2026
47808dd
Correct the OnPair minimum library version
robert3005 Sep 1, 2026
d787aa9
Split component editions and update core 2026.08
robert3005 Sep 1, 2026
af554c5
more
robert3005 Sep 1, 2026
8e66ee3
Correct the core 2026.08.1 minimum version
robert3005 Sep 1, 2026
1b6481c
Fix edition CI checks
robert3005 Sep 1, 2026
bb9ce96
more
robert3005 Sep 1, 2026
04867b8
more
robert3005 Sep 1, 2026
01ec0e0
feat(file): support uneditioned components
robert3005 Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,9 @@ jobs:
with:
sccache: s3
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
# check-editions compares against the merge base, so it needs real history.
fetch-depth: 0
- uses: ./.github/actions/setup-prebuild
with:
enable-sccache: "true"
Expand All @@ -738,6 +741,16 @@ jobs:
run: |
cargo run --profile ci -p xtask -- generate-fbs
cargo run --profile ci -p xtask -- generate-proto
- name: "regenerate the edition records"
run: |
cargo run --profile ci -p xtask -- generate-editions
- name: "check frozen edition records never change"
# Independent of the regeneration above: a stale record must not mask a frozen one
# being edited, nor the other way round.
if: "!cancelled()"
run: |
BASE="${{ github.event.pull_request.base.sha || 'HEAD^' }}"
cargo run --profile ci -p xtask -- check-editions --base "$BASE"
- name: "regenerate FFI header file"
run: |
cargo +$NIGHTLY_TOOLCHAIN build --profile ci -p vortex-ffi
Expand Down
52 changes: 52 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ geo-types = "0.7.19"
geoarrow = "0.8.0"
geoarrow-cast = "0.8.0"
get_dir = "0.5.0"
git2 = { version = "0.21", default-features = false }
glob = "0.3.2"
goldenfile = "1"
half = { version = "2.7.1", features = ["std", "num-traits"] }
Expand Down Expand Up @@ -276,6 +277,7 @@ thiserror = "2.0.3"
tokio = { version = "1.52" }
tokio-stream = "0.1.17"
tokio-util = "0.7.17"
toml = "0.9"
tpchgen = "3.0.0"
tpchgen-arrow = "3.0.0"
tracing = { version = "0.1.41", default-features = false }
Expand Down
304 changes: 212 additions & 92 deletions docs/specs/editions.md

Large diffs are not rendered by default.

75 changes: 46 additions & 29 deletions encodings/alp/src/alp/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
//! This enables zero-cost backward compatibility with previously written datasets.

use vortex_array::Array;
use vortex_array::ArrayDeserialization;
use vortex_array::ArrayId;
use vortex_array::ArrayPlugin;
use vortex_array::ArrayRef;
use vortex_array::ArraySerialization;
use vortex_array::ArrayVTable;
use vortex_array::IntoArray;
use vortex_array::VortexSessionExecute;
use vortex_array::arrays::Patched;
use vortex_array::buffer::BufferHandle;
use vortex_array::dtype::DType;
use vortex_array::serde::ArrayChildren;
use vortex_error::VortexResult;
use vortex_error::vortex_ensure;
use vortex_error::vortex_err;
use vortex_session::VortexSession;

Expand All @@ -42,22 +42,29 @@ impl ArrayPlugin for ALPPatchedPlugin {
&self,
array: &ArrayRef,
session: &VortexSession,
) -> VortexResult<Option<Vec<u8>>> {
) -> VortexResult<Option<ArraySerialization>> {
// Delegate to ALP's metadata serde
ALP.serialize(array, session)
ArrayPlugin::serialize(&ALP, array, session)
}

fn deserialize(
&self,
dtype: &DType,
len: usize,
metadata: &[u8],
buffers: &[BufferHandle],
children: &dyn ArrayChildren,
parts: ArrayDeserialization<'_>,
session: &VortexSession,
) -> VortexResult<ArrayRef> {
vortex_ensure!(
parts.serialized_id == self.id(),
"ALP plugin does not recognize serialized ID {}",
parts.serialized_id,
);
let alp_array = Array::<ALP>::try_from_parts(ArrayVTable::deserialize(
&ALP, dtype, len, metadata, buffers, children, session,
&ALP,
parts.dtype,
parts.len,
parts.metadata,
parts.buffers,
parts.children,
session,
)?)
.map_err(|_| vortex_err!("ALP plugin should only deserialize vortex.alp"))?;

Expand Down Expand Up @@ -91,6 +98,7 @@ mod tests {
use std::f64::consts::PI;
use std::sync::LazyLock;

use vortex_array::ArrayDeserialization;
use vortex_array::ArrayPlugin;
use vortex_array::IntoArray;
use vortex_array::VortexSessionExecute;
Expand Down Expand Up @@ -133,7 +141,7 @@ mod tests {

let array = alp_encoded.as_array();

let metadata = SESSION.array_serialize(array)?.unwrap();
let serialization = SESSION.array_serialize(array)?.unwrap();
let children = array.children();
let buffers = array
.buffers()
Expand All @@ -142,11 +150,14 @@ mod tests {
.collect::<Vec<_>>();

let deserialized = ALPPatchedPlugin.deserialize(
array.dtype(),
array.len(),
&metadata,
&buffers,
&children,
ArrayDeserialization::new(
ALPPatchedPlugin.id(),
array.dtype(),
array.len(),
&serialization.metadata,
&buffers,
&children,
),
&SESSION,
)?;

Expand Down Expand Up @@ -182,7 +193,7 @@ mod tests {

let array = alp_encoded.as_array();

let metadata = SESSION.array_serialize(array)?.unwrap();
let serialization = SESSION.array_serialize(array)?.unwrap();
let children = array.children();
let buffers = array
.buffers()
Expand All @@ -191,11 +202,14 @@ mod tests {
.collect::<Vec<_>>();

let deserialized = ALPPatchedPlugin.deserialize(
array.dtype(),
array.len(),
&metadata,
&buffers,
&children,
ArrayDeserialization::new(
ALPPatchedPlugin.id(),
array.dtype(),
array.len(),
&serialization.metadata,
&buffers,
&children,
),
&SESSION,
)?;

Expand All @@ -213,7 +227,7 @@ mod tests {
fn primitive_array_returns_error() {
let array = PrimitiveArray::from_iter([1.0f64, 2.0, 3.0]).into_array();

let metadata = SESSION.array_serialize(&array).unwrap().unwrap();
let serialization = SESSION.array_serialize(&array).unwrap().unwrap();
let children = array.children();
let buffers = array
.buffers()
Expand All @@ -223,11 +237,14 @@ mod tests {

// This panics because PrimitiveArray has no children and ALP requires encoded child.
let _result = ALPPatchedPlugin.deserialize(
array.dtype(),
array.len(),
&metadata,
&buffers,
&children,
ArrayDeserialization::new(
ALPPatchedPlugin.id(),
array.dtype(),
array.len(),
&serialization.metadata,
&buffers,
&children,
),
&SESSION,
);
}
Expand Down
Loading
Loading