Struct odbc_api::parameter::VarBinary [−][src]
pub struct VarBinary<B> { /* fields omitted */ }Binds a byte array as Variadic sized binary data. It can not be used for columnar bulk fetches, but if the buffer type is stack allocated it can be utilized in row wise bulk fetches.
Meaningful instantiations of this type are:
self::VarBinarySlice- immutable borrowed parameter.self::VarBinarySliceMut- mutable borrowed input / output parameterself::VarBinaryArray- stack allocated owned input / output parameterself::VarBinaryBox- heap allocated owned input /output parameter
Implementations
impl<B> VarBinary<B> where
B: Borrow<[u8]>, [src]
impl<B> VarBinary<B> where
B: Borrow<[u8]>, [src]pub fn from_buffer(buffer: B, indicator: Indicator) -> Self[src]
Creates a new instance from an existing buffer.
pub fn as_bytes(&self) -> Option<&[u8]>[src]
Valid payload of the buffer returned as slice or None in case the indicator is
NULL_DATA.
pub fn is_complete(&self) -> bool[src]
Call this method to ensure that the entire field content did fit into the buffer. If you
retrieve a field using crate::CursorRow::get_data, you can repeat the call until this
method is false to read all the data.
use odbc_api::{CursorRow, parameter::VarBinaryArray, Error, handles::Statement}; fn process_large_binary<S: Statement>( col_index: u16, row: &mut CursorRow<S> ) -> Result<(), Error>{ let mut buf = VarBinaryArray::<512>::NULL; row.get_data(col_index, &mut buf)?; while !buf.is_complete() { // Process bytes in stream without allocation. We can assume repeated calls to // get_data do not return `None` since it would have done so on the first call. process_slice(buf.as_bytes().unwrap()); } Ok(()) } fn process_slice(text: &[u8]) { /*...*/}
pub fn indicator(&self) -> Indicator[src]
Read access to the underlying ODBC indicator. After data has been fetched the indicator
value is set to the length the buffer should have had to hold the entire value. It may also
be Indicator::Null to indicate NULL or Indicator::NoTotal which tells us the data
source does not know how big the buffer must be to hold the complete value.
Indicator::NoTotal implies that the content of the current buffer is valid up to its
maximum capacity.
impl<B> VarBinary<B> where
B: Borrow<[u8]>, [src]
impl<B> VarBinary<B> where
B: Borrow<[u8]>, [src]pub fn hide_truncation(&mut self)[src]
Call this method to reset the indicator to a value which matches the length returned by the
Self::as_bytes method. This is useful if you want to insert values into the database
despite the fact, that they might have been truncated.
Trait Implementations
impl<B> CData for VarBinary<B> where
B: Borrow<[u8]>, [src]
impl<B> CData for VarBinary<B> where
B: Borrow<[u8]>, [src]fn cdata_type(&self) -> CDataType[src]
fn indicator_ptr(&self) -> *const isize[src]
fn value_ptr(&self) -> *const c_void[src]
fn buffer_length(&self) -> isize[src]
impl<B> CDataMut for VarBinary<B> where
B: BorrowMut<[u8]>, [src]
impl<B> CDataMut for VarBinary<B> where
B: BorrowMut<[u8]>, [src]fn mut_indicator_ptr(&mut self) -> *mut isize[src]
fn mut_value_ptr(&mut self) -> *mut c_void[src]
Auto Trait Implementations
impl<B> RefUnwindSafe for VarBinary<B> where
B: RefUnwindSafe,
impl<B> RefUnwindSafe for VarBinary<B> where
B: RefUnwindSafe, impl<B> UnwindSafe for VarBinary<B> where
B: UnwindSafe,
impl<B> UnwindSafe for VarBinary<B> where
B: UnwindSafe,