Struct sqlx::query::Query

source ·
pub struct Query<'q, DB, A>
where DB: Database,
{ /* private fields */ }
Expand description

A single SQL query as a prepared statement. Returned by query().

Implementations§

source§

impl<'q, DB> Query<'q, DB, <DB as Database>::Arguments<'q>>
where DB: Database,

source

pub fn bind<T>(self, value: T) -> Query<'q, DB, <DB as Database>::Arguments<'q>>
where T: 'q + Encode<'q, DB> + Type<DB>,

Bind a value for use with this SQL query.

If the number of times this is called does not match the number of bind parameters that appear in the query (? for most SQL flavors, $1 .. $N for Postgres) then an error will be returned when this query is executed.

There is no validation that the value is of the type expected by the query. Most SQL flavors will perform type coercion (Postgres will return a database error).

If encoding the value fails, the error is stored and later surfaced when executing the query.

source

pub fn try_bind<T>( &mut self, value: T, ) -> Result<(), Box<dyn Error + Sync + Send>>
where T: 'q + Encode<'q, DB> + Type<DB>,

Like Query::try_bind but immediately returns an error if encoding the value failed.

source§

impl<'q, DB, A> Query<'q, DB, A>

source

pub fn persistent(self, value: bool) -> Query<'q, DB, A>

If true, the statement will get prepared once and cached to the connection’s statement cache.

If queried once with the flag set to true, all subsequent queries matching the one with the flag will use the cached statement until the cache is cleared.

If false, the prepared statement will be closed after execution.

Default: true.

source§

impl<'q, DB, A> Query<'q, DB, A>
where A: Send + 'q + IntoArguments<'q, DB>, DB: Database,

source

pub fn map<F, O>( self, f: F, ) -> Map<'q, DB, impl FnMut(<DB as Database>::Row) + Send, A>
where F: FnMut(<DB as Database>::Row) -> O + Send, O: Unpin,

Map each row in the result to another type.

See try_map for a fallible version of this method.

The query_as method will construct a mapped query using a FromRow implementation.

source

pub fn try_map<F, O>(self, f: F) -> Map<'q, DB, F, A>
where F: FnMut(<DB as Database>::Row) -> Result<O, Error> + Send, O: Unpin,

Map each row in the result to another type.

The query_as method will construct a mapped query using a FromRow implementation.

source

pub async fn execute<'e, 'c, E>( self, executor: E, ) -> Result<<DB as Database>::QueryResult, Error>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

Execute the query and return the total number of rows affected.

source

pub async fn execute_many<'e, 'c, E>( self, executor: E, ) -> Pin<Box<dyn Stream<Item = Result<<DB as Database>::QueryResult, Error>> + Send + 'e>>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

👎Deprecated: Only the SQLite driver supports multiple statements in one prepared statement and that behavior is deprecated. Use sqlx::raw_sql() instead. See https://github.com/launchbadge/sqlx/issues/3108 for discussion.

Execute multiple queries and return the rows affected from each query, in a stream.

source

pub fn fetch<'e, 'c, E>( self, executor: E, ) -> Pin<Box<dyn Stream<Item = Result<<DB as Database>::Row, Error>> + Send + 'e>>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

Execute the query and return the generated results as a stream.

source

pub fn fetch_many<'e, 'c, E>( self, executor: E, ) -> Pin<Box<dyn Stream<Item = Result<Either<<DB as Database>::QueryResult, <DB as Database>::Row>, Error>> + Send + 'e>>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

👎Deprecated: Only the SQLite driver supports multiple statements in one prepared statement and that behavior is deprecated. Use sqlx::raw_sql() instead. See https://github.com/launchbadge/sqlx/issues/3108 for discussion.

Execute multiple queries and return the generated results as a stream.

For each query in the stream, any generated rows are returned first, then the QueryResult with the number of rows affected.

source

pub async fn fetch_all<'e, 'c, E>( self, executor: E, ) -> Result<Vec<<DB as Database>::Row>, Error>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

Execute the query and return all the resulting rows collected into a Vec.

§Note: beware result set size.

This will attempt to collect the full result set of the query into memory.

To avoid exhausting available memory, ensure the result set has a known upper bound, e.g. using LIMIT.

source

pub async fn fetch_one<'e, 'c, E>( self, executor: E, ) -> Result<<DB as Database>::Row, Error>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

Execute the query, returning the first row or Error::RowNotFound otherwise.

§Note: for best performance, ensure the query returns at most one row.

Depending on the driver implementation, if your query can return more than one row, it may lead to wasted CPU time and bandwidth on the database server.

Even when the driver implementation takes this into account, ensuring the query returns at most one row can result in a more optimal query plan.

If your query has a WHERE clause filtering a unique column by a single value, you’re good.

Otherwise, you might want to add LIMIT 1 to your query.

source

pub async fn fetch_optional<'e, 'c, E>( self, executor: E, ) -> Result<Option<<DB as Database>::Row>, Error>
where 'c: 'e, 'q: 'e, A: 'e, E: Executor<'c, Database = DB>,

Execute the query, returning the first row or None otherwise.

§Note: for best performance, ensure the query returns at most one row.

Depending on the driver implementation, if your query can return more than one row, it may lead to wasted CPU time and bandwidth on the database server.

Even when the driver implementation takes this into account, ensuring the query returns at most one row can result in a more optimal query plan.

If your query has a WHERE clause filtering a unique column by a single value, you’re good.

Otherwise, you might want to add LIMIT 1 to your query.

Trait Implementations§

source§

impl<'q, DB, A> Execute<'q, DB> for Query<'q, DB, A>
where DB: Database, A: Send + IntoArguments<'q, DB>,

source§

fn sql(&self) -> &'q str

Gets the SQL that will be executed.
source§

fn statement(&self) -> Option<&<DB as Database>::Statement<'q>>

Gets the previously cached statement, if available.
source§

fn take_arguments( &mut self, ) -> Result<Option<<DB as Database>::Arguments<'q>>, Box<dyn Error + Sync + Send>>

Returns the arguments to be bound against the query string. Read more
source§

fn persistent(&self) -> bool

Returns true if the statement should be cached.

Auto Trait Implementations§

§

impl<'q, DB, A> Freeze for Query<'q, DB, A>
where A: Freeze,

§

impl<'q, DB, A> !RefUnwindSafe for Query<'q, DB, A>

§

impl<'q, DB, A> Send for Query<'q, DB, A>
where A: Send,

§

impl<'q, DB, A> Sync for Query<'q, DB, A>
where DB: Sync, A: Sync,

§

impl<'q, DB, A> Unpin for Query<'q, DB, A>
where DB: Unpin, A: Unpin,

§

impl<'q, DB, A> !UnwindSafe for Query<'q, DB, A>

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<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.
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