pub mod mimer_options {
use mimerrust_sys as ffi;
#[derive(PartialEq, Clone, Copy)]
pub enum CursorMode {
Forward = ffi::MIMER_FORWARD_ONLY as isize,
Scrollable = ffi::MIMER_SCROLLABLE as isize,
}
#[derive(PartialEq, Clone, Copy)]
pub enum ScrollOption {
NEXT,
PREVIOUS,
RELATIVE,
ABSOLUTE,
FIRST,
LAST,
}
impl ScrollOption {
pub(crate) fn to_c_int(&self) -> i32 {
match self {
ScrollOption::NEXT => ffi::MIMER_NEXT as i32,
ScrollOption::PREVIOUS => ffi::MIMER_PREVIOUS as i32,
ScrollOption::RELATIVE => ffi::MIMER_RELATIVE as i32,
ScrollOption::ABSOLUTE => ffi::MIMER_ABSOLUTE as i32,
ScrollOption::FIRST => ffi::MIMER_FIRST as i32,
ScrollOption::LAST => ffi::MIMER_LAST as i32,
}
}
}
#[derive(PartialEq, Clone, Copy)]
pub enum TransactionMode {
ReadOnly = ffi::MIMER_TRANS_READONLY as isize,
ReadWrite = ffi::MIMER_TRANS_READWRITE as isize,
}
#[derive(PartialEq, Clone, Copy)]
pub enum EndTransactionMode {
Rollback = ffi::MIMER_ROLLBACK as isize,
Commit = ffi::MIMER_COMMIT as isize,
}
#[derive(PartialEq, Clone, Copy, Debug)]
pub enum ParameterMode {
IN = 1,
OUT = 2,
INOUT = 3,
}
pub const BSI_4K: i32 = ffi::BSI_4K_PAGES as i32;
pub const BSI_32K: i32 = ffi::BSI_32K_PAGES as i32;
pub const BSI_128K: i32 = ffi::BSI_128K_PAGES as i32;
pub const BSI_4K_USED: i32 = ffi::BSI_4K_PAGES_USED as i32;
pub const BSI_32K_USED: i32 = ffi::BSI_32K_PAGES_USED as i32;
pub const BSI_128K_USED: i32 = ffi::BSI_128K_PAGES_USED as i32;
pub const BSI_PAGES_USED: i32 = ffi::BSI_PAGES_USED as i32;
}
pub mod traits {
use mimerrust_sys as ffi;
use parking_lot::MappedMutexGuard;
pub(crate) enum MimerHandle<'a> {
Session(MappedMutexGuard<'a, ffi::MimerSession>),
Statement(MappedMutexGuard<'a, ffi::MimerStatement>),
}
pub(crate) trait GetHandle {
fn get_handle(&self) -> Result<MimerHandle, i32> {
Err(-26100)
}
fn get_session_handle(&self) -> Result<Option<MappedMutexGuard<ffi::MimerSession>>, i32> {
Ok(None)
}
fn get_statement_handle(
&self,
) -> Result<Option<MappedMutexGuard<ffi::MimerStatement>>, i32> {
Ok(None)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::common::mimer_options::CursorMode;
use crate::testing::*;
#[test]
fn get_handle() {
let mut conn = establish_connection();
drop_create_table(&conn, EXAMPLE_TABLE, EXAMPLE_TABLE_COLUMNS);
let stmnt = conn
.prepare("select * from test_table", CursorMode::Forward)
.unwrap();
assert!(conn.get_session_handle().unwrap().is_some());
assert!(stmnt.get_statement_handle().unwrap().is_some());
}
}
}
pub mod return_codes {
use mimerrust_sys as ffi;
pub const MIMER_SUCCESS: &i32 = &(ffi::MIMER_SUCCESS as i32);
}