pub struct SqliteEngine { /* private fields */ }Expand description
SQLite query engine backed by tokio_rusqlite.
§Breaking changes (0.7)
SqliteEngine no longer has inherent query / query_one / query_opt
methods that returned untyped RowData / serde_json::Value. It now
implements prax_query::traits::QueryEngine, whose row-returning
methods are generic over T: Model + FromRow and return typed models.
Migration:
- Replace
engine.query(sql, params)withengine.query_many::<YourType>(sql, params).await?, whereYourTypecarries#[derive(prax_orm::Model)](which emits bothModelandFromRow) or hand-writtenimpl Model + impl FromRow. - For ad-hoc typed queries without a full
Model, bridge throughcrate::row_ref::SqliteRowRef::from_rusqliteinside a customFromRowimpl. - For the legacy JSON-blob API, use
crate::raw::SqliteRawEngine+crate::raw::SqliteJsonRow. - To run side-effecting SQL that returns no rows, call
prax_query::traits::QueryEngine::execute_raw.
See CHANGELOG.md for the full migration guide.
§Transaction mode
SqliteEngine has two modes, controlled by tx_conn:
- Pool mode (
tx_conn == None, default): each query acquires a freshSqliteConnectionfrom the pool and drops it after the call. - Transaction mode (
tx_conn == Some(..)): each query routes through the sametokio_rusqlite::Connectionhandle so the whole BEGIN…COMMIT block serialises onto the connection’s background thread in order. TheArc<SqliteConnection>keeps the pool permit alive for the transaction’s lifetime; dropping the last clone returns the connection to the idle pool.
Implementations§
Source§impl SqliteEngine
impl SqliteEngine
Sourcepub fn new(pool: SqlitePool) -> Self
pub fn new(pool: SqlitePool) -> Self
Create a new engine with the given pool.
Sourcepub fn pool(&self) -> &SqlitePool
pub fn pool(&self) -> &SqlitePool
Get a reference to the connection pool.
Trait Implementations§
Source§impl Clone for SqliteEngine
impl Clone for SqliteEngine
Source§fn clone(&self) -> SqliteEngine
fn clone(&self) -> SqliteEngine
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl QueryEngine for SqliteEngine
impl QueryEngine for SqliteEngine
Source§fn dialect(&self) -> &dyn SqlDialect
fn dialect(&self) -> &dyn SqlDialect
The SQL dialect this engine targets. Read more
Source§fn query_many<T: Model + FromRow + Send + 'static>(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<Vec<T>>>
fn query_many<T: Model + FromRow + Send + 'static>( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<Vec<T>>>
Execute a SELECT query and return rows.
Source§fn query_one<T: Model + FromRow + Send + 'static>(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<T>>
fn query_one<T: Model + FromRow + Send + 'static>( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<T>>
Execute a SELECT query expecting one result.
Source§fn query_optional<T: Model + FromRow + Send + 'static>(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<Option<T>>>
fn query_optional<T: Model + FromRow + Send + 'static>( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<Option<T>>>
Execute a SELECT query expecting zero or one result.
Source§fn execute_insert<T: Model + FromRow + Send + 'static>(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<T>>
fn execute_insert<T: Model + FromRow + Send + 'static>( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<T>>
Execute an INSERT query and return the created row.
Source§fn execute_update<T: Model + FromRow + Send + 'static>(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<Vec<T>>>
fn execute_update<T: Model + FromRow + Send + 'static>( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<Vec<T>>>
Execute an UPDATE query and return affected rows.
Source§fn execute_delete(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<u64>>
fn execute_delete( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<u64>>
Execute a DELETE query and return affected rows count.
Source§fn execute_raw(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<u64>>
fn execute_raw( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<u64>>
Execute a raw SQL query.
Source§fn count(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<u64>>
fn count( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<u64>>
Get a count of records.
Source§fn aggregate_query(
&self,
sql: &str,
params: Vec<FilterValue>,
) -> BoxFuture<'_, QueryResult<Vec<HashMap<String, FilterValue>>>>
fn aggregate_query( &self, sql: &str, params: Vec<FilterValue>, ) -> BoxFuture<'_, QueryResult<Vec<HashMap<String, FilterValue>>>>
Execute an aggregate query (COUNT/SUM/AVG/MIN/MAX/GROUP BY) and
return one map of column name →
crate::filter::FilterValue
per result row. Read moreSource§fn transaction<'a, R, Fut, F>(&'a self, f: F) -> BoxFuture<'a, QueryResult<R>>
fn transaction<'a, R, Fut, F>(&'a self, f: F) -> BoxFuture<'a, QueryResult<R>>
Run the closure inside a transaction. Read more
Source§fn refresh_materialized_view(
&self,
view_name: &str,
concurrently: bool,
) -> Pin<Box<dyn Future<Output = Result<(), QueryError>> + Send + '_>>
fn refresh_materialized_view( &self, view_name: &str, concurrently: bool, ) -> Pin<Box<dyn Future<Output = Result<(), QueryError>> + Send + '_>>
Refresh a materialized view. Read more
Source§fn in_transaction(&self) -> bool
fn in_transaction(&self) -> bool
Whether this engine is currently executing inside an open
transaction. Read more
impl SupportsGeneratedColumns for SqliteEngine
impl SupportsJsonPath for SqliteEngine
impl SupportsNestedWrites for SqliteEngine
impl SupportsRelationFilter for SqliteEngine
impl SupportsScalarSubqueryInSelect for SqliteEngine
Auto Trait Implementations§
impl !RefUnwindSafe for SqliteEngine
impl !UnwindSafe for SqliteEngine
impl Freeze for SqliteEngine
impl Send for SqliteEngine
impl Sync for SqliteEngine
impl Unpin for SqliteEngine
impl UnsafeUnpin for SqliteEngine
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> ProcedureEngine for Twhere
T: QueryEngine + Clone + 'static,
impl<T> ProcedureEngine for Twhere
T: QueryEngine + Clone + 'static,
Source§fn execute_procedure(
&self,
call: ProcedureCall,
) -> Pin<Box<dyn Future<Output = Result<ProcedureResult, QueryError>> + Send + '_>>where
Self: Clone + 'static,
fn execute_procedure(
&self,
call: ProcedureCall,
) -> Pin<Box<dyn Future<Output = Result<ProcedureResult, QueryError>> + Send + '_>>where
Self: Clone + 'static,
Execute a procedure call.