pub struct Pool<DB: Database> { /* private fields */ }Expand description
An instrumented wrapper around sqlx::Pool that emits OpenTelemetry spans and metrics
for every database operation.
Create one via PoolBuilder:
let pool: Pool<Postgres> = PoolBuilder::from(sqlx_pool).build();All connections acquired from this pool inherit its shared attributes and metric instruments.
Implementations§
Source§impl<DB: Database> Pool<DB>
impl<DB: Database> Pool<DB>
Sourcepub async fn acquire(&self) -> Result<PoolConnection<DB>, Error>
pub async fn acquire(&self) -> Result<PoolConnection<DB>, Error>
Acquire a pooled connection instrumented for OpenTelemetry.
Records db.client.connection.wait_time (time spent waiting for a connection),
tracks db.client.connection.pending_requests, and increments
db.client.connection.timeouts on PoolTimedOut.
§Errors
Returns sqlx::Error if a connection cannot be obtained from the pool (e.g.
timeout, pool closed).
Sourcepub async fn begin(&self) -> Result<Transaction<'_, DB>, Error>
pub async fn begin(&self) -> Result<Transaction<'_, DB>, Error>
Begin a new transaction instrumented for OpenTelemetry.
§Errors
Returns sqlx::Error if beginning the transaction fails.
Sourcepub fn with_annotations(
&self,
annotations: QueryAnnotations,
) -> Annotated<'_, Self>
pub fn with_annotations( &self, annotations: QueryAnnotations, ) -> Annotated<'_, Self>
Return an annotated executor that attaches per-query semantic convention attributes to every span created by the next operation.
The returned wrapper borrows the pool and implements sqlx::Executor with the
same instrumentation, but with annotation values threaded through to span creation.
§Example
pool.with_annotations(QueryAnnotations::new()
.operation("SELECT")
.collection("users"))
.fetch_all("SELECT * FROM users")
.await?;Sourcepub fn with_operation(
&self,
operation: impl Into<String>,
collection: impl Into<String>,
) -> Annotated<'_, Self>
pub fn with_operation( &self, operation: impl Into<String>, collection: impl Into<String>, ) -> Annotated<'_, Self>
Shorthand for annotating the next operation with db.operation.name and
db.collection.name.
Equivalent to self.with_annotations(QueryAnnotations::new().operation(op).collection(coll)).
Trait Implementations§
Source§impl<'c, DB> Executor<'c> for &Pool<DB>
impl<'c, DB> Executor<'c> for &Pool<DB>
Source§fn execute<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<<DB as Database>::QueryResult, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn execute<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<<DB as Database>::QueryResult, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute the query and return the total number of rows affected.
Source§fn execute_many<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<<DB as Database>::QueryResult, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn execute_many<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<<DB as Database>::QueryResult, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute multiple queries and return the rows affected from each query, in a stream.
Source§fn fetch<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<<DB as Database>::Row, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn fetch<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<<DB as Database>::Row, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute the query and return the generated results as a stream.
Source§fn fetch_many<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<Either<<DB as Database>::QueryResult, <DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn fetch_many<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxStream<'e, Result<Either<<DB as Database>::QueryResult, <DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute multiple queries and return the generated results as a stream from each query, in a stream.
Source§fn fetch_all<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<Vec<<DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn fetch_all<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<Vec<<DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute the query and return all the generated results, collected into
a Vec.
Source§fn fetch_one<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<<DB as Database>::Row, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn fetch_one<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<<DB as Database>::Row, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute the query and returns exactly one row.
Source§fn fetch_optional<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<Option<<DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
fn fetch_optional<'e, 'q: 'e, E>(
self,
query: E,
) -> BoxFuture<'e, Result<Option<<DB as Database>::Row>, Error>>where
E: 'q + Execute<'q, DB>,
'c: 'e,
Execute the query and returns at most one row.
Source§fn prepare<'e, 'q: 'e>(
self,
query: &'q str,
) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>where
'c: 'e,
fn prepare<'e, 'q: 'e>(
self,
query: &'q str,
) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>where
'c: 'e,
Prepare the SQL query to inspect the type information of its parameters and results.
Be advised that when using the query, query_as, or query_scalar
functions, the query is transparently prepared and executed.
This explicit API is provided to allow access to the statement metadata available after it prepared but before the first row is returned.
Source§fn prepare_with<'e, 'q: 'e>(
self,
sql: &'q str,
parameters: &'e [<DB as Database>::TypeInfo],
) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>where
'c: 'e,
fn prepare_with<'e, 'q: 'e>(
self,
sql: &'q str,
parameters: &'e [<DB as Database>::TypeInfo],
) -> BoxFuture<'e, Result<<DB as Database>::Statement<'q>, Error>>where
'c: 'e,
Prepare the SQL query, with parameter type information, to inspect the type information about its parameters and results.
Only some database drivers (Postgres, MSSQL) can take advantage of this extra information to influence parameter type inference.
type Database = DB
Auto Trait Implementations§
impl<DB> Freeze for Pool<DB>
impl<DB> !RefUnwindSafe for Pool<DB>
impl<DB> Send for Pool<DB>
impl<DB> Sync for Pool<DB>
impl<DB> Unpin for Pool<DB>
impl<DB> UnsafeUnpin for Pool<DB>
impl<DB> !UnwindSafe for Pool<DB>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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