pub unsafe trait VarKind {
    type Element: Copy + Eq;

    const ZERO: Self::Element;
    const TERMINATING_ZEROES: usize;
    const C_DATA_TYPE: CDataType;

    // Required method
    fn relational_type(buffer_length: usize) -> DataType;
}
Expand description

A tag used to differentiate between different types of variadic buffers.

Safety

  • Self::TERMINATING_ZEROES is used to calculate buffer offsets. The number of terminating zeroes is expressed in BufferElements.
  • Self::C_DATA_TYPE is used to bind parameters. Providing wrong values like e.g. a fixed length types, would cause even a correctly implemented odbc driver to access invalid memory.

Required Associated Types§

source

type Element: Copy + Eq

Either u8 for binary and narrow text or u16 for wide text. Wide text could also be represented as u8, after all everything is bytes. This makes it difficult though to create owned VarCell types from u16 buffers.

Required Associated Constants§

source

const ZERO: Self::Element

Zero for buffer element.

source

const TERMINATING_ZEROES: usize

Number of terminating zeroes required for this kind of variadic buffer.

source

const C_DATA_TYPE: CDataType

Required Methods§

source

fn relational_type(buffer_length: usize) -> DataType

Relational type used to bind the parameter. buffer_length is specified in elements rather than bytes, if the two differ.

Implementors§

source§

impl VarKind for Binary

§

type Element = u8

source§

const ZERO: u8 = 0u8

source§

const TERMINATING_ZEROES: usize = 0usize

source§

const C_DATA_TYPE: CDataType = CDataType::Binary

source§

impl VarKind for Text

§

type Element = u8

source§

const ZERO: u8 = 0u8

source§

const TERMINATING_ZEROES: usize = 1usize

source§

const C_DATA_TYPE: CDataType = CDataType::Char