use crate::{Error, handles::Statement, parameter::InputParameter};
mod tuple;
pub use tuple::ParameterTupleElement;
pub unsafe trait InputParameterCollection {
fn parameter_set_size(&self) -> usize;
unsafe fn bind_input_parameters_to(&self, stmt: &mut impl Statement) -> Result<(), Error>;
}
unsafe impl<T> ParameterCollectionRef for &T
where
T: InputParameterCollection + ?Sized,
{
fn parameter_set_size(&self) -> usize {
(**self).parameter_set_size()
}
unsafe fn bind_parameters_to(&mut self, stmt: &mut impl Statement) -> Result<(), Error> {
unsafe { self.bind_input_parameters_to(stmt) }
}
}
unsafe impl<T> InputParameterCollection for T
where
T: InputParameter + ?Sized,
{
fn parameter_set_size(&self) -> usize {
1
}
unsafe fn bind_input_parameters_to(&self, stmt: &mut impl Statement) -> Result<(), Error> {
self.assert_completness();
unsafe { stmt.bind_input_parameter(1, self) }.into_result(stmt)
}
}
unsafe impl<T> InputParameterCollection for [T]
where
T: InputParameter,
{
fn parameter_set_size(&self) -> usize {
1
}
unsafe fn bind_input_parameters_to(&self, stmt: &mut impl Statement) -> Result<(), Error> {
for (index, parameter) in self.iter().enumerate() {
parameter.assert_completness();
unsafe { stmt.bind_input_parameter(index as u16 + 1, parameter) }.into_result(stmt)?;
}
Ok(())
}
}
pub unsafe trait ParameterCollectionRef {
fn parameter_set_size(&self) -> usize;
unsafe fn bind_parameters_to(&mut self, stmt: &mut impl Statement) -> Result<(), Error>;
}
unsafe impl<T> ParameterCollectionRef for &mut T
where
T: ParameterCollection,
{
fn parameter_set_size(&self) -> usize {
(**self).parameter_set_size()
}
unsafe fn bind_parameters_to(&mut self, stmt: &mut impl Statement) -> Result<(), Error> {
unsafe { (**self).bind_parameters_to(stmt) }
}
}
pub unsafe trait ParameterCollection {
fn parameter_set_size(&self) -> usize;
unsafe fn bind_parameters_to(&mut self, stmt: &mut impl Statement) -> Result<(), Error>;
}
unsafe impl<T> ParameterCollection for T
where
T: InputParameterCollection + ?Sized,
{
fn parameter_set_size(&self) -> usize {
(*self).parameter_set_size()
}
unsafe fn bind_parameters_to(&mut self, stmt: &mut impl Statement) -> Result<(), Error> {
unsafe { self.bind_input_parameters_to(stmt) }
}
}