Skip to main content

AnyColumnBuffer

Trait AnyColumnBuffer 

Source
pub trait AnyColumnBuffer:
    ColumnBuffer
    + Any
    + Send { }
Expand description

A ColumnBuffer that additionally carries runtime type information, so a trait object can be downcast to the concrete buffer type it was constructed from. Intended for ColumnarBuffer with heterogenous columns, i.e. integer and text columns.

This trait also inherits fromSend so we can use it in concurrent bulk fetches using double buffering in multiple threads. Currently there are no buffer implementations which are not Send. So a distinction between Send and non-Send buffers is assumed to cause more friction rather than being helpful.

Trait Implementations§

Source§

impl CData for Box<dyn AnyColumnBuffer>

Source§

fn cdata_type(&self) -> CDataType

The identifier of the C data type of the value buffer. When it is retrieving data from the data source with fetch, the driver converts the data to this type. When it sends data to the source, the driver converts the data from this type.
Source§

fn indicator_ptr(&self) -> *const isize

Indicates the length of variable sized types. May be zero for fixed sized types. Used to determine the size or existence of input parameters.
Source§

fn value_ptr(&self) -> *const c_void

Pointer to a value corresponding to the one described by cdata_type.
Source§

fn buffer_length(&self) -> isize

Maximum length of the type in bytes (not characters). It is required to index values in bound buffers, if more than one parameter is bound. Can be set to zero for types not bound as parameter arrays, i.e. CStr.
Source§

impl CDataMut for Box<dyn AnyColumnBuffer>

Source§

fn mut_indicator_ptr(&mut self) -> *mut isize

Indicates the length of variable sized types. May be zero for fixed sized types.
Source§

fn mut_value_ptr(&mut self) -> *mut c_void

Pointer to a value corresponding to the one described by cdata_type.
Source§

impl ColumnBuffer for Box<dyn AnyColumnBuffer>

Source§

fn capacity(&self) -> usize

Current capacity of the column
Source§

fn has_truncated_values(&self, num_rows: usize) -> Option<Indicator>

Some if any value is truncated in the range [0, num_rows). Read more
Source§

impl Slice for Box<dyn AnyColumnBuffer>

Source§

type Slice<'a> = AnyColumnBufferSlice<'a>

Immutable view on the column data. Used in safe abstractions. User must not be able to access uninitialized or invalid memory of the buffer through this interface.
Source§

fn slice(&self, valid_rows: usize) -> AnyColumnBufferSlice<'_>

Num rows may not exceed the actual amount of valid num_rows filled by the ODBC API. The column buffer does not know how many elements were in the last row group, and therefore can not guarantee the accessed element to be valid and in a defined state. It also can not panic on accessing an undefined element.

Implementors§

Source§

impl<T> AnyColumnBuffer for T
where T: ColumnBuffer + Any + Send,