Skip to main content

AilakeFileReader

Struct AilakeFileReader 

Source
pub struct AilakeFileReader { /* private fields */ }

Implementations§

Source§

impl AilakeFileReader

Source

pub fn new(bytes: Bytes, vector_column: &str, dim: u32) -> Self

Source

pub fn ailk_offset(&self) -> AilakeResult<u64>

Returns the absolute byte offset of the primary AILK section.

Tries ailake.footer_offset from Parquet KV metadata first (files written by write() / write_multi()). Falls back to AilakeTrailer bootstrap for files produced by write_single_pass() / write_multi_single_pass().

Source

pub fn ailk_offset_for_column(&self, column: &str) -> AilakeResult<u64>

Returns the absolute byte offset of the AILK section for a named vector column.

Resolution order:

  1. ailake.{column}.footer_offset KV (extra columns in multi-column files)
  2. ailake.footer_offset KV (primary column or single-column files)
  3. AilakeTrailer scan (streaming / single-pass files without KV injection)

True iff this file has its own AILK section specifically for column — i.e. a ailake.{column}.footer_offset KV entry is present.

Unlike ailk_offset_for_column(), this does not fall back to the primary column’s footer or the trailer bootstrap: those fallbacks make ailk_offset_for_column(...).is_ok() return true for any AI-Lake file regardless of column, which is correct for “give me an offset to read” but wrong for “does this specific secondary column exist” — e.g. an idempotency check before adding a new vector column to files that don’t have it yet.

Source

pub fn is_ailake_file(&self) -> bool

Returns true if the file contains an embedded AILK section.

Source

pub fn read_header(&self) -> AilakeResult<AilakeHeader>

Parse the 64-byte AI-Lake header from the embedded AILK section.

Source

pub fn read_header_for_column(&self, column: &str) -> AilakeResult<AilakeHeader>

Parse the 64-byte AI-Lake header for a named vector column.

Uses ailake.{column}.footer_offset for extra columns and falls back to ailake.footer_offset for the primary column (single-column files).

Source

pub fn get_centroid(&self) -> AilakeResult<Centroid>

Read centroid + radius from the AILK section.

Source

pub fn load_index(&self) -> AilakeResult<HnswIndex>

Load the HNSW index from the primary AILK section.

Source

pub fn load_index_for_column(&self, column: &str) -> AilakeResult<HnswIndex>

Load the HNSW index for a specific vector column.

Works for both single-column files (falls back to primary AILK) and multi-column files written with AilakeFileWriter::write_multi.

Source

pub fn load_any_index(&self) -> AilakeResult<AnyIndex>

Load primary index as AnyIndex, dispatching on header flags.

Source

pub fn load_any_index_for_column(&self, column: &str) -> AilakeResult<AnyIndex>

Load index for a specific vector column as AnyIndex.

Source

pub fn read_parquet(&self) -> AilakeResult<(RecordBatch, Vec<Vec<f32>>)>

Read the Parquet section (tabular data + decoded embeddings). The full file is valid Parquet; the AILK section is invisible to standard readers.

Source

pub fn read_parquet_filtered( &self, filter: &ColumnFilter, ) -> AilakeResult<(RecordBatch, Vec<Vec<f32>>)>

Same as read_parquet, but pushes filter down to the Parquet read — see ParquetVectorReader::read_all_filtered for the row-group skip + exact RowFilter mechanics.

Source

pub fn matching_row_ids( &self, filter: &ColumnFilter, ) -> AilakeResult<HashSet<u64>>

Returns the set of original (file-relative) row indices matching filter, without disturbing row identity — see ParquetVectorReader::matching_row_ids. Use this (not read_parquet_filtered) wherever the caller also indexes rows by an externally-computed position (HNSW row_id, deletion vector bitmap).

Source

pub fn load_fts_blob(&self) -> AilakeResult<Option<Bytes>>

Load the raw FTS blob from the AILK_FTS section, if present.

Returns Ok(None) when the file has no FTS section (opt-in feature). The returned bytes can be passed directly to ailake_fts::FtsSearcher::from_blob.

Source

pub fn verify_integrity(&self) -> AilakeResult<()>

Verify the positional invariant: Parquet record_count == index node_count.

Dispatches via load_any_index() (HNSW or IVF-PQ, per header.flags) — unlike load_index(), which always assumes HNSW and errors out on an IVF-PQ-indexed file.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Fruit for T
where T: Send + Downcast,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more