Skip to main content

SqliteDataset

Struct SqliteDataset 

pub struct SqliteDataset<I> { /* private fields */ }
Expand description

This struct represents a dataset where all items are stored in an SQLite database. Each instance of this struct corresponds to a specific table within the SQLite database, and allows for interaction with the data stored in the table in a structured and typed manner.

The database is read and written with Turso, which implements the engine in Rust rather than linking libsqlite3, so the files stay interchangeable with any other SQLite tooling. Note that this does not make the build free of C: turso pulls simsimd for its SIMD kernels, which compiles C unconditionally.

The SQLite database must contain a table with the same name as the split field. This table should have a primary key column named row_id, which is used to index the rows in the table. The row_id should start at 1, while the corresponding dataset index should start at 0, i.e., row_id = index + 1.

Table columns can be represented in two ways:

  1. The table can have a column for each field in the I struct. In this case, the column names in the table should match the field names of the I struct. The field names can be a subset of column names and can be in any order.

For the supported field types, refer to SQLite data types. Each column is handed to serde as the value its storage class implies: INTEGER as i64, REAL as f64, TEXT as String, and BLOB as a byte sequence. Booleans are read back from integers, and a nullable column maps to an Option field. Reading a NULL into a bare f32 or f64 field yields NaN.

A Vec<u8> field derives as a sequence, so a large BLOB column is walked one byte at a time. Tagging the field #[serde(with = "serde_bytes")] moves the blob across instead, which is substantially cheaper for columns of any size.

  1. The fields in the I struct can be serialized into a single column item in the table. In this case, the table should have a single column named item of type BLOB. This is useful when the I struct contains complex fields that cannot be mapped to a SQLite type, such as nested structs, vectors, etc. The serialization is done using MessagePack.

Note: The code automatically figures out which of the above two cases is applicable, and uses the appropriate method to read the data from the table.

Implementations§

§

impl<I> SqliteDataset<I>

pub fn from_db_file<P>( db_file: P, split: &str, ) -> Result<SqliteDataset<I>, SqliteDatasetError>
where P: AsRef<Path>,

Initializes a SqliteDataset from a SQLite database file and a split name.

pub fn db_file(&self) -> PathBuf

Get the database file name.

pub fn split(&self) -> &str

Get the split name.

Trait Implementations§

§

impl<I> Dataset<I, SqliteDatasetError> for SqliteDataset<I>

§

fn get(&self, index: usize) -> Result<I, SqliteDatasetError>

Get an item from the dataset.

§Panics

Panics if index >= len().

§

fn get_many(&self, indexes: Vec<usize>) -> Result<Vec<I>, SqliteDatasetError>

Get multiple items from the dataset in a single query.

§Panics

Panics if indexes[i] >= len().

§

fn len(&self) -> usize

Return the number of rows in the dataset.

§

fn is_empty(&self) -> bool

Checks if the dataset is empty.
§

fn iter(&self) -> DatasetIterator<'_, I, E> ⓘ
where Self: Sized,

Returns an iterator over the dataset.
§

impl<I> Debug for SqliteDataset<I>
where I: Debug,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<I> !RefUnwindSafe for SqliteDataset<I>

§

impl<I> !UnwindSafe for SqliteDataset<I>

§

impl<I> Freeze for SqliteDataset<I>

§

impl<I> Send for SqliteDataset<I>
where I: Send,

§

impl<I> Sync for SqliteDataset<I>
where I: Sync,

§

impl<I> Unpin for SqliteDataset<I>
where I: Unpin,

§

impl<I> UnsafeUnpin for SqliteDataset<I>

Blanket Implementations§

§

impl<T> Adaptor<()> for T

§

fn adapt(&self)

Adapt the type to be passed to a metric.
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
§

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

§

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

§

impl<K, Q> Comparable<Q> for K
where K: Borrow<Q> + ?Sized, Q: Ord + ?Sized,

§

fn compare(&self, key: &Q) -> Ordering

Compare self to key and return their ordering.
§

impl<K, Q> Equivalent<Q> for K
where K: Borrow<Q> + ?Sized, Q: Eq + ?Sized,

§

fn equivalent(&self, key: &Q) -> bool

Compare self to key and return true if they are equal.
§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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