pub struct PgEngine { /* private fields */ }Expand description
PostgreSQL query engine that implements the Prax QueryEngine
trait.
Two modes, controlled by the tx_conn field:
- Pool mode (
tx_conn == None, the default): each query acquires a fresh connection fromPgPooland drops it after the call. - Transaction mode (
tx_conn == Some(conn)): each query routes through the single pinneddeadpool_postgres::Object. The tx-bound engine is built byPgEngine::transaction, which issues a rawBEGIN; the outer future then runsCOMMITorROLLBACKon the same connection based on the closure’sOk/Errresult.
We lean on raw BEGIN / COMMIT / ROLLBACK strings instead of
tokio_postgres::Transaction<'_> because Transaction<'_> borrows
from its owning Client, and bundling both into a heap cell
requires mem::transmute gymnastics to launder the lifetime to
'static. Since Object implements Deref<Target = Client> and
Client::query / execute take &self, an Arc<Object> is all
we need — every engine clone can share it freely, and the last
clone drops the Arc, which drops the Object back to the pool.
This path is explicitly sanctioned by the task plan’s “fall back”
guardrail.
Implementations§
Trait Implementations§
Source§impl QueryEngine for PgEngine
impl QueryEngine for PgEngine
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
Auto Trait Implementations§
impl Freeze for PgEngine
impl !RefUnwindSafe for PgEngine
impl Send for PgEngine
impl Sync for PgEngine
impl Unpin for PgEngine
impl UnsafeUnpin for PgEngine
impl !UnwindSafe for PgEngine
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.