#![allow(dead_code)]
pub(crate) mod ptr;
pub(crate) mod attr;
pub(crate) mod handle;
pub(crate) mod desc;
pub(crate) mod param;
#[cfg(feature="nonblocking")]
#[cfg_attr(docsrs, doc(cfg(feature="nonblocking")))]
pub mod futures;
pub(crate) use ptr::Ptr;
pub(crate) use handle::Handle;
pub(crate) use desc::Descriptor;
use libc::{size_t, c_void};
use crate::{Error, Result};
#[repr(align(4))]
pub(crate) struct Aligned<T>(T);
impl<T> Aligned<T> {
pub(crate) fn new(val: T) -> Self {
Self(val)
}
pub(crate) fn as_mut_ptr(&mut self) -> *mut T {
&mut self.0 as _
}
}
macro_rules! impl_from_aligned {
($($t:ty),+) => {
$(
impl From<Aligned<$t>> for $t {
fn from(aligned: Aligned<$t>) -> Self {
aligned.0
}
}
)+
};
}
impl_from_aligned![i8, u8, i16, u16];
pub(crate) const OCI_DEFAULT : u32 = 0;
pub(crate) const OCI_SUCCESS : i32 = 0;
pub(crate) const OCI_SUCCESS_WITH_INFO : i32 = 1;
pub(crate) const OCI_NEED_DATA : i32 = 99;
pub(crate) const OCI_NO_DATA : i32 = 100;
pub(crate) const OCI_ERROR : i32 = -1;
pub(crate) const OCI_INVALID_HANDLE : i32 = -2;
pub(crate) const OCI_STILL_EXECUTING : i32 = -3123;
pub(crate) const OCI_CONTINUE : i32 = -24200;
pub(crate) const NO_DATA_FOUND : i32 = 1403;
pub(crate) const OCI_ATTR_ROW_COUNT : u32 = 9;
pub(crate) const OCI_ATTR_PREFETCH_ROWS : u32 = 11;
pub(crate) const OCI_ATTR_PARAM_COUNT : u32 = 18; pub(crate) const OCI_ATTR_STMT_TYPE : u32 = 24;
pub(crate) const OCI_ATTR_STMTCACHESIZE : u32 = 176; pub(crate) const OCI_ATTR_BIND_COUNT : u32 = 190;
pub(crate) const OCI_ATTR_ROWS_FETCHED : u32 = 197;
pub(crate) const OCI_ATTR_STMT_IS_RETURNING : u32 = 218;
pub(crate) const OCI_ATTR_UB8_ROW_COUNT : u32 = 457;
pub(crate) const OCI_ATTR_INVISIBLE_COL : u32 = 461;
pub(crate) const OCI_ATTR_FIXUP_CALLBACK : u32 = 501;
pub(crate) const OCI_ATTR_CALL_TIMEOUT : u32 = 531;
pub(crate) const OCI_HTYPE_ENV : u32 = 1;
pub(crate) const OCI_HTYPE_ERROR : u32 = 2;
pub(crate) const OCI_HTYPE_SVCCTX : u32 = 3;
pub(crate) const OCI_HTYPE_STMT : u32 = 4;
pub(crate) const OCI_HTYPE_BIND : u32 = 5;
pub(crate) const OCI_HTYPE_DEFINE : u32 = 6;
pub(crate) const OCI_HTYPE_DESCRIBE : u32 = 7;
pub(crate) const OCI_HTYPE_SERVER : u32 = 8;
pub(crate) const OCI_HTYPE_SESSION : u32 = 9;
pub(crate) const OCI_HTYPE_AUTHINFO : u32 = OCI_HTYPE_SESSION;
pub(crate) const OCI_HTYPE_CPOOL : u32 = 26;
pub(crate) const OCI_HTYPE_SPOOL : u32 = 27;
#[repr(C)] pub struct OCIEnv { _private: [u8; 0] }
#[repr(C)] pub struct OCIError { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCISvcCtx { _private: [u8; 0] }
#[repr(C)] pub struct OCIStmt { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIBind { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIDefine { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIDescribe { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIServer { _private: [u8; 0] }
#[repr(C)] pub struct OCISession { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIRaw { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIAuthInfo { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCISPool { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCICPool { _private: [u8; 0] }
pub(crate) trait HandleType : OCIStruct {
fn get_type() -> u32;
}
macro_rules! impl_handle_type {
($($oci_handle:ty => $id:ident),+) => {
$(
impl HandleType for $oci_handle {
fn get_type() -> u32 { $id }
}
)+
};
}
impl_handle_type!{
OCIEnv => OCI_HTYPE_ENV,
OCIError => OCI_HTYPE_ERROR,
OCISvcCtx => OCI_HTYPE_SVCCTX,
OCIStmt => OCI_HTYPE_STMT,
OCIBind => OCI_HTYPE_BIND,
OCIDefine => OCI_HTYPE_DEFINE,
OCIDescribe => OCI_HTYPE_DESCRIBE,
OCIServer => OCI_HTYPE_SERVER,
OCISession => OCI_HTYPE_SESSION,
OCIAuthInfo => OCI_HTYPE_AUTHINFO,
OCICPool => OCI_HTYPE_CPOOL,
OCISPool => OCI_HTYPE_SPOOL
}
pub(crate) const OCI_DTYPE_LOB : u32 = 50; pub(crate) const OCI_DTYPE_RSET : u32 = 52; pub(crate) const OCI_DTYPE_PARAM : u32 = 53; pub(crate) const OCI_DTYPE_ROWID : u32 = 54; pub(crate) const OCI_DTYPE_FILE : u32 = 56; pub(crate) const OCI_DTYPE_LOCATOR : u32 = 61; pub(crate) const OCI_DTYPE_INTERVAL_YM : u32 = 62; pub(crate) const OCI_DTYPE_INTERVAL_DS : u32 = 63; pub(crate) const OCI_DTYPE_TIMESTAMP : u32 = 68; pub(crate) const OCI_DTYPE_TIMESTAMP_TZ : u32 = 69; pub(crate) const OCI_DTYPE_TIMESTAMP_LTZ : u32 = 70;
#[repr(C)] pub(crate) struct OCIResult { _private: [u8; 0] }
#[repr(C)] pub struct OCILobLocator { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCILobRegion { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIParam { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIRowid { _private: [u8; 0] }
#[repr(C)] pub struct OCIDateTime { _private: [u8; 0] }
#[repr(C)] pub struct OCIInterval { _private: [u8; 0] }
#[repr(C)] pub(crate) struct OCIString { _private: [u8; 0] }
pub struct OCICLobLocator {}
pub struct OCIBLobLocator {}
pub struct OCIBFileLocator {}
pub struct OCITimestamp {}
pub struct OCITimestampTZ {}
pub struct OCITimestampLTZ {}
pub struct OCIIntervalYearToMonth {}
pub struct OCIIntervalDayToSecond {}
pub trait SqlType {
fn sql_type() -> u16;
fn sql_null_type() -> u16 {
Self::sql_type()
}
}
macro_rules! impl_sql_type {
($($t:ty),+ => $sqlt:ident) => {
$(
impl SqlType for $t {
fn sql_type() -> u16 {
$sqlt
}
}
)+
};
}
pub(crate) use impl_sql_type;
pub trait DescriptorType : OCIStruct + SqlType {
type OCIType;
fn get_type() -> u32;
}
macro_rules! impl_descr_type {
($($oci_desc:ident => $id:ident, $sqlt:ident, $ret:ident),+) => {
$(
impl SqlType for $oci_desc {
fn sql_type() -> u16 { $sqlt }
}
impl DescriptorType for $oci_desc {
type OCIType = $ret;
fn get_type() -> u32 { $id }
}
)+
};
}
impl_descr_type!{
OCICLobLocator => OCI_DTYPE_LOB, SQLT_CLOB, OCILobLocator,
OCIBLobLocator => OCI_DTYPE_LOB, SQLT_BLOB, OCILobLocator,
OCIBFileLocator => OCI_DTYPE_FILE, SQLT_BFILE, OCILobLocator,
OCIParam => OCI_DTYPE_PARAM, SQLT_NON, OCIParam,
OCIRowid => OCI_DTYPE_ROWID, SQLT_RDD, OCIRowid,
OCITimestamp => OCI_DTYPE_TIMESTAMP, SQLT_TIMESTAMP, OCIDateTime,
OCITimestampTZ => OCI_DTYPE_TIMESTAMP_TZ, SQLT_TIMESTAMP_TZ, OCIDateTime,
OCITimestampLTZ => OCI_DTYPE_TIMESTAMP_LTZ, SQLT_TIMESTAMP_LTZ, OCIDateTime,
OCIIntervalYearToMonth => OCI_DTYPE_INTERVAL_YM, SQLT_INTERVAL_YM, OCIInterval,
OCIIntervalDayToSecond => OCI_DTYPE_INTERVAL_DS, SQLT_INTERVAL_DS, OCIInterval
}
pub trait OCIStruct {}
macro_rules! mark_as_oci {
($($t:ty),+) => {
$(
impl OCIStruct for $t {}
)+
};
}
mark_as_oci!(OCIEnv, OCIError, OCISvcCtx, OCIStmt, OCIBind, OCIDefine, OCIDescribe, OCIServer, OCISession, OCIAuthInfo, OCISPool, OCICPool);
mark_as_oci!(OCIResult, OCILobLocator, OCILobRegion, OCIParam, OCIRowid, OCIDateTime, OCIInterval, OCIString, OCIRaw);
mark_as_oci!(OCICLobLocator, OCIBLobLocator, OCIBFileLocator, OCITimestamp, OCITimestampTZ, OCITimestampLTZ, OCIIntervalYearToMonth, OCIIntervalDayToSecond);
#[repr(C)] pub struct OCINumber {
pub(crate) bytes: [u8; 22]
}
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct OCIDate {
pub(crate) year: i16, pub(crate) month: u8, pub(crate) day: u8, pub(crate) hour: u8, pub(crate) min: u8, pub(crate) sec: u8, }
mark_as_oci!(OCINumber, OCIDate);
pub(crate) const SQLT_CHR : u16 = 1; pub(crate) const SQLT_NUM : u16 = 2; pub(crate) const SQLT_INT : u16 = 3; pub(crate) const SQLT_FLT : u16 = 4; pub(crate) const SQLT_STR : u16 = 5; pub(crate) const SQLT_VNU : u16 = 6; pub(crate) const SQLT_PDN : u16 = 7; pub(crate) const SQLT_LNG : u16 = 8; pub(crate) const SQLT_VCS : u16 = 9; pub(crate) const SQLT_NON : u16 = 10; pub(crate) const SQLT_RID : u16 = 11; pub(crate) const SQLT_DAT : u16 = 12; pub(crate) const SQLT_VBI : u16 = 15; pub(crate) const SQLT_BFLOAT : u16 = 21; pub(crate) const SQLT_BDOUBLE : u16 = 22; pub(crate) const SQLT_BIN : u16 = 23; pub(crate) const SQLT_LBI : u16 = 24; pub(crate) const SQLT_UIN : u16 = 68; pub(crate) const SQLT_SLS : u16 = 91; pub(crate) const SQLT_LVC : u16 = 94; pub(crate) const SQLT_LVB : u16 = 95; pub(crate) const SQLT_AFC : u16 = 96; pub(crate) const SQLT_AVC : u16 = 97; pub(crate) const SQLT_IBFLOAT : u16 = 100; pub(crate) const SQLT_IBDOUBLE : u16 = 101; pub(crate) const SQLT_CUR : u16 = 102; pub(crate) const SQLT_RDD : u16 = 104; pub(crate) const SQLT_LAB : u16 = 105; pub(crate) const SQLT_OSL : u16 = 106;
pub(crate) const SQLT_NTY : u16 = 108; pub(crate) const SQLT_REF : u16 = 110; pub(crate) const SQLT_CLOB : u16 = 112; pub(crate) const SQLT_BLOB : u16 = 113; pub(crate) const SQLT_BFILE : u16 = 114; pub(crate) const SQLT_CFILE : u16 = 115; pub(crate) const SQLT_RSET : u16 = 116; pub(crate) const SQLT_NCO : u16 = 122; pub(crate) const SQLT_VST : u16 = 155; pub(crate) const SQLT_ODT : u16 = 156;
pub(crate) const SQLT_DATE : u16 = 184; pub(crate) const SQLT_TIME : u16 = 185; pub(crate) const SQLT_TIME_TZ : u16 = 186; pub(crate) const SQLT_TIMESTAMP : u16 = 187; pub(crate) const SQLT_TIMESTAMP_TZ : u16 = 188; pub(crate) const SQLT_INTERVAL_YM : u16 = 189; pub(crate) const SQLT_INTERVAL_DS : u16 = 190; pub(crate) const SQLT_TIMESTAMP_LTZ : u16 = 232;
pub(crate) const SQLT_PNTY : u16 = 241;
pub(crate) const SQLT_REC : u16 = 250; pub(crate) const SQLT_TAB : u16 = 251; pub(crate) const SQLT_BOL : u16 = 252;
pub(crate) const OCI_IND_NOTNULL : i16 = 0;
pub(crate) const OCI_IND_NULL : i16 = -1;
pub(crate) const SQLCS_IMPLICIT : u8 = 1;
pub(crate) const SQLCS_NCHAR : u8 = 2;
pub(crate) const OCI_DURATION_SESSION : u16 = 10;
pub(crate) const OCI_DURATION_STATEMENT : u16 = 13;
pub(crate) const AL32UTF8 : u16 = 873;
pub(crate) const UTF8 : u16 = 871;
pub(crate) const OCI_THREADED : u32 = 1;
pub(crate) const OCI_OBJECT : u32 = 2;
pub(crate) const OCI_ATTR_CACHE_OPT_SIZE : u32 = 34;
pub(crate) const OCI_ATTR_CACHE_MAX_SIZE : u32 = 35;
pub(crate) const OCI_ATTR_ENV_NLS_LANGUAGE : u32 = 424;
pub(crate) const OCI_ATTR_ENV_NLS_TERRITORY : u32 = 425;
pub(crate) const OCI_CRED_RDBMS : u32 = 1;
pub(crate) const OCI_CRED_EXT : u32 = 2;
pub(crate) const OCI_SPC_REINITIALIZE : u32 = 0x0001; pub(crate) const OCI_SPC_HOMOGENEOUS : u32 = 0x0002; pub(crate) const OCI_SPC_STMTCACHE : u32 = 0x0004; pub(crate) const OCI_SPC_NO_RLB : u32 = 0x0008;
pub(crate) const OCI_SPD_FORCE : u32 = 0x0001;
pub(crate) const OCI_SPOOL_ATTRVAL_WAIT : u8 = 0; pub(crate) const OCI_SPOOL_ATTRVAL_NOWAIT : u8 = 1; pub(crate) const OCI_SPOOL_ATTRVAL_FORCEGET : u8 = 2; pub(crate) const OCI_SPOOL_ATTRVAL_TIMEDWAIT: u8 = 3;
pub(crate) const OCI_SESSGET_SPOOL : u32 = 0x0001;
pub(crate) const OCI_SESSGET_STMTCACHE : u32 = 0x0004;
pub(crate) const OCI_SESSGET_SPOOL_MATCHANY : u32 = 0x0020;
pub(crate) const OCI_SESSGET_PURITY_NEW : u32 = 0x0040;
pub(crate) const OCI_SESSGET_PURITY_SELF : u32 = 0x0080;
pub(crate) const OCI_SESSGET_SYSDBA : u32 = 0x0100;
pub(crate) const OCI_SESSGET_CPOOL : u32 = 0x0200;
pub(crate) const OCI_SESSGET_MULTIPROPERTY_TAG : u32 = 0x0400;
pub(crate) const OCI_SESSRLS_RETAG : u32 = 0x0002;
pub(crate) const OCI_SESSRLS_MULTIPROPERTY_TAG : u32 = 0x0004;
pub(crate) const OCI_SERVER_NORMAL : u32 = 1;
pub(crate) const OCI_ATTR_NONBLOCKING_MODE : u32 = 3;
pub(crate) const OCI_ATTR_SERVER : u32 = 6;
pub(crate) const OCI_ATTR_SESSION : u32 = 7;
pub(crate) const OCI_ATTR_ROWID : u32 = 19;
pub(crate) const OCI_ATTR_USERNAME : u32 = 22;
pub(crate) const OCI_ATTR_PASSWORD : u32 = 23;
pub(crate) const OCI_ATTR_LOBEMPTY : u32 = 45;
pub(crate) const OCI_ATTR_SERVER_STATUS : u32 = 143;
pub(crate) const OCI_ATTR_CURRENT_SCHEMA : u32 = 224;
pub(crate) const OCI_ATTR_CLIENT_IDENTIFIER : u32 = 278;
pub(crate) const OCI_ATTR_MODULE : u32 = 366;
pub(crate) const OCI_ATTR_ACTION : u32 = 367;
pub(crate) const OCI_ATTR_CLIENT_INFO : u32 = 368;
pub(crate) const OCI_ATTR_COLLECT_CALL_TIME : u32 = 369;
pub(crate) const OCI_ATTR_CALL_TIME : u32 = 370;
pub(crate) const OCI_ATTR_DRIVER_NAME : u32 = 424;
pub(crate) const OCI_ATTR_DEFAULT_LOBPREFETCH_SIZE : u32 = 438;
pub(crate) const OCI_ATTR_LOB_REMOTE : u32 = 520;
pub(crate) const OCI_ATTR_LOB_TYPE : u32 = 591;
pub(crate) const OCI_ATTR_SPOOL_STMTCACHESIZE : u32 = 208; pub(crate) const OCI_ATTR_SPOOL_TIMEOUT : u32 = 308; pub(crate) const OCI_ATTR_SPOOL_GETMODE : u32 = 309; pub(crate) const OCI_ATTR_SPOOL_BUSY_COUNT : u32 = 310; pub(crate) const OCI_ATTR_SPOOL_OPEN_COUNT : u32 = 311; pub(crate) const OCI_ATTR_SPOOL_AUTH : u32 = 460; pub(crate) const OCI_ATTR_SPOOL_MAX_LIFETIME_SESSION : u32 = 490; pub(crate) const OCI_ATTR_SPOOL_WAIT_TIMEOUT : u32 = 506;
pub(crate) const OCI_ATTR_SPOOL_MAX_USE_SESSION : u32 = 580;
pub(crate) const OCI_ATTR_CONN_NOWAIT : u32 = 178;
pub(crate) const OCI_ATTR_CONN_BUSY_COUNT : u32 = 179;
pub(crate) const OCI_ATTR_CONN_OPEN_COUNT : u32 = 180;
pub(crate) const OCI_ATTR_CONN_TIMEOUT : u32 = 181;
pub(crate) const OCI_ATTR_STMT_STATE : u32 = 182;
pub(crate) const OCI_ATTR_CONN_MIN : u32 = 183;
pub(crate) const OCI_ATTR_CONN_MAX : u32 = 184;
pub(crate) const OCI_ATTR_CONN_INCR : u32 = 185;
pub(crate) const OCI_ERROR_MAXMSG_SIZE : usize = 3072;
pub(crate) const OCI_FETCH_NEXT : u16 = 2;
pub(crate) const OCI_TEMP_BLOB : u8 = 1;
pub(crate) const OCI_TEMP_CLOB : u8 = 2;
pub(crate) const OCI_FILE_READONLY : u8 = 1;
pub(crate) const OCI_LOB_READONLY : u8 = 1;
pub(crate) const OCI_LOB_READWRITE : u8 = 2;
pub(crate) const OCI_ONE_PIECE : u8 = 0;
pub(crate) const OCI_FIRST_PIECE : u8 = 1;
pub(crate) const OCI_NEXT_PIECE : u8 = 2;
pub(crate) const OCI_LAST_PIECE : u8 = 3;
pub(crate) const OCI_LOB_CONTENTTYPE_MAXSIZE : usize = 128;
pub(crate) const OCI_NTV_SYNTAX : u32 = 1;
pub(crate) const OCI_STMT_SELECT : u16 = 1;
pub(crate) const OCI_ATTR_DATA_SIZE : u32 = 1; pub(crate) const OCI_ATTR_DATA_TYPE : u32 = 2; pub(crate) const OCI_ATTR_NAME : u32 = 4; pub(crate) const OCI_ATTR_PRECISION : u32 = 5; pub(crate) const OCI_ATTR_SCALE : u32 = 6; pub(crate) const OCI_ATTR_IS_NULL : u32 = 7; pub(crate) const OCI_ATTR_TYPE_NAME : u32 = 8; pub(crate) const OCI_ATTR_SCHEMA_NAME : u32 = 9; pub(crate) const OCI_ATTR_CHARSET_FORM : u32 = 32;
pub(crate) const OCI_ATTR_COL_PROPERTIES : u32 = 104;
pub(crate) const OCI_ATTR_CHAR_SIZE : u32 = 286;
pub(crate) const OCI_ATTR_COL_PROPERTY_IS_IDENTITY : u8 = 0x01;
pub(crate) const OCI_ATTR_COL_PROPERTY_IS_GEN_ALWAYS : u8 = 0x02;
pub(crate) const OCI_ATTR_COL_PROPERTY_IS_GEN_BY_DEF_ON_NULL : u8 = 0x04;
#[derive(Debug)]
pub enum CharSetForm {
Undefined = 0,
Implicit = 1,
NChar = 2
}
pub enum Cache {
No = 0,
Yes = 1,
}
extern "C" {
fn OCIHandleAlloc(
parenth: *const OCIEnv,
hndlpp: *mut *mut c_void,
hndl_type: u32,
xtramem_sz: size_t,
usrmempp: *const c_void
) -> i32;
fn OCIHandleFree(
hndlp: *const c_void,
hnd_type: u32
) -> i32;
}
extern "C" {
fn OCIDescriptorAlloc(
parenth: *const OCIEnv,
descpp: *mut *mut c_void,
desc_type: u32,
xtramem_sz: size_t,
usrmempp: *const c_void
) -> i32;
fn OCIDescriptorFree(
descp: *mut c_void,
desc_type: u32
) -> i32;
}
extern "C" {
fn OCIAttrGet(
trgthndlp: *const c_void,
trghndltyp: u32,
attributep: *mut c_void,
sizep: *const u32,
attrtype: u32,
errhp: *const OCIError
) -> i32;
pub(crate) fn OCIAttrSet(
trgthndlp: *const c_void,
trghndltyp: u32,
attributep: *const c_void,
size: u32,
attrtype: u32,
errhp: *const OCIError
) -> i32;
}
extern "C" {
fn OCIParamGet(
hndlp: *const c_void,
htype: u32,
errhp: *const OCIError,
descr: *mut *mut c_void,
pos: u32
) -> i32;
}
extern "C" {
fn OCIClientVersion(
feature_release: *mut i32,
release_update: *mut i32,
release_update_revision: *mut i32,
increment: *mut i32,
ext: *mut i32,
);
pub(crate) fn OCIErrorGet(
hndlp: *const c_void,
recordno: u32,
sqlstate: *const c_void,
errcodep: *const i32,
bufp: *mut u8,
bufsiz: u32,
hnd_type: u32,
) -> i32;
}
extern "C" {
pub(crate) fn OCIEnvNlsCreate(
envhpp: *mut *mut OCIEnv,
mode: u32,
ctxp: *const c_void,
malocfp: *const c_void,
ralocfp: *const c_void,
mfreefp: *const c_void,
xtramemsz: size_t,
usrmempp: *const c_void,
charset: u16,
ncharset: u16
) -> i32;
}
extern "C" {
fn OCIServerAttach(
srvhp: *const OCIServer,
errhp: *const OCIError,
dblink: *const u8,
dblink_len: u32,
mode: u32
) -> i32;
fn OCIServerDetach(
srvhp: *const OCIServer,
errhp: *const OCIError,
mode: u32
) -> i32;
fn OCISessionBegin(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
userhp: *const OCISession,
credt: u32,
mode: u32
) -> i32;
fn OCISessionEnd(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
userhp: *const OCISession,
mode: u32
) -> i32;
fn OCIConnectionPoolCreate (
envhp: *const OCIEnv,
errhp: *const OCIError,
cpoolhp: *const OCICPool,
pool_name: *mut *const u8,
pool_name_len: *const u32,
dblink: *const u8,
dblink_len: u32,
conn_min: u32,
conn_max: u32,
conn_incr: u32,
username: *const u8,
username_len: u32,
password: *const u8,
password_len: u32,
mode: u32,
) -> i32;
fn OCIConnectionPoolDestroy (
spoolhp: *const OCICPool,
errhp: *const OCIError,
mode: u32,
) -> i32;
fn OCISessionPoolCreate (
envhp: *const OCIEnv,
errhp: *const OCIError,
spoolhp: *const OCISPool,
pool_name: *mut *const u8,
pool_name_len: *const u32,
conn_str: *const u8,
conn_str_len: u32,
sess_min: u32,
sess_max: u32,
sess_incr: u32,
userid: *const u8,
userid_len: u32,
password: *const u8,
password_len: u32,
mode: u32,
) -> i32;
fn OCISessionPoolDestroy (
spoolhp: *const OCISPool,
errhp: *const OCIError,
mode: u32,
) -> i32;
fn OCISessionGet(
envhp: *const OCIEnv,
errhp: *const OCIError,
svchp: *mut *mut OCISvcCtx,
authinfop: *const OCIAuthInfo,
dbname: *const u8,
dbname_len: u32,
taginfo: *const u8,
taginfolen: u32,
rettags: *mut *const u8,
rettagslen: *mut u32,
found: *const u8,
mode: u32
) -> i32;
pub(crate) fn OCISessionRelease(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
tag: *const u8,
taglen: u32,
mode: u32
) -> i32;
fn OCITransCommit(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
flags: u32
) -> i32;
fn OCITransRollback(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
flags: u32
) -> i32;
fn OCIPing(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
mode: u32
) -> i32;
}
extern "C" {
fn OCIStmtPrepare2(
svchp: *const OCISvcCtx,
stmthp: *mut *mut OCIStmt,
errhp: *const OCIError,
stmttext: *const u8,
stmt_len: u32,
key: *const u8,
keylen: u32,
language: u32,
mode: u32
) -> i32;
fn OCIStmtRelease(
stmtp: *const OCIStmt,
errhp: *const OCIError,
key: *const u8,
keylen: u32,
mode: u32
) -> i32;
fn OCIStmtGetBindInfo(
stmtp: *const OCIStmt,
errhp: *const OCIError,
size: u32,
startloc: u32,
found: *const i32,
bvnp: *mut *mut u8,
bvnl: *const u8,
invp: *mut *mut u8,
invl: *const u8,
dupl: *const u8,
hndl: *mut *mut OCIBind
) -> i32;
fn OCIBindByPos2(
stmtp: *const OCIStmt,
bindpp: *mut *mut OCIBind,
errhp: *const OCIError,
position: u32,
valuep: *const c_void,
value_sz: i64,
dty: u16,
indp: *const i16,
alenp: *const u32,
rcodep: *const u16,
maxarr_len: u32,
curelep: *const u32,
mode: u32
) -> i32;
fn OCIStmtExecute(
svchp: *const OCISvcCtx,
stmtp: *const OCIStmt,
errhp: *const OCIError,
iters: u32,
rowoff: u32,
snap_in: *const c_void, snap_out: *const c_void, mode: u32
) -> i32;
pub(crate) fn OCIStmtGetNextResult(
stmtp: *const OCIStmt,
errhp: *const OCIError,
result: *mut *mut OCIStmt,
rtype: *mut u32,
mode: u32
) -> i32;
pub(crate) fn OCIStmtFetch2(
stmtp: *const OCIStmt,
errhp: *const OCIError,
nrows: u32,
orient: u16,
offset: i16,
mode: u32
) -> i32;
}
extern "C" {
fn OCIDefineByPos2(
stmtp: *const OCIStmt,
defnpp: *mut *mut OCIDefine,
errhp: *const OCIError,
position: u32,
valuep: *const c_void,
value_sz: i64,
dty: u16,
indp: *const i16,
rlenp: *const u32,
rcodep: *const u16,
mode: u32
) -> i32;
}
extern "C" {
fn OCIRowidToChar(
desc: *const OCIRowid,
text: *const u8,
size: *const u16,
err: *const OCIError,
) -> i32;
}
extern "C" {
pub(crate) fn OCILobAppend(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
dst: *const OCILobLocator,
src: *const OCILobLocator,
) -> i32;
fn OCILobCharSetForm(
envhp: *const OCIEnv,
errhp: *const OCIError,
src: *const OCILobLocator,
csform: *const u8
) -> i32;
fn OCILobCharSetId(
envhp: *const OCIEnv,
errhp: *const OCIError,
src: *const OCILobLocator,
csid: *const u16
) -> i32;
pub(crate) fn OCILobClose(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
) -> i32;
pub(crate) fn OCILobCopy2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
dst: *const OCILobLocator,
src: *const OCILobLocator,
amount: u64,
dst_off: u64,
src_off: u64,
) -> i32;
pub(crate) fn OCILobCreateTemporary(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
csid: u16,
csfrm: u8,
lob_type: u8,
cache: u8,
duration: u16,
) -> i32;
pub(crate) fn OCILobErase2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
amount: *const u64,
offset: u64,
) -> i32;
pub(crate) fn OCILobFileClose(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
filep: *const OCILobLocator,
) -> i32;
pub(crate) fn OCILobFileExists(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
filep: *const OCILobLocator,
flag: *const u8
) -> i32;
fn OCILobFileGetName(
envhp: *const OCIEnv,
errhp: *const OCIError,
loc: *const OCILobLocator,
dir: *const u8,
dir_len: *const u16,
filename: *const u8,
name_len: *const u16,
) -> i32;
pub(crate) fn OCILobFileIsOpen(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
filep: *const OCILobLocator,
flag: *const u8
) -> i32;
pub(crate) fn OCILobFileOpen(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
filep: *const OCILobLocator,
mode: u8
) -> i32;
fn OCILobFileSetName(
envhp: *const OCIEnv,
errhp: *const OCIError,
filepp: *mut *mut OCILobLocator,
dir: *const u8,
dir_len: u16,
filename: *const u8,
name_len: u16,
) -> i32;
pub(crate) fn OCILobFreeTemporary(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
) -> i32;
pub(crate) fn OCILobGetChunkSize(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
size: *const u32,
) -> i32;
pub(crate) fn OCILobGetContentType(
envhp: *const OCIEnv,
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
ctx_type: *mut u8,
len: *mut u32,
mode: u32
)-> i32;
pub(crate) fn OCILobGetLength2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
len: *const u64,
) -> i32;
fn OCILobIsEqual(
envhp: *const OCIEnv,
loc1: *const OCILobLocator,
loc2: *const OCILobLocator,
flag: *const u8,
) -> i32;
pub(crate) fn OCILobIsOpen(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
flag: *const u8,
) -> i32;
pub(crate) fn OCILobIsTemporary(
envhp: *const OCIEnv,
errhp: *const OCIError,
loc: *const OCILobLocator,
flag: *const u8,
) -> i32;
pub(crate) fn OCILobLoadFromFile2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
dst: *const OCILobLocator,
src: *const OCILobLocator,
amount: u64,
dst_off: u64,
src_off: u64,
) -> i32;
fn OCILobLocatorAssign(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
src: *const OCILobLocator,
dst: *mut *mut OCILobLocator,
) -> i32;
fn OCILobLocatorIsInit(
envhp: *const OCIEnv,
errhp: *const OCIError,
src: *const OCILobLocator,
flag: *const u8,
) -> i32;
pub(crate) fn OCILobOpen(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
mode: u8,
) -> i32;
fn OCILobRead(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
amtp: *mut u32,
offset: u32,
buf: *mut u8,
buf_len: u32,
ctx: *mut c_void,
read_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> i32;
fn OCILobRead2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
offset: u64,
buf: *mut u8,
buf_len: u64,
piece: u8,
ctx: *mut c_void,
read_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> i32;
pub(crate) fn OCILobSetContentType(
envhp: *const OCIEnv,
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
ctype: *const u8,
len: u32,
mode: u32,
) -> i32;
pub(crate) fn OCILobTrim2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
len: u64,
) -> i32;
pub(crate) fn OCILobWrite2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
offset: u64,
buf: *const u8,
buf_len: u64,
piece: u8,
ctx: *const c_void,
write_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> i32;
pub(crate) fn OCILobWriteAppend2(
svchp: *const OCISvcCtx,
errhp: *const OCIError,
loc: *const OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
buf: *const u8,
buf_len: u64,
piece: u8,
ctx: *const c_void,
write_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> i32;
}
extern "C" {
fn OCIDateAddDays(
err: *const OCIError,
date: *const OCIDate,
num_days: i32,
result: *const OCIDate
) -> i32;
fn OCIDateAddMonths(
err: *const OCIError,
date: *const OCIDate,
num_months: i32,
result: *const OCIDate
) -> i32;
fn OCIDateAssign(
err: *const OCIError,
date: *const OCIDate,
result: *const OCIDate
) -> i32;
fn OCIDateCompare(
err: *const OCIError,
date1: *const OCIDate,
date2: *const OCIDate,
result: *const i32
) -> i32;
fn OCIDateDaysBetween(
err: *const OCIError,
date1: *const OCIDate,
date2: *const OCIDate,
result: *const i32
) -> i32;
fn OCIDateFromText(
err: *const OCIError,
txt: *const u8,
txt_len: u32,
fmt: *const u8,
fmt_len: u8,
lang: *const u8,
lang_len: u32,
result: *const OCIDate
) -> i32;
fn OCIDateLastDay(
err: *const OCIError,
date: *const OCIDate,
result: *const OCIDate
) -> i32;
fn OCIDateNextDay(
err: *const OCIError,
date: *const OCIDate,
day: *const u8,
day_len: u32,
result: *const OCIDate
) -> i32;
fn OCIDateToText(
err: *const OCIError,
date: *const OCIDate,
fmt: *const u8,
fmt_len: u8,
lang: *const u8,
lang_len: u32,
buf_size: *const u32,
buf: *const u8
) -> i32;
fn OCIDateSysDate(
err: *const OCIError,
result: *const OCIDate
) -> i32;
}
extern "C" {
fn OCIIntervalAdd(
hndl: *const c_void,
err: *const OCIError,
addend1: *const OCIInterval,
addend2: *const OCIInterval,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalAssign(
hndl: *const c_void,
err: *const OCIError,
inpinter: *const OCIInterval,
outinter: *mut OCIInterval,
) -> i32;
fn OCIIntervalCompare(
hndl: *const c_void,
err: *const OCIError,
inter1: *const OCIInterval,
inter2: *const OCIInterval,
result: *const i32,
) -> i32;
fn OCIIntervalDivide(
hndl: *const c_void,
err: *const OCIError,
dividend: *const OCIInterval,
divisor: *const OCINumber,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalFromNumber(
hndl: *const c_void,
err: *const OCIError,
interval: *mut OCIInterval,
number: *const OCINumber,
) -> i32;
fn OCIIntervalFromText(
hndl: *const c_void,
err: *const OCIError,
inpstring: *const u8,
str_len: size_t,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalFromTZ(
hndl: *const c_void,
err: *const OCIError,
inpstring: *const u8,
str_len: size_t,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalGetDaySecond(
hndl: *const c_void,
err: *const OCIError,
dy: *const i32,
hr: *const i32,
mm: *const i32,
ss: *const i32,
fsec: *const i32,
interval: *const OCIInterval,
) -> i32;
fn OCIIntervalGetYearMonth(
hndl: *const c_void,
err: *const OCIError,
yr: *const i32,
mnth: *const i32,
interval: *const OCIInterval,
) -> i32;
fn OCIIntervalMultiply(
hndl: *const c_void,
err: *const OCIError,
inter: *const OCIInterval,
nfactor: *const OCINumber,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalSetDaySecond(
hndl: *const c_void,
err: *const OCIError,
dy: i32,
hr: i32,
mm: i32,
ss: i32,
fsec: i32,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalSetYearMonth(
hndl: *const c_void,
err: *const OCIError,
yr: i32,
mnth: i32,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalSubtract(
hndl: *const c_void,
err: *const OCIError,
minuend: *const OCIInterval,
subtrahend: *const OCIInterval,
result: *mut OCIInterval,
) -> i32;
fn OCIIntervalToNumber(
hndl: *const c_void,
err: *const OCIError,
interval: *const OCIInterval,
number: *const OCINumber,
) -> i32;
fn OCIIntervalToText(
hndl: *const c_void,
err: *const OCIError,
interval: *const OCIInterval,
lfprec: u8,
fsprec: u8,
buffer: *const u8,
buflen: size_t,
resultlen: *const size_t,
) -> i32;
}
extern "C" {
fn OCINumberAbs(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberAdd(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberArcCos(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberArcSin(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberArcTan(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberArcTan2(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberAssign(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberCeil(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberCmp(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *const i32
) -> i32;
fn OCINumberCos(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberDec(
err: *const OCIError,
number: *const OCINumber
) -> i32;
fn OCINumberDiv(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberExp(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberFloor(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberFromReal(
err: *const OCIError,
rnum: *const c_void,
rnum_len: u32, number: *mut OCINumber
) -> i32;
fn OCINumberFromText(
err: *const OCIError,
txt: *const u8,
txt_len: u32,
fmt: *const u8,
fmt_len: u32,
nls_par: *const u8,
nls_len: u32,
number: *mut OCINumber
) -> i32;
fn OCINumberHypCos(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberHypSin(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberHypTan(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberInc(
err: *const OCIError,
number: *mut OCINumber
) -> i32;
fn OCINumberIntPower(
err: *const OCIError,
base: *const OCINumber,
exp: i32,
result: *mut OCINumber
) -> i32;
fn OCINumberIsInt(
err: *const OCIError,
number: *const OCINumber,
result: *const i32
) -> i32;
fn OCINumberIsZero(
err: *const OCIError,
number: *const OCINumber,
result: *const i32 ) -> i32;
fn OCINumberLn(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberLog(
err: *const OCIError,
base: *const OCINumber,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberMod(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberMul(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberNeg(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberPower(
err: *const OCIError,
base: *const OCINumber,
exp: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberPrec(
err: *const OCIError,
number: *const OCINumber,
num_dig: i32, result: *mut OCINumber
) -> i32;
fn OCINumberRound(
err: *const OCIError,
number: *const OCINumber,
num_dig: i32, result: *mut OCINumber
) -> i32;
pub(crate) fn OCINumberSetPi(
err: *const OCIError,
result: *mut OCINumber
);
pub(crate) fn OCINumberSetZero(
err: *const OCIError,
result: *mut OCINumber
);
fn OCINumberShift(
err: *const OCIError,
number: *const OCINumber,
num_dec: i32,
result: *mut OCINumber
) -> i32;
fn OCINumberSign(
err: *const OCIError,
number: *const OCINumber,
result: *const i32
) -> i32;
fn OCINumberSin(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberSqrt(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberSub(
err: *const OCIError,
number1: *const OCINumber,
number2: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberTan(
err: *const OCIError,
number: *const OCINumber,
result: *mut OCINumber
) -> i32;
fn OCINumberToReal(
err: *const OCIError,
number: *const OCINumber,
res_len: u32, result: *const c_void
) -> i32;
fn OCINumberToText(
err: *const OCIError,
number: *const OCINumber,
fmt: *const u8,
fmt_len: u32,
nls_par: *const u8,
nls_len: u32,
buf_size: *const u32,
buf: *const u8
) -> i32;
fn OCINumberTrunc(
err: *const OCIError,
number: *const OCINumber,
num_dig: i32,
result: *mut OCINumber
) -> i32;
}
extern "C" {
fn OCIRawAllocSize(
env: *const OCIEnv,
err: *const OCIError,
raw: *const OCIRaw,
size: *const u32
) -> i32;
fn OCIRawAssignBytes(
env: *const OCIEnv,
err: *const OCIError,
rhs: *const u8,
rhs_len: u32,
lhs: *mut *mut OCIRaw
) -> i32;
fn OCIRawAssignRaw(
env: *const OCIEnv,
err: *const OCIError,
rhs: *const OCIRaw,
lhs: *mut *mut OCIRaw
) -> i32;
pub(crate) fn OCIRawPtr(
env: *const OCIEnv,
raw: *const OCIRaw
) -> *const u8;
pub(crate) fn OCIRawResize(
env: *const OCIEnv,
err: *const OCIError,
size: u32,
raw: *mut *mut OCIRaw
) -> i32;
pub(crate) fn OCIRawSize(
env: *const OCIEnv,
raw: *const OCIRaw
) -> u32;
}
extern "C" {
fn OCIDateTimeAssign (
hndl: *const c_void,
err: *const OCIError,
from: *const OCIDateTime,
to: *mut OCIDateTime
) -> i32;
fn OCIDateTimeCompare (
hndl: *const c_void,
err: *const OCIError,
date1: *const OCIDateTime,
date2: *const OCIDateTime,
result: *const i32
) -> i32;
fn OCIDateTimeConstruct (
hndl: *const c_void,
err: *const OCIError,
datetime: *mut OCIDateTime,
year: i16,
month: u8,
day: u8,
hour: u8,
min: u8,
sec: u8,
fsec: u32,
timezone: *const u8,
tz_len: size_t
) -> i32;
fn OCIDateTimeConvert (
hndl: *const c_void,
err: *const OCIError,
indate: *const OCIDateTime,
outdate: *mut OCIDateTime
) -> i32;
fn OCIDateTimeFromText(
hndl: *const c_void,
err: *const OCIError,
date_str: *const u8,
dstr_length: size_t,
fmt: *const u8,
fmt_length: u8,
lang_name: *const u8,
lang_length: size_t,
datetime: *mut OCIDateTime,
) -> i32;
fn OCIDateTimeGetDate(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
year: *const i16,
month: *const u8,
day: *const u8,
) -> i32;
fn OCIDateTimeGetTime(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
hour: *const u8,
min: *const u8,
sec: *const u8,
fsec: *const u32,
) -> i32;
fn OCIDateTimeGetTimeZoneName(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
buf: *const u8,
buflen: *const u32,
) -> i32;
fn OCIDateTimeGetTimeZoneOffset(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
hour: *const i8,
min: *const i8,
) -> i32;
fn OCIDateTimeIntervalAdd(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
inter: *const OCIInterval,
result: *mut OCIDateTime,
) -> i32;
fn OCIDateTimeIntervalSub(
hndl: *const c_void,
err: *const OCIError,
datetime: *const OCIDateTime,
inter: *const OCIInterval,
result: *mut OCIDateTime,
) -> i32;
fn OCIDateTimeSubtract(
hndl: *const c_void,
err: *const OCIError,
indate1: *const OCIDateTime,
indate2: *const OCIDateTime,
result: *mut OCIInterval,
) -> i32;
fn OCIDateTimeSysTimeStamp(
hndl: *const c_void,
err: *const OCIError,
sys_date: *mut OCIDateTime,
) -> i32;
fn OCIDateTimeToText(
hndl: *const c_void,
err: *const OCIError,
date: *const OCIDateTime,
fmt: *const u8,
fmt_length: u8,
fsprec: u8,
lang_name: *const u8,
lang_length: size_t,
buf_size: *const u32,
buf: *const u8,
) -> i32;
}
extern "C" {
fn OCIStringAllocSize(
env: *const OCIEnv,
err: *const OCIError,
txt: *const OCIString,
size: *const u32
) -> i32;
fn OCIStringAssign(
env: *const OCIEnv,
err: *const OCIError,
rhs: *const OCIString,
lhs: *mut *mut OCIString
) -> i32;
fn OCIStringAssignText(
env: *const OCIEnv,
err: *const OCIError,
rhs: *const u8,
rhs_len: u32,
lhs: *mut *mut OCIString
) -> i32;
pub(crate) fn OCIStringPtr(
env: *const OCIEnv,
txt: *const OCIString
) -> *const u8;
pub(crate) fn OCIStringResize(
env: *const OCIEnv,
err: *const OCIError,
size: u32,
txt: *mut *mut OCIString
) -> i32;
pub(crate) fn OCIStringSize(
env: *const OCIEnv,
txt: *const OCIString
) -> u32;
}
pub fn client_version() -> (i32, i32, i32, i32, i32) {
let mut release = std::mem::MaybeUninit::<i32>::uninit();
let mut update = std::mem::MaybeUninit::<i32>::uninit();
let mut revision = std::mem::MaybeUninit::<i32>::uninit();
let mut incr = std::mem::MaybeUninit::<i32>::uninit();
let mut ext = std::mem::MaybeUninit::<i32>::uninit();
unsafe {
OCIClientVersion(
release.as_mut_ptr(),
update.as_mut_ptr(),
revision.as_mut_ptr(),
incr.as_mut_ptr(),
ext.as_mut_ptr(),
);
}
unsafe { (
release.assume_init(),
update.assume_init(),
revision.assume_init(),
incr.assume_init(),
ext.assume_init(),
) }
}
pub(crate) fn oci_connection_pool_destroy(pool: &OCICPool, err: &OCIError) -> i32 {
unsafe { OCIConnectionPoolDestroy(pool, err, OCI_DEFAULT) }
}
pub(crate) fn oci_session_pool_destroy(pool: &OCISPool, err: &OCIError) -> i32 {
unsafe { OCISessionPoolDestroy(pool, err, OCI_DEFAULT) }
}
pub(crate) fn oci_stmt_release(stmt: &OCIStmt, err: &OCIError) -> i32 {
unsafe { OCIStmtRelease(stmt, err, std::ptr::null(), 0, OCI_DEFAULT) }
}
pub(crate) fn oci_trans_rollback(svchp: &OCISvcCtx, errhp: &OCIError) -> i32 {
unsafe { OCITransRollback(svchp, errhp, OCI_DEFAULT) }
}
macro_rules! ok_or_env_err {
( |$env:ident| $stmt:stmt ) => {{
let res = unsafe { $stmt };
if res < 0 {
Err(Error::env($env, res))
} else {
Ok(())
}
}};
}
pub(crate) fn descriptor_alloc<T>(parenth: &OCIEnv, descpp: *mut *mut T, desctype: u32) -> Result<()>
where T: OCIStruct
{
ok_or_env_err!(|parenth|
OCIDescriptorAlloc(parenth, descpp as _, desctype, 0, std::ptr::null())
)
}
pub(crate) fn handle_alloc<T: HandleType>(
parenth: &OCIEnv,
hndlpp: *mut *mut T,
hndltype: u32,
) -> Result<()> {
ok_or_env_err!(|parenth|
OCIHandleAlloc(parenth, hndlpp as _, hndltype, 0, std::ptr::null())
)
}
macro_rules! ok_or_oci_err {
( |$err:ident| $stmt:stmt ) => {{
let res = unsafe { $stmt };
if res < 0 {
Err(Error::oci($err, res))
} else {
Ok(())
}
}};
( |$err:ident| $block:block ) => {{
let res = unsafe { $block };
if res < 0 {
Err(Error::oci($err, res))
} else {
Ok(())
}
}};
}
pub(crate) fn attr_get<T>(
trgthndlp: &T,
trghndltyp: u32,
attributep: *mut c_void,
sizep: &mut u32,
attrtype: u32,
errhp: &OCIError
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIAttrGet(trgthndlp as *const T as _, trghndltyp, attributep, sizep, attrtype, errhp)
)
}
pub(crate) fn attr_set<T>(
trgthndlp: &T,
trghndltyp: u32,
attributep: *const c_void,
size: u32,
attrtype: u32,
errhp: &OCIError
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIAttrSet(trgthndlp as *const T as _, trghndltyp, attributep, size, attrtype, errhp)
)
}
pub(crate) fn param_get(
hndlp: &OCIStmt,
htype: u32,
errhp: &OCIError,
descr: *mut *mut OCIParam,
pos: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIParamGet(hndlp as *const OCIStmt as _, htype, errhp, descr as _, pos)
)
}
pub(crate) fn session_get(
envhp: &OCIEnv,
errhp: &OCIError,
svchp: *mut *mut OCISvcCtx,
authinfop: &OCIAuthInfo,
dbname: *const u8,
dbname_len: u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCISessionGet(envhp, errhp, svchp, authinfop, dbname, dbname_len, std::ptr::null(), 0, std::ptr::null_mut(), std::ptr::null_mut(), std::ptr::null_mut(), mode)
)
}
pub(crate) fn session_get_tagged(
envhp: &OCIEnv,
errhp: &OCIError,
svchp: *mut *mut OCISvcCtx,
authinfop: &OCIAuthInfo,
dbname: *const u8,
dbname_len: u32,
tag: *const u8,
taglen: u32,
rettag: *mut *const u8,
rettaglen: *mut u32,
found: *mut u8,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCISessionGet(envhp, errhp, svchp, authinfop, dbname, dbname_len, tag, taglen, rettag, rettaglen, found, mode)
)
}
pub(crate) fn ping(
svchp: &OCISvcCtx,
errhp: &OCIError,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIPing(svchp, errhp, OCI_DEFAULT)
)
}
pub(crate) fn trans_commit(
svchp: &OCISvcCtx,
errhp: &OCIError,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCITransCommit(svchp, errhp, OCI_DEFAULT)
)
}
pub(crate) fn trans_rollback(
svchp: &OCISvcCtx,
errhp: &OCIError,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCITransRollback(svchp, errhp, OCI_DEFAULT)
)
}
pub(crate) fn connection_pool_create (
envhp: &OCIEnv,
errhp: &OCIError,
cpoolhp: &OCICPool,
pool_name: *mut *const u8,
pool_name_len: *mut u32,
dblink: *const u8,
dblink_len: u32,
conn_min: u32,
conn_max: u32,
conn_incr: u32,
username: *const u8,
username_len: u32,
password: *const u8,
password_len: u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIConnectionPoolCreate(envhp, errhp, cpoolhp, pool_name, pool_name_len, dblink, dblink_len, conn_min, conn_max, conn_incr, username, username_len, password, password_len, mode)
)
}
pub(crate) fn session_pool_create (
envhp: &OCIEnv,
errhp: &OCIError,
spoolhp: &OCISPool,
pool_name: *mut *const u8,
pool_name_len: *mut u32,
conn_str: *const u8,
conn_str_len: u32,
sess_min: u32,
sess_max: u32,
sess_incr: u32,
userid: *const u8,
userid_len: u32,
password: *const u8,
password_len: u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCISessionPoolCreate(envhp, errhp, spoolhp, pool_name, pool_name_len, conn_str, conn_str_len, sess_min, sess_max, sess_incr, userid, userid_len, password, password_len, mode)
)
}
pub(crate) fn stmt_prepare(
svchp: &OCISvcCtx,
stmthp: *mut *mut OCIStmt,
errhp: &OCIError,
stmttext: *const u8,
stmt_len: u32,
language: u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIStmtPrepare2(svchp, stmthp, errhp, stmttext, stmt_len, std::ptr::null(), 0, language, mode)
)
}
pub(crate) fn stmt_release(
stmtp: &OCIStmt,
errhp: &OCIError,
key: *const u8,
keylen: u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIStmtRelease(stmtp, errhp, key, keylen, mode)
)
}
pub(crate) fn stmt_get_bind_info(
stmtp: &OCIStmt,
errhp: &OCIError,
size: u32,
startloc: u32,
found: *mut i32,
bvnp: *mut *mut u8,
bvnl: *mut u8,
invp: *mut *mut u8,
invl: *mut u8,
dupl: *mut u8,
hndl: *mut *mut OCIBind,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIStmtGetBindInfo(stmtp, errhp, size, startloc, found, bvnp, bvnl, invp, invl, dupl, hndl)
)
}
pub(crate) fn bind_by_pos(
stmtp: &OCIStmt,
bindpp: *mut *mut OCIBind,
errhp: &OCIError,
position: u32,
valuep: *mut c_void,
value_sz: i64,
dty: u16,
indp: *mut i16,
alenp: *mut u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIBindByPos2(stmtp, bindpp, errhp, position, valuep, value_sz, dty, indp, alenp, std::ptr::null_mut::<u16>(), 0, std::ptr::null_mut::<u32>(), mode)
)
}
pub(crate) fn stmt_execute(
svchp: &OCISvcCtx,
stmtp: &OCIStmt,
errhp: &OCIError,
iters: u32,
rowoff: u32,
mode: u32
) -> Result<i32> {
let res = unsafe {
OCIStmtExecute(svchp, stmtp, errhp, iters, rowoff, std::ptr::null(), std::ptr::null(), mode)
};
match res {
OCI_ERROR | OCI_INVALID_HANDLE => { Err(Error::oci(errhp, res)) },
_ => { Ok(res) }
}
}
pub(crate) fn stmt_fetch(
stmtp: &OCIStmt,
errhp: &OCIError,
nrows: u32,
orient: u16,
offset: i16,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIStmtFetch2(stmtp, errhp, nrows, orient, offset, mode)
)
}
pub(crate) fn define_by_pos(
stmtp: &OCIStmt,
defnpp: *mut *mut OCIDefine,
errhp: &OCIError,
position: u32,
valuep: *mut c_void,
value_sz: i64,
dty: u16,
indp: *mut i16,
rlenp: *mut u32,
rcodep: *mut u16,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIDefineByPos2(stmtp, defnpp, errhp, position, valuep, value_sz, dty, indp, rlenp, rcodep, mode)
)
}
pub(crate) fn rowid_to_char(
desc: &OCIRowid,
text: *mut u8,
size: *mut u16,
errhp: &OCIError,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCIRowidToChar(desc, text, size, errhp)
)
}
pub(crate) fn lob_append(
svchp: &OCISvcCtx,
errhp: &OCIError,
dst: &OCILobLocator,
src: &OCILobLocator,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobAppend(svchp, errhp, dst, src)
)
}
pub(crate) fn lob_char_set_form(
envhp: &OCIEnv,
errhp: &OCIError,
src: &OCILobLocator,
csform: *mut u8
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobCharSetForm(envhp, errhp, src, csform)
)
}
pub(crate) fn lob_char_set_id(
envhp: &OCIEnv,
errhp: &OCIError,
src: &OCILobLocator,
csid: *mut u16
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobCharSetId(envhp, errhp, src, csid)
)
}
pub(crate) fn lob_close(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobClose(svchp, errhp, loc)
)
}
pub(crate) fn lob_copy(
svchp: &OCISvcCtx,
errhp: &OCIError,
dst: &OCILobLocator,
src: &OCILobLocator,
amount: u64,
dst_off: u64,
src_off: u64,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobCopy2(svchp, errhp, dst, src, amount, dst_off, src_off)
)
}
pub(crate) fn lob_create_temporary(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
csid: u16,
csfrm: u8,
lob_type: u8,
cache: u8,
duration: u16,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobCreateTemporary(svchp, errhp, loc, csid, csfrm, lob_type, cache, duration)
)
}
pub(crate) fn lob_erase(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
amount: *mut u64,
offset: u64,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobErase2(svchp, errhp, loc, amount, offset)
)
}
pub(crate) fn lob_file_close(
svchp: &OCISvcCtx,
errhp: &OCIError,
filep: &OCILobLocator,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileClose(svchp, errhp, filep)
)
}
pub(crate) fn lob_file_exists(
svchp: &OCISvcCtx,
errhp: &OCIError,
filep: &OCILobLocator,
flag: *mut u8
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileExists(svchp, errhp, filep, flag)
)
}
pub(crate) fn lob_file_get_name(
envhp: &OCIEnv,
errhp: &OCIError,
loc: &OCILobLocator,
dir: *mut u8,
dir_len: *mut u16,
filename: *mut u8,
name_len: *mut u16,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileGetName(envhp, errhp, loc, dir, dir_len, filename, name_len)
)
}
pub(crate) fn lob_file_is_open(
svchp: &OCISvcCtx,
errhp: &OCIError,
filep: &OCILobLocator,
flag: *mut u8
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileIsOpen(svchp, errhp, filep, flag)
)
}
pub(crate) fn lob_file_open(
svchp: &OCISvcCtx,
errhp: &OCIError,
filep: &OCILobLocator,
mode: u8
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileOpen(svchp, errhp, filep, mode)
)
}
pub(crate) fn lob_file_set_name(
envhp: &OCIEnv,
errhp: &OCIError,
filepp: *const *mut OCIBFileLocator,
dir: *const u8,
dir_len: u16,
filename: *const u8,
name_len: u16,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFileSetName(envhp, errhp, filepp as _, dir, dir_len, filename, name_len)
)
}
pub(crate) fn lob_free_temporary(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobFreeTemporary(svchp, errhp, loc)
)
}
pub(crate) fn lob_get_chunk_size(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
size: *mut u32,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobGetChunkSize(svchp, errhp, loc, size)
)
}
pub(crate) fn lob_get_content_type(
envhp: &OCIEnv,
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
ctx_type: *mut u8,
len: *mut u32,
mode: u32
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobGetContentType(envhp, svchp, errhp, loc, ctx_type, len, mode)
)
}
pub(crate) fn lob_get_length(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
len: *mut u64,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobGetLength2(svchp, errhp, loc, len)
)
}
pub(crate) fn lob_is_equal(
envhp: &OCIEnv,
loc1: &OCILobLocator,
loc2: &OCILobLocator,
flag: *mut u8,
) -> Result<()> {
ok_or_env_err!(|envhp|
OCILobIsEqual(envhp, loc1, loc2, flag)
)
}
pub(crate) fn lob_is_open(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
flag: *mut u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobIsOpen(svchp, errhp, loc, flag)
)
}
pub(crate) fn lob_is_temporary(
envhp: &OCIEnv,
errhp: &OCIError,
loc: &OCILobLocator,
flag: *mut u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobIsTemporary(envhp, errhp, loc, flag)
)
}
pub(crate) fn lob_load_from_file(
svchp: &OCISvcCtx,
errhp: &OCIError,
dst: &OCILobLocator,
src: &OCILobLocator,
amount: u64,
dst_off: u64,
src_off: u64,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobLoadFromFile2(svchp, errhp, dst, src, amount, dst_off, src_off)
)
}
pub(crate) fn lob_locator_assign(
svchp: &OCISvcCtx,
errhp: &OCIError,
src: &OCILobLocator,
dst: *mut *mut OCILobLocator,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobLocatorAssign(svchp, errhp, src, dst)
)
}
pub(crate) fn lob_locator_is_init(
envhp: &OCIEnv,
errhp: &OCIError,
src: &OCILobLocator,
flag: *mut u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobLocatorIsInit(envhp, errhp, src, flag)
)
}
pub(crate) fn lob_open(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
mode: u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobOpen(svchp, errhp, loc, mode)
)
}
pub(crate) fn lob_read(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
offset: u64,
buf: *mut u8,
buf_len: u64,
piece: u8,
csid: u16,
csfrm: u8,
) -> Result<i32> {
let res = unsafe {
OCILobRead2(svchp, errhp, loc, byte_cnt, char_cnt, offset, buf, buf_len, piece, std::ptr::null_mut::<c_void>(), std::ptr::null::<c_void>(), csid, csfrm)
};
if res < 0 {
Err(Error::oci(errhp, res))
} else {
Ok(res)
}
}
pub(crate) fn lob_read2(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
offset: u64,
buf: *mut u8,
buf_len: u64,
piece: u8,
csid: u16,
csfrm: u8,
) -> i32 {
unsafe {
OCILobRead2(svchp, errhp, loc, byte_cnt, char_cnt, offset, buf, buf_len, piece, std::ptr::null_mut::<c_void>(), std::ptr::null::<c_void>(), csid, csfrm)
}
}
pub(crate) fn lob_set_content_type(
envhp: &OCIEnv,
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
ctype: *const u8,
len: u32,
mode: u32,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobSetContentType(envhp, svchp, errhp, loc, ctype, len, mode)
)
}
pub(crate) fn lob_trim(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
len: u64,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobTrim2(svchp, errhp, loc, len)
)
}
pub(crate) fn lob_write(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
offset: u64,
buf: *const u8,
buf_len: u64,
piece: u8,
ctx: *mut c_void,
write_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobWrite2(svchp, errhp, loc, byte_cnt, char_cnt, offset, buf, buf_len, piece, ctx, write_cb, csid, csfrm)
)
}
pub(crate) fn lob_write_append(
svchp: &OCISvcCtx,
errhp: &OCIError,
loc: &OCILobLocator,
byte_cnt: *mut u64,
char_cnt: *mut u64,
buf: *const u8,
buf_len: u64,
piece: u8,
ctx: *mut c_void,
write_cb: *const c_void,
csid: u16,
csfrm: u8,
) -> Result<()> {
ok_or_oci_err!(|errhp|
OCILobWriteAppend2(svchp, errhp, loc, byte_cnt, char_cnt, buf, buf_len, piece, ctx, write_cb, csid, csfrm)
)
}
pub(crate) fn date_add_days(
err: &OCIError,
date: &OCIDate,
num_days: i32,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateAddDays(err, date, num_days, result)
)
}
pub(crate) fn date_add_months(
err: &OCIError,
date: &OCIDate,
num_months: i32,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateAddMonths(err, date, num_months, result)
)
}
pub(crate) fn date_assign(
err: &OCIError,
date: &OCIDate,
result: *mut OCIDate,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateAssign(err, date, result)
)
}
pub(crate) fn date_compare(
err: &OCIError,
date1: &OCIDate,
date2: &OCIDate,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateCompare(err, date1, date2, result)
)
}
pub(crate) fn date_days_between(
err: &OCIError,
date1: &OCIDate,
date2: &OCIDate,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateDaysBetween(err, date1, date2, result)
)
}
pub(crate) fn date_from_text(
err: &OCIError,
txt: *const u8,
txt_len: u32,
fmt: *const u8,
fmt_len: u8,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateFromText(err, txt, txt_len, fmt, fmt_len, std::ptr::null(), 0, result)
)
}
pub(crate) fn date_last_day(
err: &OCIError,
date: &OCIDate,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateLastDay(err, date, result)
)
}
pub(crate) fn date_next_day(
err: &OCIError,
date: &OCIDate,
day: *const u8,
day_len: u32,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateNextDay(err, date, day, day_len, result)
)
}
pub(crate) fn date_to_text(
err: &OCIError,
date: &OCIDate,
fmt: *const u8,
fmt_len: u8,
buf_size: *mut u32,
buf: *mut u8
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateToText(err, date, fmt, fmt_len, std::ptr::null(), 0, buf_size, buf)
)
}
pub(crate) fn date_sys_date(
err: &OCIError,
result: *mut OCIDate
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateSysDate(err, result)
)
}
pub(crate) fn interval_add(
hndl: *const c_void,
err: &OCIError,
addend1: &OCIInterval,
addend2: &OCIInterval,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalAdd(hndl, err, addend1, addend2, result)
)
}
pub(crate) fn interval_assign(
hndl: *const c_void,
err: &OCIError,
inpinter: &OCIInterval,
outinter: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalAssign(hndl, err, inpinter, outinter)
)
}
pub(crate) fn interval_compare(
hndl: *const c_void,
err: &OCIError,
inter1: &OCIInterval,
inter2: &OCIInterval,
result: *mut i32,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalCompare(hndl, err, inter1, inter2, result)
)
}
pub(crate) fn interval_divide(
hndl: *const c_void,
err: &OCIError,
dividend: &OCIInterval,
divisor: &OCINumber,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalDivide(hndl, err, dividend, divisor, result)
)
}
pub(crate) fn interval_from_number(
hndl: *const c_void,
err: &OCIError,
interval: &mut OCIInterval,
number: &OCINumber,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalFromNumber(hndl, err, interval, number)
)
}
pub(crate) fn interval_from_text(
hndl: *const c_void,
err: &OCIError,
inpstring: *const u8,
str_len: size_t,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalFromText(hndl, err, inpstring, str_len, result)
)
}
pub(crate) fn interval_from_tz(
hndl: *const c_void,
err: &OCIError,
inpstring: *const u8,
str_len: size_t,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalFromTZ(hndl, err, inpstring, str_len, result)
)
}
pub(crate) fn interval_get_day_second(
hndl: *const c_void,
err: &OCIError,
dy: *mut i32,
hr: *mut i32,
mm: *mut i32,
ss: *mut i32,
fsec: *mut i32,
interval: &OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalGetDaySecond(hndl, err, dy, hr, mm, ss, fsec, interval)
)
}
pub(crate) fn interval_get_year_month(
hndl: *const c_void,
err: &OCIError,
yr: *mut i32,
mnth: *mut i32,
interval: &OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalGetYearMonth(hndl, err, yr, mnth, interval)
)
}
pub(crate) fn interval_multiply(
hndl: *const c_void,
err: &OCIError,
inter: &OCIInterval,
nfactor: &OCINumber,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalMultiply(hndl, err, inter, nfactor, result)
)
}
pub(crate) fn interval_set_day_second(
hndl: *const c_void,
err: &OCIError,
dy: i32,
hr: i32,
mm: i32,
ss: i32,
fsec: i32,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalSetDaySecond(hndl, err, dy, hr, mm, ss, fsec, result)
)
}
pub(crate) fn interval_set_year_month(
hndl: *const c_void,
err: &OCIError,
yr: i32,
mnth: i32,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalSetYearMonth(hndl, err, yr, mnth, result)
)
}
pub(crate) fn interval_subtract(
hndl: *const c_void,
err: &OCIError,
minuend: &OCIInterval,
subtrahend: &OCIInterval,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalSubtract(hndl, err, minuend, subtrahend, result)
)
}
pub(crate) fn interval_to_number(
hndl: *const c_void,
err: &OCIError,
interval: &OCIInterval,
number: *mut OCINumber,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalToNumber(hndl, err, interval, number)
)
}
pub(crate) fn interval_to_text(
hndl: *const c_void,
err: &OCIError,
interval: &OCIInterval,
lfprec: u8,
fsprec: u8,
buffer: *mut u8,
buflen: size_t,
resultlen: *mut size_t,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIIntervalToText(hndl, err, interval, lfprec, fsprec, buffer, buflen, resultlen)
)
}
pub(crate) fn raw_alloc_size(
env: &OCIEnv,
err: &OCIError,
raw: *const OCIRaw,
size: *mut u32
) -> Result<()> {
ok_or_oci_err!(|err|
OCIRawAllocSize(env, err, raw, size)
)
}
pub(crate) fn raw_assign_bytes(
env: &OCIEnv,
err: &OCIError,
rhs: *const u8,
rhs_len: u32,
lhs: *mut *mut OCIRaw
) -> Result<()> {
ok_or_oci_err!(|err|
OCIRawAssignBytes(env, err, rhs, rhs_len, lhs)
)
}
pub(crate) fn raw_assign_raw(
env: &OCIEnv,
err: &OCIError,
rhs: &OCIRaw,
lhs: *mut *mut OCIRaw
) -> Result<()> {
ok_or_oci_err!(|err|
OCIRawAssignRaw(env, err, rhs, lhs)
)
}
pub(crate) fn raw_resize(
env: &OCIEnv,
err: &OCIError,
size: u32,
raw: *mut *mut OCIRaw
) -> Result<()> {
ok_or_oci_err!(|err|
OCIRawResize(env, err, size, raw)
)
}
pub(crate) fn string_alloc_size(
env: &OCIEnv,
err: &OCIError,
txt: *const OCIString,
size: *mut u32
) -> Result<()> {
ok_or_oci_err!(|err|
OCIStringAllocSize(env, err, txt, size)
)
}
pub(crate) fn string_assign(
env: &OCIEnv,
err: &OCIError,
rhs: &OCIString,
lhs: *mut *mut OCIString
) -> Result<()> {
ok_or_oci_err!(|err|
OCIStringAssign(env, err, rhs, lhs)
)
}
pub(crate) fn string_assign_text(
env: &OCIEnv,
err: &OCIError,
rhs: *const u8,
rhs_len: u32,
lhs: *mut *mut OCIString
) -> Result<()> {
ok_or_oci_err!(|err|
OCIStringAssignText(env, err, rhs, rhs_len, lhs)
)
}
pub(crate) fn string_resize(
env: &OCIEnv,
err: &OCIError,
size: u32,
txt: *mut *mut OCIString
) -> Result<()> {
ok_or_oci_err!(|err|
OCIStringResize(env, err, size, txt)
)
}
pub(crate) fn date_time_assign (
hndl: *const c_void,
err: &OCIError,
from: &OCIDateTime,
to: *mut OCIDateTime
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeAssign(hndl, err, from, to)
)
}
pub(crate) fn date_time_compare (
hndl: *const c_void,
err: &OCIError,
date1: &OCIDateTime,
date2: &OCIDateTime,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeCompare(hndl, err, date1, date2, result)
)
}
pub(crate) fn date_time_construct (
hndl: *const c_void,
err: &OCIError,
datetime: &mut OCIDateTime,
year: i16,
month: u8,
day: u8,
hour: u8,
min: u8,
sec: u8,
fsec: u32,
timezone: *const u8,
tz_len: size_t
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeConstruct(hndl, err, datetime, year, month, day, hour, min, sec, fsec, timezone, tz_len)
)
}
pub(crate) fn date_time_convert (
hndl: *const c_void,
err: &OCIError,
indate: &OCIDateTime,
outdate: &mut OCIDateTime
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeConvert(hndl, err, indate, outdate)
)
}
pub(crate) fn date_time_from_text(
hndl: *const c_void,
err: &OCIError,
date_str: *const u8,
dstr_length: size_t,
fmt: *const u8,
fmt_length: u8,
lang_name: *const u8,
lang_length: size_t,
datetime: &mut OCIDateTime,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeFromText(hndl, err, date_str, dstr_length, fmt, fmt_length, lang_name, lang_length, datetime)
)
}
pub(crate) fn date_time_get_date(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
year: *mut i16,
month: *mut u8,
day: *mut u8,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeGetDate(hndl, err, datetime, year, month, day)
)
}
pub(crate) fn date_time_get_time(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
hour: *mut u8,
min: *mut u8,
sec: *mut u8,
fsec: *mut u32,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeGetTime(hndl, err, datetime, hour, min, sec, fsec)
)
}
pub(crate) fn date_time_get_time_zone_name(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
buf: *mut u8,
buflen: *mut u32,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeGetTimeZoneName(hndl, err, datetime, buf, buflen)
)
}
pub(crate) fn date_time_get_time_zone_offset(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
hour: *mut i8,
min: *mut i8,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeGetTimeZoneOffset(hndl, err, datetime, hour, min)
)
}
pub(crate) fn date_time_interval_add(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
inter: &OCIInterval,
result: &mut OCIDateTime,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeIntervalAdd(hndl, err, datetime, inter, result)
)
}
pub(crate) fn date_time_interval_sub(
hndl: *const c_void,
err: &OCIError,
datetime: &OCIDateTime,
inter: &OCIInterval,
result: &mut OCIDateTime,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeIntervalSub(hndl, err, datetime, inter, result)
)
}
pub(crate) fn date_time_subtract(
hndl: *const c_void,
err: &OCIError,
indate1: &OCIDateTime,
indate2: &OCIDateTime,
result: &mut OCIInterval,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeSubtract(hndl, err, indate1, indate2, result)
)
}
pub(crate) fn date_time_sys_time_stamp(
hndl: *const c_void,
err: &OCIError,
sys_date: &mut OCIDateTime,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeSysTimeStamp(hndl, err, sys_date)
)
}
pub(crate) fn date_time_to_text(
hndl: *const c_void,
err: &OCIError,
date: &OCIDateTime,
fmt: *const u8,
fmt_length: u8,
fsprec: u8,
buf_size: *mut u32,
buf: *mut u8,
) -> Result<()> {
ok_or_oci_err!(|err|
OCIDateTimeToText(hndl, err, date, fmt, fmt_length, fsprec, std::ptr::null(), 0, buf_size, buf)
)
}
pub(crate) fn number_abs(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberAbs(err, number, result)
)
}
pub(crate) fn number_add(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberAdd(err, number1, number2, result)
)
}
pub(crate) fn number_arc_cos(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberArcCos(err, number, result)
)
}
pub(crate) fn number_arc_sin(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberArcSin(err, number, result)
)
}
pub(crate) fn number_arc_tan(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberArcTan(err, number, result)
)
}
pub(crate) fn number_arc_tan2(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberArcTan2(err, number1, number2, result)
)
}
pub(crate) fn number_assign(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberAssign(err, number, result)
)
}
pub(crate) fn number_ceil(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberCeil(err, number, result)
)
}
pub(crate) fn number_cmp(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberCmp(err, number1, number2, result)
)
}
pub(crate) fn number_cos(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberCos(err, number, result)
)
}
pub(crate) fn number_dec(
err: &OCIError,
number: &OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberDec(err, number)
)
}
pub(crate) fn number_div(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberDiv(err, number1, number2, result)
)
}
pub(crate) fn number_exp(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberExp(err, number, result)
)
}
pub(crate) fn number_floor(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberFloor(err, number, result)
)
}
pub(crate) fn number_from_real(
err: &OCIError,
rnum: *const c_void,
rnum_len: u32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberFromReal(err, rnum, rnum_len, result)
)
}
pub(crate) fn number_from_text(
err: &OCIError,
txt: *const u8,
txt_len: u32,
fmt: *const u8,
fmt_len: u32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberFromText(err, txt, txt_len, fmt, fmt_len, std::ptr::null(), 0, result)
)
}
pub(crate) fn number_hyp_cos(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberHypCos(err, number, result)
)
}
pub(crate) fn number_hyp_sin(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberHypSin(err, number, result)
)
}
pub(crate) fn number_hyp_tan(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberHypTan(err, number, result)
)
}
pub(crate) fn number_inc(
err: &OCIError,
number: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberInc(err, number)
)
}
pub(crate) fn number_int_power(
err: &OCIError,
base: &OCINumber,
exp: i32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberIntPower(err, base, exp, result)
)
}
pub(crate) fn number_is_int(
err: &OCIError,
number: &OCINumber,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberIsInt(err, number, result)
)
}
pub(crate) fn number_is_zero(
err: &OCIError,
number: &OCINumber,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberIsZero(err, number, result)
)
}
pub(crate) fn number_ln(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberLn(err, number, result)
)
}
pub(crate) fn number_log(
err: &OCIError,
base: &OCINumber,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberLog(err, base, number, result)
)
}
pub(crate) fn number_mod(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberMod(err, number1, number2, result)
)
}
pub(crate) fn number_mul(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberMul(err, number1, number2, result)
)
}
pub(crate) fn number_neg(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberNeg(err, number, result)
)
}
pub(crate) fn number_power(
err: &OCIError,
base: &OCINumber,
exp: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberPower(err, base, exp, result)
)
}
pub(crate) fn number_prec(
err: &OCIError,
number: &OCINumber,
num_dig: i32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberPrec(err, number, num_dig, result)
)
}
pub(crate) fn number_round(
err: &OCIError,
number: &OCINumber,
num_dig: i32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberRound(err, number, num_dig, result)
)
}
pub(crate) fn number_shift(
err: &OCIError,
number: &OCINumber,
num_dec: i32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberShift(err, number, num_dec, result)
)
}
pub(crate) fn number_sign(
err: &OCIError,
number: &OCINumber,
result: *mut i32
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberSign(err, number, result)
)
}
pub(crate) fn number_sin(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberSin(err, number, result)
)
}
pub(crate) fn number_sqrt(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberSqrt(err, number, result)
)
}
pub(crate) fn number_sub(
err: &OCIError,
number1: &OCINumber,
number2: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberSub(err, number1, number2, result)
)
}
pub(crate) fn number_tan(
err: &OCIError,
number: &OCINumber,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberTan(err, number, result)
)
}
pub(crate) fn number_to_real(
err: &OCIError,
number: &OCINumber,
res_len: u32,
result: *mut c_void
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberToReal(err, number, res_len, result)
)
}
pub(crate) fn number_to_text(
err: &OCIError,
number: &OCINumber,
fmt: *const u8,
fmt_len: u32,
buf_size: *mut u32,
buf: *mut u8
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberToText(err, number, fmt, fmt_len, std::ptr::null(), 0, buf_size, buf)
)
}
pub(crate) fn number_trunc(
err: &OCIError,
number: &OCINumber,
num_dig: i32,
result: *mut OCINumber
) -> Result<()> {
ok_or_oci_err!(|err|
OCINumberTrunc(err, number, num_dig, result)
)
}