pub enum ArrayOp {
OpenArray {
array_id: ArrayId,
schema_msgpack: Vec<u8>,
schema_hash: u64,
prefix_bits: u8,
},
Put {
array_id: ArrayId,
cells_msgpack: Vec<u8>,
wal_lsn: u64,
provenance: Option<SyncProvenance>,
},
Delete {
array_id: ArrayId,
coords_msgpack: Vec<u8>,
wal_lsn: u64,
provenance: Option<SyncProvenance>,
},
Slice {
array_id: ArrayId,
slice_msgpack: Vec<u8>,
attr_projection: Vec<u32>,
limit: u32,
cell_filter: Option<SurrogateBitmap>,
hilbert_range: Option<(u64, u64)>,
system_time: SystemTimeScope,
valid_at_ms: Option<i64>,
},
Project {
array_id: ArrayId,
attr_indices: Vec<u32>,
},
Aggregate {
array_id: ArrayId,
attr_idx: u32,
reducer: ArrayReducer,
group_by_dim: i32,
cell_filter: Option<SurrogateBitmap>,
return_partial: bool,
hilbert_range: Option<(u64, u64)>,
system_as_of: Option<i64>,
valid_at_ms: Option<i64>,
},
Elementwise {
left: ArrayId,
right: ArrayId,
op: ArrayBinaryOp,
attr_idx: u32,
cell_filter: Option<SurrogateBitmap>,
},
Flush {
array_id: ArrayId,
wal_lsn: u64,
},
Compact {
array_id: ArrayId,
audit_retain_ms: Option<i64>,
},
SurrogateBitmapScan {
array_id: ArrayId,
slice_msgpack: Vec<u8>,
},
DropArray {
array_id: ArrayId,
},
}Expand description
Array engine physical operations.
All ops scope by ArrayId (tenant + array name). LSN-bearing
write ops (Put, Delete) carry a Control-Plane-allocated
wal_lsn so the Data Plane handler can stamp memtable entries
without re-appending to the WAL — matching the existing
timeseries / columnar dispatch contract.
Variants§
OpenArray
Open or attach to an existing array. Schema bytes are an
zerompk encoding of nodedb_array::ArraySchema. The DDL
pathway will replace this with a catalog lookup.
Fields
Put
Insert one or more cells. cells_msgpack is an zerompk
encoding of Vec<nodedb::engine::array::wal::ArrayPutCell>.
Each cell carries a Control-Plane-allocated Surrogate parallel
to its coord tuple — cross-engine bitmap joins read the
surrogate column on read paths instead of translating coords
back to user-visible PKs.
provenance is Some only on the inbound sync path (Lite → Origin).
The Data Plane uses it for epoch fencing and HWM tracking.
Non-sync callers (SQL DML, Raft apply) set this to None.
Fields
provenance: Option<SyncProvenance>Sync provenance for epoch fencing and HWM tracking.
None for locally-originated or Raft-replicated writes.
Delete
Delete by exact coordinates. coords_msgpack is an zerompk
encoding of Vec<Vec<CoordValue>>.
provenance is Some only on the inbound sync path (Lite → Origin).
Fields
provenance: Option<SyncProvenance>Sync provenance for epoch fencing and HWM tracking.
None for locally-originated or Raft-replicated writes.
Slice
Coord-range slice with optional attribute projection.
slice_msgpack is an zerompk encoding of
nodedb_array::query::Slice. Empty attr_projection means
“all attributes”.
Under SystemTimeScope::AllVersions (AS OF SYSTEM TIME NULL),
the Data Plane emits one row per live cell-version, each carrying
ArrayCell::system_time = Some(system_from_ms). Rows are sorted
ascending by system time, ties broken by coord lexicographic order.
limit bounds the total number of versions returned (not cells).
Fields
cell_filter: Option<SurrogateBitmap>Optional surrogate prefilter restricting which cells are returned.
Only cells whose surrogate is present in this bitmap are included.
None = no restriction.
hilbert_range: Option<(u64, u64)>Optional Hilbert-prefix range [lo, hi]. When set, only cells
whose Hilbert prefix falls within this range are included.
Used by distributed shard slice to prevent duplicate rows in
single-node harnesses where all vShards share one Data Plane.
None = no Hilbert filter (all cells included).
system_time: SystemTimeScopeBitemporal system-time scope.
Current: live read (returns the latest committed state).AsOf(t): point-in-time snapshot at system-timet.AllVersions: audit-log read — every live cell-version, ordered ascending bysystem_from_ms. Each emitted row hasArrayCell::system_time = Some(system_from_ms).
Project
Attribute projection (no coord filter).
Aggregate
Reduce one attribute column. group_by_dim < 0 means no
group-by (one scalar partial per tile, merged across tiles by
the executor).
Fields
reducer: ArrayReducercell_filter: Option<SurrogateBitmap>Optional surrogate prefilter: only cells whose surrogate is in
this bitmap contribute to the aggregate. None = all cells.
return_partial: boolWhen true the Data Plane returns a zerompk-encoded
Vec<ArrayAggPartial> instead of the finalized scalar rows.
Used by the distributed shard handler so the coordinator can
merge partials across shards before finalizing.
Single-node SQL callers always pass false.
hilbert_range: Option<(u64, u64)>Optional Hilbert-prefix range [lo, hi]. When set, only cells
whose Hilbert prefix falls within this range are included.
Used by distributed shard agg to prevent double-counting in
single-node harnesses where all vShards share one Data Plane.
None = no Hilbert filter (all cells included).
Elementwise
Pairwise op between two coord-aligned arrays. Both must share schema (validated on the Data Plane).
Fields
op: ArrayBinaryOpcell_filter: Option<SurrogateBitmap>Optional surrogate prefilter restricting which cells participate
in the pairwise op. Applied to both operands so outer-join
fallthroughs from either side are also excluded.
None = all cells.
Flush
Force a memtable flush. Returns the new segment ref’s id +
flush_lsn in the response payload. The Control Plane allocates
wal_lsn from the central WAL writer and the engine stamps it
as the segment’s flush watermark.
Compact
Trigger compaction if the picker selects one. Response indicates whether a merge happened.
audit_retain_ms is the array’s retention window in milliseconds
(from ArrayCatalogEntry). None means retain all versions.
SurrogateBitmapScan
Coord-range slice that emits one document-shaped row per matching
cell, where the row’s id is the cell’s bound Surrogate formatted
as 8-char zero-padded lowercase hex (substrate row-key format).
Used by the cross-engine fusion path: the vector engine runs this
as an inline_prefilter_plan and reads id via
collect_surrogates to build a SurrogateBitmap. Since the
surrogate identity initiative binds every cell to a global
Surrogate at write time, the cell’s own surrogate is the
cross-engine join key — no extra attr resolution needed.
DropArray
Drop the per-core array store. Broadcast on DROP ARRAY after
the Control-Plane catalog has been mutated so each Data-Plane
core releases its local store; otherwise a follow-up
CREATE ARRAY of the same name could carry stale memtable /
segment state. Idempotent: silently succeeds when no store is
open on the receiving core.
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for ArrayOp
impl<'de> Deserialize<'de> for ArrayOp
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'__msgpack_de> FromMessagePack<'__msgpack_de> for ArrayOp
impl<'__msgpack_de> FromMessagePack<'__msgpack_de> for ArrayOp
impl StructuralPartialEq for ArrayOp
Auto Trait Implementations§
impl Freeze for ArrayOp
impl RefUnwindSafe for ArrayOp
impl Send for ArrayOp
impl Sync for ArrayOp
impl Unpin for ArrayOp
impl UnsafeUnpin for ArrayOp
impl UnwindSafe for ArrayOp
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> FromMessagePackOwned for Twhere
T: for<'a> FromMessagePack<'a>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
impl<T> MaybeSendSync for T
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Rleable for T
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.