pub struct SqliteBindCollector<'a> { /* private fields */ }Available on crate features
__sqlite-shared and i-implement-a-third-party-backend-and-opt-into-breaking-changes only.Expand description
The BindCollector used by the SQLite backend.
You only interact with this when adding a third-party SQLite backend.
Implementations§
Source§impl<'a> SqliteBindCollector<'a>
impl<'a> SqliteBindCollector<'a>
Sourcepub fn binds(
&self,
) -> impl ExactSizeIterator<Item = (&SqliteBindValueRef<'a>, SqliteType)>
pub fn binds( &self, ) -> impl ExactSizeIterator<Item = (&SqliteBindValueRef<'a>, SqliteType)>
Iterate over the collected bind values and their SQLite storage classes, in positional order.
Each yielded tuple carries a reference to the SqliteBindValueRef as
it lives inside the collector, so borrowed string and blob variants are
exposed without an intervening copy. If the caller needs a
Send snapshot instead, use MoveableBindCollector::moveable
and inspect SqliteBindCollectorData.
§Example
A third-party backend can render a typed Diesel query into placeholder SQL and recover the ordered bind values:
use diesel::expression::IntoSql;
use diesel::query_builder::{QueryBuilder, QueryFragment};
use diesel::sql_types::{BigInt, Integer, Text};
use diesel::sqlite::{
Sqlite, SqliteBindCollector, SqliteBindValueRef, SqliteQueryBuilder, SqliteType,
};
fn render<Q: QueryFragment<Sqlite>>(query: &Q) -> (String, Vec<SqliteType>) {
let mut qb = SqliteQueryBuilder::new();
query.to_sql(&mut qb, &Sqlite).unwrap();
let mut collector = SqliteBindCollector::new();
query.collect_binds(&mut collector, &mut (), &Sqlite).unwrap();
let binds: Vec<(&SqliteBindValueRef<'_>, SqliteType)> = collector.binds().collect();
assert!(matches!(binds[0].0, SqliteBindValueRef::I32(1)));
assert!(matches!(binds[1].0, SqliteBindValueRef::I64(2)));
assert!(matches!(binds[2].0, SqliteBindValueRef::BorrowedString("hi")));
(qb.finish(), binds.iter().map(|(_, t)| *t).collect())
}
let query = diesel::select((
1_i32.into_sql::<Integer>(),
2_i64.into_sql::<BigInt>(),
"hi".into_sql::<Text>(),
));
let (sql, types) = render(&query);
assert!(sql.contains('?'));
assert_eq!(types, [SqliteType::Integer, SqliteType::Long, SqliteType::Text]);Trait Implementations§
Source§impl<'a> BindCollector<'a, Sqlite> for SqliteBindCollector<'a>
impl<'a> BindCollector<'a, Sqlite> for SqliteBindCollector<'a>
Source§type Buffer = SqliteBindValue<'a>
type Buffer = SqliteBindValue<'a>
The internal buffer type used by this bind collector
Source§fn push_bound_value<T, U>(
&mut self,
bind: &'a U,
metadata_lookup: &mut (),
) -> QueryResult<()>
fn push_bound_value<T, U>( &mut self, bind: &'a U, metadata_lookup: &mut (), ) -> QueryResult<()>
Serializes the given bind value, and collects the result.
Source§fn push_null_value(&mut self, metadata: SqliteType) -> QueryResult<()>
fn push_null_value(&mut self, metadata: SqliteType) -> QueryResult<()>
Push a null value with the given type information onto the bind collector
Source§impl<'a> Debug for SqliteBindCollector<'a>
impl<'a> Debug for SqliteBindCollector<'a>
Source§impl<'a> Default for SqliteBindCollector<'a>
impl<'a> Default for SqliteBindCollector<'a>
Source§fn default() -> SqliteBindCollector<'a>
fn default() -> SqliteBindCollector<'a>
Returns the “default value” for a type. Read more
Source§impl MoveableBindCollector<Sqlite> for SqliteBindCollector<'_>
impl MoveableBindCollector<Sqlite> for SqliteBindCollector<'_>
Source§type BindData = SqliteBindCollectorData
type BindData = SqliteBindCollectorData
Available on crate feature
i-implement-a-third-party-backend-and-opt-into-breaking-changes only.The movable bind data of this bind collector
Source§fn moveable(&self) -> Self::BindData
fn moveable(&self) -> Self::BindData
Available on crate feature
i-implement-a-third-party-backend-and-opt-into-breaking-changes only.Builds a movable version of the bind collector
Source§fn append_bind_data(&mut self, from: &Self::BindData)
fn append_bind_data(&mut self, from: &Self::BindData)
Available on crate feature
i-implement-a-third-party-backend-and-opt-into-breaking-changes only.Refill the bind collector with its bind data
Auto Trait Implementations§
impl<'a> Freeze for SqliteBindCollector<'a>
impl<'a> RefUnwindSafe for SqliteBindCollector<'a>
impl<'a> Send for SqliteBindCollector<'a>
impl<'a> Sync for SqliteBindCollector<'a>
impl<'a> Unpin for SqliteBindCollector<'a>
impl<'a> UnsafeUnpin for SqliteBindCollector<'a>
impl<'a> UnwindSafe for SqliteBindCollector<'a>
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> AggregateDistinct<Self>where
Self: DistinctDsl,
fn aggregate_distinct(self) -> AggregateDistinct<Self>where
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> AggregateAll<Self>where
Self: AllDsl,
fn aggregate_all(self) -> AggregateAll<Self>where
Self: AllDsl,
ALL modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> AggregateFilter<Self, P>
fn aggregate_filter<P>(self, f: P) -> AggregateFilter<Self, P>
Add an aggregate function filter Read more
Source§fn aggregate_order<O>(self, o: O) -> AggregateOrder<Self, O>where
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> AggregateOrder<Self, O>where
Self: OrderAggregateDsl<O>,
Add an aggregate function order Read more
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§impl<T> WindowExpressionMethods for T
impl<T> WindowExpressionMethods for T
Source§fn over(self) -> Over<Self>where
Self: OverDsl,
fn over(self) -> Over<Self>where
Self: OverDsl,
Turn a function call into a window function call Read more
Source§fn window_filter<P>(self, f: P) -> WindowFilter<Self, P>
fn window_filter<P>(self, f: P) -> WindowFilter<Self, P>
Add a filter to the current window function Read more
Source§fn partition_by<E>(self, expr: E) -> PartitionBy<Self, E>where
Self: PartitionByDsl<E>,
fn partition_by<E>(self, expr: E) -> PartitionBy<Self, E>where
Self: PartitionByDsl<E>,
Add a partition clause to the current window function Read more
Source§fn window_order<E>(self, expr: E) -> WindowOrder<Self, E>where
Self: OrderWindowDsl<E>,
fn window_order<E>(self, expr: E) -> WindowOrder<Self, E>where
Self: OrderWindowDsl<E>,
Add a order clause to the current window function Read more