/*
======================================================================
oradbi.h - Created by cheungmine, All rights reserved.
First : Mar. 8, 2008
======================================================================*/
#ifndef ORADBI_H_INCLUDED
#defineORADBI_H_INCLUDED
#ifdef __cplusplus
extern"C"
{#endif
#ifdef ORADBI_DLLEXPORT
# define ORADB_CALL __declspec(dllexport)
# define ORADB_CALL1(x) __declspec(dllexport) x
#endif
#ifndef ORADB_CALL
# define ORADB_CALL
#endif
#ifndef ORADB_CALL1
# define ORADB_CALL1(x) x ORADB_CALL
#endif
/*NOT SUPPORT UNICODE*/
#ifdef UNICODE
#pragmamessage( __FILE__" Warning UNICODE: Cannot use UNICODE" )
#endif
/*NOT SUPPORT UNICODE*/
#ifdef _UNICODE
#pragmamessage( __FILE__" Warning UNICODE: Cannot use UNICODE" )
#endif
#include
"unistd.h"
#include
"oratype.h"
#include
"oraerr.h"
/*
======================================================================
connection Functions - oraconn.c
======================================================================*/
/*connects the application to the oracle server.*/
lresult ORADB_CALL ORA_connection_create (
OUT ora_connection
*
connection,
INconstchar*
service_name,
INconstchar*
username,
INconstchar*
password,
INulongenv_mode,/*=OCI_THREADED|OCI_OBJECT*/
IN BOOL non_blocking_mode,
/*=FALSE*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*disconnects the application from the oracle server.*/
void
ORADB_CALL ORA_connection_free (
IN ora_connection connection
);/*executes a sql statement with no result*/
lresult ORADB_CALL ORA_connection_execute (
IN ora_connection connection,
IN
constchar*
sql_block,
INintsql_len,/*-1 for strlen called*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*prepares (and returns) a sql statement for execution*/
lresult ORADB_CALL ORA_connection_prepare (
IN ora_connection connection,
IN
constchar*
sql_block,
INintsql_len,/*-1 for strlen called*/
OUT ora_sqlstmt
*sqlstmt,/*a sql statement for execution returned*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*executes a select sql statement and return the result set*/
lresult ORADB_CALL ORA_connection_select (
IN ora_connection connection,
IN
constchar*
sql_select,
INintsql_len,/*-1 for strlen called*/
OUT ora_rowset
*rowset,/*the result set returned*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*commits changes*/
lresult ORADB_CALL ORA_connection_commit (
IN ora_connection connection,
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*rollbacks changes*/
lresult ORADB_CALL ORA_connection_rollback (
IN ora_connection connection,
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*
======================================================================
sqlstmt Functions - orastmt.c
======================================================================*/
lresult ORADB_CALL ORA_sqlstmt_create (
OUT ora_sqlstmt
*
sqlstmt,
IN ora_connection connection,
INconstchar*
sql_block,
INintsql_len,/*-1 for strlen to be called*/
IN
ushortfetch_size,/*0 for default or bind array size for INSERT*/
OUT ora_error_t*error/*NULL for no err msg return*/
);
void
ORADB_CALL ORA_sqlstmt_free (
IN ora_sqlstmt sqlstmt
);/*executes a sql statement with no output parameters*/
lresult ORADB_CALL ORA_sqlstmt_execute (
IN ora_sqlstmt sqlstmt,
IN ORADBI_ExecMode mode,
/*execute mode: MOD_DEFAULT=0*/
IN
ushortiters,/*0 is default*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*executes a select sql statement and returns the result set*/
lresult ORADB_CALL ORA_sqlstmt_select (
IN ora_sqlstmt sqlstmt,
IN ORADBI_ExecMode mode,
/*execute mode: MOD_DEFAULT=0*/
OUT ora_rowset
*
rowset,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*binds a named variable to sqlstmt but for lob, when type is set to ODT_UNKNOWN type is taken from name's prefix*/
lresult ORADB_CALL ORA_sqlstmt_bind (
IN ora_sqlstmt sqlstmt,
IN
constchar*name,/*param name bound*/
IN ORADBI_DataType type,
/*param type bound. set ODT_UNKNOWN for simplely. cannot be a lob type*/
IN
intsize,/*param size for TEXT, LOB. 0 for others*/
OUT ora_param*param,/*a out param bound to sqlstmt*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*binds a named variable to sqlstmt only with lob type*/
lresult ORADB_CALL ORA_sqlstmt_bind_lob (
IN ora_sqlstmt sqlstmt,
IN
constchar*name,/*param name bound*/
IN
intmax_size,/*maximum size of lob data, 0 for default. if 0, client_data must be a valid pointer*/
IN ORADBI_InBind
*inbind,/*can be null. if null, max_size must be a meaningful value not more than 65535*/
IN ORADBI_OutBind
*outbind,/*can be null*/
OUT ora_param*param,/*a out param bound to sqlstmt*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*accesses param in the sqlstmt by name. gets a reference to param*/
ora_param ORADB_CALL ORA_sqlstmt_get_param_by_name (
IN ora_sqlstmt sqlstmt,
IN
constchar*param_name,/*MUST be a valid name string*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*accesses param in the sqlstmt by index: 1-based. gets a reference to param*/
ora_param ORADB_CALL ORA_sqlstmt_get_param_by_index (
IN ora_sqlstmt sqlstmt,
IN
ushortparam_index,/*PARAM_INDEX_BASE based*/
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*
======================================================================
rowset Functions - orarows.c
======================================================================*/
/*returns number of rows fetched so far*/
lresult ORADB_CALL ORA_rowset_num_rows (
IN ora_rowset rowset,
OUT size_t
*
num_rows,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns number of columns*/
lresult ORADB_CALL ORA_rowset_num_columns (
IN ora_rowset rowset,
OUT size_t
*
num_cols,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*fetches next row of record. TRUE for NOT completed; FALSE for completed*/
BOOL ORADB_CALL ORA_rowset_next (
IN ora_rowset rowset
);
/*frees a ora_rowset. a freed rowset handle is an invalid pointer and cannot be used any more*/
void
ORADB_CALL ORA_rowset_free (
IN ora_rowset rowset
);/*accesses column in the current row by name. gets a reference to column*/
ora_column ORADB_CALL ORA_rowset_get_column_by_name (
IN ora_rowset rowset,
IN
constchar*col_name,/*MUST be a valid name string*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*accesses column in the current row by index: 1-based. gets a reference to column*/
ora_column ORADB_CALL ORA_rowset_get_column_by_index (
IN ora_rowset rowset,
IN
ushortcol_index,/*COLUMN_INDEX_BASE based*/
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*
======================================================================
column Functions - oracol.c
======================================================================*/
/*returns column data type*/
ORADB_CALL1(
constchar*
) ORA_column_get_name (
IN ora_column column
);/*returns column data type*/
ORADBI_DataType ORADB_CALL ORA_column_get_type (
IN ora_column column
);
/*returns column display size*/
size_t ORADB_CALL ORA_column_get_dispsize (
IN ora_column column
);
/*returns column precision of numberic data type*/
int
ORADB_CALL ORA_column_get_precision (
IN ora_column column
);/*returns column scale of numberic data type*/
int
ORADB_CALL ORA_column_get_scale (
IN ora_column column
);/*returns whether column is null ok*/
BOOL ORADB_CALL ORA_column_is_null_ok (
IN ora_column column
);
/*returns whether column value is null*/
BOOL ORADB_CALL ORA_column_is_null (
IN ora_column column
);
/*returns column value as string*/
lresult ORADB_CALL ORA_column_as_string (
IN ora_column column,
OUT
char**outval,/*Returns address of pointer to actual data*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*returns column value as double*/
lresult ORADB_CALL ORA_column_as_double (
IN ora_column column,
OUT
double*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as float32*/
lresult ORADB_CALL ORA_column_as_float (
IN ora_column column,
OUT
float*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as long*/
lresult ORADB_CALL ORA_column_as_long (
IN ora_column column,
OUT
long*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as unsigned long*/
lresult ORADB_CALL ORA_column_as_ulong (
IN ora_column column,
OUT
ulong*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as int64*/
lresult ORADB_CALL ORA_column_as_longlong (
IN ora_column column,
OUT longlong
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as uint64*/
lresult ORADB_CALL ORA_column_as_ulonglong (
IN ora_column column,
OUT ulonglong
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns column value as datetime*/
lresult ORADB_CALL ORA_column_as_datetime (
IN ora_column column,
OUT ora_datetime
*
outval,
OUT ora_error_t*
error
);/*gets lob size for read. if a column isn't a LOB type or NULL, return 0*/
size_t ORADB_CALL ORA_column_lob_size (
IN ora_column column
);
/*read lob column value - pulling mode*/
/*
An example of pulling lob data with ORA_column_read_lob:
#define BUFF_SIZE 512
byte lob_buf[BUFF_SIZE];
lob_siz = ORA_column_lob_size (col);
lob_data = (byte*) malloc (lob_siz);
cb_offs = 0;
cb_read = BUFF_SIZE;
while ((rc=ORA_column_read_lob (col, lob_siz, cb_offs, lob_buf, &cb_read, &err))==ORC_NEED_DATA || rc==ORC_SUCCESS)
{
memcpy (lob_data+cb_offs, lob_buf, cb_read);
cb_offs += cb_read;
if (rc==ORC_SUCCESS)
break;
cb_read = BUFF_SIZE;
}
ASSERT (cb_offs == lob_siz);*/
lresult ORADB_CALL ORA_column_read_lob (
IN ora_column column,
IN size_t lobsize_to_read,
/*total bytes to read, usually is lob_size*/
IN size_t cb_offset,
/*offset bytes from the start of lob data*/
INOUT
byte*in_buf,/*when returned, in_buf has actual data*/
INOUT size_t
*cb_read,/*input is buf size and output is size of bytes be read*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*
returns lob column value as bytes once for all. out_buf is allocated by caller for fetch bytes.
* buf_size is size of out_buf
* ORA_column_as_bytes calls ORA_column_read_lob internally.*/
/*
An example of pulling lob data with ORA_column_as_bytes:
size_t lob_size = ORA_column_lob_size (col);
byte* out_buf = malloc (lob_size);
ORA_column_as_bytes (col, out_buf, &lob_size, NULL);
...
free (out_buf);*/
lresult ORADB_CALL ORA_column_as_bytes (
IN ora_column column,
INOUT
byte*
out_buf,
INOUT size_t*lob_size,/*size bytes of lob data which must <= size of buffer*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*
======================================================================
param Functions - oraparam.c
======================================================================*/
ORADBI_DataType ORADB_CALL ORA_param_get_type (
IN ora_param param
);
lresult ORADB_CALL ORA_param_set_long (
IN ora_param param,
IN
long
val,
OUT ora_error_t*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_ulong (
IN ora_param param,
IN
ulong
val,
OUT ora_error_t*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_longlong (
IN ora_param param,
IN longlong val,
OUT ora_error_t
*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_ulonglong (
IN ora_param param,
IN ulonglong val,
OUT ora_error_t
*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_datetime (
IN ora_param param,
IN ora_datetime val,
OUT ora_error_t
*error/*NULL for no err msg return*/
);
void
ORADB_CALL ORA_param_set_null (
IN ora_param param
);
lresult ORADB_CALL ORA_param_set_float (
IN ora_param param,
INfloat
val,
OUT ora_error_t*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_double (
IN ora_param param,
IN
double
val,
OUT ora_error_t*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_string (
IN ora_param param,
IN
constchar*
val,
INshortlen,/*-1 for strlen called*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_param_set_bytes (
IN ora_param param,
IN
constbyte*
in_buf,
INushort
size_buf,
OUT ora_error_t*error/*NULL for no err msg return*/
);
BOOL ORADB_CALL ORA_param_is_null (
IN ora_param param
);
/*returns column value as string*/
lresult ORADB_CALL ORA_param_as_string (
IN ora_param param,
OUT
char**outval,/*Returns address of pointer to actual data*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*returns param value as double*/
lresult ORADB_CALL ORA_param_as_double (
IN ora_param param,
OUT
double*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as float32*/
lresult ORADB_CALL ORA_param_as_float (
IN ora_param param,
OUT
float*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as long*/
lresult ORADB_CALL ORA_param_as_long (
IN ora_param param,
OUT
long*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as unsigned long*/
lresult ORADB_CALL ORA_param_as_ulong (
IN ora_param param,
OUT
ulong*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as long*/
lresult ORADB_CALL ORA_param_as_longlong (
IN ora_param param,
OUT longlong
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as unsigned long*/
lresult ORADB_CALL ORA_param_as_ulonglong (
IN ora_param param,
OUT ulonglong
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as datetime*/
lresult ORADB_CALL ORA_param_as_datetime (
IN ora_param param,
OUT ora_datetime
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*returns param value as rowset*/
lresult ORADB_CALL ORA_param_as_rowset (
IN ora_param param,
OUT ora_rowset
*
outval,
OUT ora_error_t*error/*NULL for no err msg return*/
);
/*
======================================================================
datetime Functions - oradate.c
======================================================================*/
/*creates a datetime opaque pointer which must be free after using*/
lresult ORADB_CALL ORA_datetime_create (
OUT ora_datetime
*dt/*must be a valid pointer*/
);
lresult ORADB_CALL ORA_datetime_set_all (
IN ora_datetime dt,
IN
shortyear,/*gregorian year; range is -4712 <= year <= 9999*/
IN ORADBI_DTMonth month,
/*month; range is 1 <= month
IN
byteday,/*day; range is 1 <= day <= 31*/
IN
bytehours,/*hours; range is 0 <= hours <=23*/
IN
byteminutes,/*minutes; range is 0 <= minutes <= 59*/
IN
byteseconds,/*seconds; range is 0 <= seconds <= 59*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
void
ORADB_CALL ORA_datetime_get_all (
IN ora_datetime dt,
OUTshort*year,/*gregorian year; range is -4712 <= year <= 9999*/
OUT ORADBI_DTMonth
*month,/*month; range is 1 <= month
OUT
byte*day,/*day; range is 1 <= day <= 31*/
OUT
byte*hours,/*hours; range is 0 <= hours <=23*/
OUT
byte*minutes,/*minutes; range is 0 <= minutes <= 59*/
OUT
byte*seconds/*seconds; range is 0 <= seconds <= 59*/
);
lresult ORADB_CALL ORA_datetime_set_fld (
IN ora_datetime dt,
IN ORADBI_DTField dt_field,
IN
short
dt_val,
OUT ora_error_t*error/*NULL for no err msg return*/
);
short
ORADB_CALL ORA_datetime_get_fld (
IN ora_datetime dt,
IN ORADBI_DTField dt_field
);
lresult ORADB_CALL ORA_string_to_datetime (
INconstchar*dt_string,/*datetime string such as: 1975-08-14 12:53:42*/
IN
char*dt_format,/*datetime format such as: yyyy-mm-dd hh:uu:ss*/
OUT ora_datetime dt_to,
/*datetime that string translated to*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
lresult ORADB_CALL ORA_datetime_to_string (
IN ora_datetime dt_in,
/*datetime to be translated*/
IN
char*dt_format,/*datetime format such as: yyyy-mm-dd hh:uu:ss*/
OUT
char*string_to,/*datetime string such as: 1975-08-14 12:53:42*/
OUT ora_error_t
*error/*NULL for no err msg return*/
);
/*frees a ora_datetime*/
void
ORADB_CALL ORA_datetime_free (
IN ora_datetime dt
);
#ifdef __cplusplus
}#endif
/*====================================================================*/
#endif/* ndef ORADBI_H_INCLUDED . cheungmine@gmail.com */