pub unsafe trait ParameterCollectionRef {
    // Required methods
    fn parameter_set_size(&self) -> usize;
    unsafe fn bind_parameters_to(
        &mut self,
        stmt: &mut impl Statement
    ) -> Result<(), Error>;
}
Expand description

SQL Parameters used to execute a query.

ODBC allows to place question marks (?) in the statement text as placeholders. For each such placeholder a parameter needs to be bound to the statement before executing it.

Examples

This trait is implemented by single parameters.

use odbc_api::{Environment, ConnectionOptions};

let env = Environment::new()?;

let mut conn = env.connect(
    "YourDatabase", "SA", "My@Test@Password1",
    ConnectionOptions::default()
)?;
let year = 1980;
if let Some(cursor) = conn.execute("SELECT year, name FROM Birthdays WHERE year > ?;", &year)? {
    // Use cursor to process query results.
}

Tuples of Parameters implement this trait, too.

use odbc_api::{Environment, ConnectionOptions};

let env = Environment::new()?;

let mut conn = env.connect(
    "YourDatabase", "SA", "My@Test@Password1",
    ConnectionOptions::default()
)?;
let too_old = 1980;
let too_young = 2000;
if let Some(cursor) = conn.execute(
    "SELECT year, name FROM Birthdays WHERE ? < year < ?;",
    (&too_old, &too_young),
)? {
    // Use cursor to congratulate only persons in the right age group...
}

And so do array slices of Parameters.

use odbc_api::{Environment, ConnectionOptions};

let env = Environment::new()?;

let mut conn = env.connect(
    "YourDatabase",
    "SA",
    "My@Test@Password1",
    ConnectionOptions::default()
)?;
let params = [1980, 2000];
if let Some(cursor) = conn.execute(
    "SELECT year, name FROM Birthdays WHERE ? < year < ?;",
    &params[..])?
{
    // Use cursor to process query results.
}

Safety

Instances of this type are passed by value, so this type can be implemented by both constant and mutabale references. Implementers should take care that the values bound by bind_parameters_to to the statement live at least for the Duration of self. The most straight forward way of achieving this is of course, to bind members.

Required Methods§

source

fn parameter_set_size(&self) -> usize

Number of values per parameter in the collection. This can be different from the maximum batch size a buffer may be able to hold. Returning 0 will cause the the query not to be executed.

source

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

Safety

On execution a statement may want to read/write to the bound paramaters. It is the callers responsibility that by then the buffers are either unbound from the statement or still valild.

Implementations on Foreign Types§

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement, F: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E, F)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement> ParameterCollectionRef for (A,)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement, F: ParameterTupleElement, G: ParameterTupleElement, H: ParameterTupleElement, I: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E, F, G, H, I)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<T> ParameterCollectionRef for &Twhere T: InputParameterCollection + ?Sized,

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement, F: ParameterTupleElement, G: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E, F, G)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement> ParameterCollectionRef for (A, B)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl ParameterCollectionRef for ()

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement, F: ParameterTupleElement, G: ParameterTupleElement, H: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E, F, G, H)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement> ParameterCollectionRef for (A, B, C)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<T> ParameterCollectionRef for &mut Twhere T: ParameterCollection,

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement, E: ParameterTupleElement, F: ParameterTupleElement, G: ParameterTupleElement, H: ParameterTupleElement, I: ParameterTupleElement, J: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D, E, F, G, H, I, J)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

source§

impl<A: ParameterTupleElement, B: ParameterTupleElement, C: ParameterTupleElement, D: ParameterTupleElement> ParameterCollectionRef for (A, B, C, D)

source§

fn parameter_set_size(&self) -> usize

source§

unsafe fn bind_parameters_to( &mut self, stmt: &mut impl Statement ) -> Result<(), Error>

Implementors§