Skip to main content

InMemorySqlEngine

Struct InMemorySqlEngine 

Source
pub struct InMemorySqlEngine { /* private fields */ }
Expand description

The in-memory SQLite engine.

Implementations§

Source§

impl InMemorySqlEngine

Source

pub fn open() -> Result<Self, SqlQueryError>

Source

pub fn interrupt_handle(&self) -> InterruptHandle

Returns an interrupt handle that can cancel a running statement from another thread (used by the request-level timeout watchdog).

Source

pub fn create_table( &self, label: &str, schema: &TableSchema, ) -> Result<(), SqlQueryError>

Create a table with the given label and schema.

Source

pub fn create_view( &self, label: &str, source: &str, ) -> Result<(), SqlQueryError>

Creates a view named label that exposes every row and column of the existing table (or view) source, so a consumer’s SQL can address that table under a second name without copying a single row. Both identifiers go through the same validation as Self::create_table. The view lives in this request’s in-memory database and disappears with it.

Source

pub async fn insert_rows<S>( self, label: &str, schema: &TableSchema, rows: Pin<Box<S>>, max_rows: usize, ) -> Result<(Self, usize), SqlQueryError>
where S: Stream<Item = Result<Value, String>> + Send + 'static + ?Sized,

Streams rows into label on a dedicated blocking thread, then hands the engine back to the caller.

The engine (and the rusqlite::Statement the insert loop prepares) is not Send across an .await point, and the row stream is typically a tokio::sync::mpsc channel whose recv spends the polling task’s cooperative budget on every item — draining more than 128 rows in an ordinary async task therefore starves the waker and hangs forever. Moving the whole operation into tokio::task::spawn_blocking sidesteps both problems: the engine crosses into a blocking-pool thread by value, the stream is driven with Handle::block_on (which resets the cooperative budget on every poll and is safe to use exactly because there is no scheduler to starve on that thread), and the engine is returned to the caller once the whole insert has completed.

Returns Ok((engine, n)) on success, where n is the number of rows inserted and the transaction has been committed. On Err, the transaction has already been rolled back and the engine is dropped; callers are expected to abort the current plan rather than keep using a half-populated database.

Source

pub fn execute_select( &self, sql: &str, bindings: &[BoundParam], max_rows: usize, ) -> Result<QueryResult, SqlQueryError>

Run a SELECT with named bindings and a row cap.

Auto Trait Implementations§

Blanket Implementations§

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<'src, T> IntoMaybe<'src, T> for T
where T: 'src,

Source§

type Proj<U: 'src> = U

Source§

fn map_maybe<R>( self, _f: impl FnOnce(&'src T) -> &'src R, g: impl FnOnce(T) -> R, ) -> <T as IntoMaybe<'src, T>>::Proj<R>
where R: 'src,

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> PolicyExt for T
where T: ?Sized,

Source§

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

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
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 = !

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

fn try_from(value: U) -> Result<T, !>

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