Author: byterock
Date: Fri Jul 4 10:39:03 2008
New Revision: 11484
Modified:
dbd-oracle/trunk/Todo
dbd-oracle/trunk/dbdimp.c
dbd-oracle/trunk/dbdimp.h
dbd-oracle/trunk/oci8.c
dbd-oracle/trunk/ocitrace.h
Log:
added more debugging info function for OCI magic numbers.
Modified: dbd-oracle/trunk/Todo
==============================================================================
--- dbd-oracle/trunk/Todo (original)
+++ dbd-oracle/trunk/Todo Fri Jul 4 10:39:03 2008
@@ -1,22 +1,26 @@
[ In no particular order ]
Seems this file has been neglected for quite a while so I will try to keep it
up to date for now
+
+For release 1.23 or later
+
+Drop support for early 9 versions namely support for NEW_OCI_INIT (get rid of
the old code in here)
For release 1.22 or later
-
-Drop support for Oralce 8 and earlier
+
+--> done 1.22Drop support for Oralce 8 and earlier
add support for $dbh->trace('SQL');
Replace OCIInitialize + OCIEnvInit, with OCIEnvCreate
-Add in the DBD only debugging flag
+--> done 1.22 dbd_verbose ora_verbose Add in the DBD only debugging flag
-Add new method oci_exe_mode to get the Name of the Execution Modes
+--> done 1.22 Add new method oci_exe_mode to get the Name of the Execution
Modes
Add support for OCIClientVersion(),OCIPing(),OCIServerVersion()
-Expand support for Data Interface for Persistent LOBs by setting up support
+-->done 1.22 Expand support for Data Interface for Persistent LOBs by setting
up support
for Piecewise Fetch and Piecewise Fetch with Callback and perhaps Array Fetch
as well
Add support for version 2 of lob functions
Modified: dbd-oracle/trunk/dbdimp.c
==============================================================================
--- dbd-oracle/trunk/dbdimp.c (original)
+++ dbd-oracle/trunk/dbdimp.c Fri Jul 4 10:39:03 2008
@@ -364,8 +364,11 @@
D_imp_drh_from_dbh;
ub2 new_charsetid = 0;
ub2 new_ncharsetid = 0;
- /* dbi_imp_data code adapted from DBD::mysql */
+ /* check to see if DBD_verbose or ora_verbose is set*/
+ if ( (svp=DBD_ATTRIB_GET_SVP(attr, "dbd_verbose",11)) && SvOK(*svp) ||
(svp=DBD_ATTRIB_GET_SVP(attr, "ora_verbose",11)) && SvOK(*svp))
+ dbd_verbose =(int)svp;
+ /* dbi_imp_data code adapted from DBD::mysql */
if (DBIc_has(imp_dbh, DBIcf_IMPSET)) {
/* dbi_imp_data from take_imp_data */
if (DBIc_has(imp_dbh, DBIcf_ACTIVE)) {
@@ -484,12 +487,15 @@
if (!imp_dbh->envhp || is_extproc) {
SV **init_mode_sv;
ub4 init_mode = OCI_OBJECT; /* needed for LOBs (8.0.4) */
+
+
DBD_ATTRIB_GET_IV(attr, "ora_init_mode",13, init_mode_sv, init_mode);
#if defined(USE_ITHREADS) || defined(MULTIPLICITY) || defined(USE_5005THREADS)
init_mode |= OCI_THREADED;
#endif
+
if (use_proc_connection) {
char *err_hint = Nullch;
#ifdef SQL_SINGLE_RCTX
@@ -550,7 +556,7 @@
attribute and ncharset controls the encoding for data with
SQLCS_NCHAR
form attribute.
}*/
-
+
OCIEnvNlsCreate_log_stat( &imp_dbh->envhp, init_mode, 0, NULL,
NULL, NULL, 0, 0,
charsetid, ncharsetid, status );
if (status != OCI_SUCCESS) {
@@ -608,13 +614,15 @@
/* OCIInitialize + OCIEnvInit, we'd need ifdef's for
pre-OCIEnvNlsCreate */
OCIInitialize_log_stat(init_mode, 0, 0,0,0, status);
+
+
if (status != OCI_SUCCESS) {
oci_error(dbh, NULL, status,
"OCIInitialize. Check ORACLE_HOME env var, Oracle NLS
settings, permissions etc.");
return 0;
}
- OCIEnvInit_log_stat( &imp_dbh->envhp, OCI_DEFAULT, 0, 0, status);
+ OCIEnvInit_log_stat( &imp_dbh->envhp, OCI_DEFAULT, 0, 0,
status);
if (status != OCI_SUCCESS) {
oci_error(dbh, (OCIError*)imp_dbh->envhp, status, "OCIEnvInit");
return 0;
@@ -721,7 +729,7 @@
OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->srvhp,
OCI_HTYPE_SERVER, status);
OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->svchp,
OCI_HTYPE_SVCCTX, status);
- OCIServerAttach_log_stat(imp_dbh, dbname, status);
+ OCIServerAttach_log_stat(imp_dbh, dbname,OCI_DEFAULT, status);
if (status != OCI_SUCCESS) {
oci_error(dbh, imp_dbh->errhp, status, "OCIServerAttach");
OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER,
status);
Modified: dbd-oracle/trunk/dbdimp.h
==============================================================================
--- dbd-oracle/trunk/dbdimp.h (original)
+++ dbd-oracle/trunk/dbdimp.h Fri Jul 4 10:39:03 2008
@@ -291,7 +291,11 @@
#define oci_error(h, errhp, status, what) oci_error_err(h, errhp, status,
what, 0)
char *oci_stmt_type_name _((int stmt_type));
char *oci_status_name _((sword status));
-char * oci_hdtype_name _((ub4 hdtype));
+char *oci_mode _((ub4 mode));
+char *oci_bind_options _((ub4 options));
+char *oci_define_options _((ub4 options));
+char *oci_hdtype_name _((ub4 hdtype));
+char *oci_exe_mode _((ub4 mode));
int dbd_rebind_ph_lob _((SV *sth, imp_sth_t *imp_sth, phs_t *phs));
int dbd_rebind_ph_nty _((SV *sth, imp_sth_t *imp_sth, phs_t *phs));
Modified: dbd-oracle/trunk/oci8.c
==============================================================================
--- dbd-oracle/trunk/oci8.c (original)
+++ dbd-oracle/trunk/oci8.c Fri Jul 4 10:39:03 2008
@@ -40,9 +40,39 @@
}
char *
+oci_exe_mode(ub4 mode)
+{
+
+ dTHX;
+ SV *sv;
+ switch (mode) {
+ /*----------------------- Execution Modes
-----------------------------------*/
+ case OCI_DEFAULT: return "DEFAULT";
+ case OCI_BATCH_MODE: return "BATCH_MODE"; /* batch
the oci stmt for exec */
+ case OCI_EXACT_FETCH: return "EXACT_FETCH"; /*
fetch exact rows specified */
+ case OCI_STMT_SCROLLABLE_READONLY : return
"STMT_SCROLLABLE_READONLY";
+ case OCI_DESCRIBE_ONLY: return "DESCRIBE_ONLY"; /*
only describe the statement */
+ case OCI_COMMIT_ON_SUCCESS: return "COMMIT_ON_SUCCESS";
/* commit, if successful exec */
+ case OCI_NON_BLOCKING: return "NON_BLOCKING";
/* non-blocking */
+ case OCI_BATCH_ERRORS: return "BATCH_ERRORS"; /*
batch errors in array dmls */
+ case OCI_PARSE_ONLY: return "PARSE_ONLY"; /*
only parse the statement */
+ case OCI_SHOW_DML_WARNINGS: return "SHOW_DML_WARNINGS";
+ case OCI_RESULT_CACHE: return "RESULT_CACHE"; /*
hint to use query caching */
+ case OCI_NO_RESULT_CACHE : return "NO_RESULT_CACHE";
/*hint to bypass query caching*/
+ }
+ sv = sv_2mortal(newSVpv("",0));
+ sv_grow(sv, 50);
+ sprintf(SvPVX(sv),"(UNKNOWN OCI EXECUTE MODE %d)", mode);
+ return SvPVX(sv);
+}
+
+
+char *
oci_typecode_name(int typecode){
dTHX;
+ SV *sv;
+
switch (typecode) {
case OCI_TYPECODE_INTERVAL_YM: return "INTERVAL_YM";
case OCI_TYPECODE_INTERVAL_DS: return "NTERVAL_DS";
@@ -75,7 +105,12 @@
case OCI_TYPECODE_TABLE: return "TABLE";
case OCI_TYPECODE_NAMEDCOLLECTION: return "NAMEDCOLLECTION";
}
- return "undef";
+
+ sv = sv_2mortal(newSVpv("",0));
+ sv_grow(sv, 50);
+ sprintf(SvPVX(sv),"(UNKNOWN OCI TYPECODE %d)", typecode);
+ return SvPVX(sv);
+
}
char *
@@ -84,14 +119,14 @@
dTHX;
SV *sv;
switch (status) {
- case OCI_SUCCESS: return "SUCCESS";
+ case OCI_SUCCESS: return "SUCCESS";
case OCI_SUCCESS_WITH_INFO: return "SUCCESS_WITH_INFO";
- case OCI_NEED_DATA: return "NEED_DATA";
- case OCI_NO_DATA: return "NO_DATA";
- case OCI_ERROR: return "ERROR";
+ case OCI_NEED_DATA: return "NEED_DATA";
+ case OCI_NO_DATA: return "NO_DATA";
+ case OCI_ERROR: return "ERROR";
case OCI_INVALID_HANDLE: return "INVALID_HANDLE";
case OCI_STILL_EXECUTING: return "STILL_EXECUTING";
- case OCI_CONTINUE: return "CONTINUE";
+ case OCI_CONTINUE: return "CONTINUE";
}
sv = sv_2mortal(newSVpv("",0));
sv_grow(sv, 50);
@@ -99,6 +134,109 @@
return SvPVX(sv);
}
+/* the various modes used in OCI */
+char *
+oci_define_options(ub4 options)
+{
+ dTHX;
+ SV *sv;
+ switch (options) {
+ /*------------------------Bind and Define
Options----------------------------*/
+ case OCI_DEFAULT: return "DEFAULT";
+ case OCI_DYNAMIC_FETCH: return "DYNAMIC_FETCH";
/* fetch dynamically */
+
+ }
+ sv = sv_2mortal(newSVpv("",0));
+ sv_grow(sv, 50);
+ sprintf(SvPVX(sv),"(UNKNOWN OCI DEFINE MODE %d)", options);
+ return SvPVX(sv);
+}
+
+char *
+oci_bind_options(ub4 options)
+{
+ dTHX;
+ SV *sv;
+ switch (options) {
+ /*------------------------Bind and Define
Options----------------------------*/
+ case OCI_DEFAULT: return "DEFAULT";
+ case OCI_SB2_IND_PTR: return "SB2_IND_PTR";
/* unused */
+ case OCI_DATA_AT_EXEC: return "DATA_AT_EXEC"; /*
data at execute time */
+ case OCI_PIECEWISE: return "PIECEWISE"; /*
piecewise DMLs or fetch */
+ case OCI_BIND_SOFT: return "BIND_SOFT"; /*
soft bind or define */
+ case OCI_DEFINE_SOFT: return "DEFINE_SOFT"; /* soft
bind or define */
+ case OCI_IOV: return ""; /* For scatter
gather bind/define */
+
+ }
+ sv = sv_2mortal(newSVpv("",0));
+ sv_grow(sv, 50);
+ sprintf(SvPVX(sv),"(UNKNOWN BIND MODE %d)", options);
+ return SvPVX(sv);
+}
+
+/* the various modes used in OCI */
+char *
+oci_mode(ub4 mode)
+{
+ dTHX;
+ SV *sv;
+ switch (mode) {
+ case 3: return "THREADED |
OBJECT";
+ case OCI_DEFAULT: return "DEFAULT";
+ /* the default value for parameters and attributes */
+ /*-------------OCIInitialize Modes / OCICreateEnvironment Modes
-------------*/
+ case OCI_THREADED: return "THREADED"; /* appl. in
threaded environment */
+ case OCI_OBJECT: return "OBJECT"; /* application in
object environment */
+ case OCI_EVENTS: return "EVENTS"; /* application is
enabled for events */
+ case OCI_SHARED: return "SHARED"; /* the application is
in shared mode */
+ /* The following *TWO* are only valid for OCICreateEnvironment
call */
+ case OCI_NO_UCB: return "NO_UCB "; /* No user callback
called during ini */
+ case OCI_NO_MUTEX: return "NO_MUTEX"; /* the environment
handle will not be */
+ /* protected by a mutex
internally */
+ case OCI_SHARED_EXT: return "SHARED_EXT"; /*
Used for shared forms */
+ case OCI_ALWAYS_BLOCKING:return "ALWAYS_BLOCKING"; /* all
connections always blocking */
+ case OCI_USE_LDAP: return "USE_LDAP"; /* allow
LDAP connections */
+ case OCI_REG_LDAPONLY: return "REG_LDAPONLY"; /*
only register to LDAP */
+ case OCI_UTF16: return "UTF16"; /* mode for all
UTF16 metadata */
+ case OCI_AFC_PAD_ON: return "AFC_PAD_ON"; /* turn on AFC
blank padding when rlenp present */
+ case OCI_NEW_LENGTH_SEMANTICS: return "NEW_LENGTH_SEMANTICS";
/* adopt new length semantics */
+
/* the new length semantics, always bytes, is used by
OCIEnvNlsCreate */
+ case OCI_NO_MUTEX_STMT: return "NO_MUTEX_STMT"; /*
Do not mutex stmt handle */
+ case OCI_MUTEX_ENV_ONLY: return "MUTEX_ENV_ONLY"; /* Mutex
only the environment handle */
+ case OCI_SUPPRESS_NLS_VALIDATION: return
"SUPPRESS_NLS_VALIDATION"; /* suppress nls validation */
+
/* nls validation suppression is on by default;
+
use OCI_ENABLE_NLS_VALIDATION to disable it */
+ case OCI_MUTEX_TRY: return "MUTEX_TRY"; /*
try and acquire mutex */
+ case OCI_NCHAR_LITERAL_REPLACE_ON: return
"NCHAR_LITERAL_REPLACE_ON"; /* nchar literal replace on */
+ case OCI_NCHAR_LITERAL_REPLACE_OFF:return
"NCHAR_LITERAL_REPLACE_OFF"; /* nchar literal replace off*/
+ case OCI_ENABLE_NLS_VALIDATION: return
"ENABLE_NLS_VALIDATION"; /* enable nls validation */
+ /*------------------------OCIConnectionpoolCreate
Modes----------------------*/
+ case OCI_CPOOL_REINITIALIZE: return "CPOOL_REINITIALIZE";
+ /*--------------------------------- OCILogon2 Modes
-------------------------*/
+/*case OCI_LOGON2_SPOOL: return "LOGON2_SPOOL"; /* Use session pool
*/
+ case OCI_LOGON2_CPOOL: return "LOGON2_CPOOL"; /* Use
connection pool */
+/*case OCI_LOGON2_STMTCACHE: return "LOGON2_STMTCACHE"; /* Use Stmt
Caching */
+ case OCI_LOGON2_PROXY: return "LOGON2_PROXY"; /*
Proxy authentiaction */
+ /*------------------------- OCISessionPoolCreate Modes
----------------------*/
+/*case OCI_SPC_REINITIALIZE: return "SPC_REINITIALIZE"; /*
Reinitialize the session pool */
+/*case OCI_SPC_HOMOGENEOUS: return "SPC_HOMOGENEOUS"; ""; /*
Session pool is homogeneneous */
+/*case OCI_SPC_STMTCACHE: return "SPC_STMTCACHE"; /* Session
pool has stmt cache */
+/*case OCI_SPC_NO_RLB: return "SPC_NO_RLB "; /* Do not enable
Runtime load balancing. */
+ /*--------------------------- OCISessionGet Modes
---------------------------*/
+/*case OCI_SESSGET_SPOOL: return "SESSGET_SPOOL"; /* SessionGet
called in SPOOL mode */
+/*case OCI_SESSGET_CPOOL: return "SESSGET_CPOOL"; /* SessionGet
called in CPOOL mode */
+/*case OCI_SESSGET_STMTCACHE: return "SESSGET_STMTCACHE"; /*
Use statement cache */
+/*case OCI_SESSGET_CREDPROXY: return "SESSGET_CREDPROXY"; /* SessionGet
called in proxy mode */
+/*case OCI_SESSGET_CREDEXT: return "SESSGET_CREDEXT"; */
+ case OCI_SESSGET_SPOOL_MATCHANY:return "SESSGET_SPOOL_MATCHANY";
+/*case OCI_SESSGET_PURITY_NEW: return "SESSGET_PURITY_NEW";
+ case OCI_SESSGET_PURITY_SELF: return "SESSGET_PURITY_SELF"; */
+ }
+ sv = sv_2mortal(newSVpv("",0));
+ sv_grow(sv, 50);
+ sprintf(SvPVX(sv),"(UNKNOWN OCI MODE %d)", mode);
+ return SvPVX(sv);
+}
char *
oci_stmt_type_name(int stmt_type)
Modified: dbd-oracle/trunk/ocitrace.h
==============================================================================
--- dbd-oracle/trunk/ocitrace.h (original)
+++ dbd-oracle/trunk/ocitrace.h Fri Jul 4 10:39:03 2008
@@ -213,8 +213,8 @@
stat = OCIEnvNlsCreate(envp, mode, ctxp, f1, f2, f3, sz, usremepp ,chset,
nchset ); \
(DBD_OCI_TRACEON) \
? PerlIO_printf(DBD_OCI_TRACEFP,\
- "%sNlsEnvCreate(%p,%d,%d,%p,%p,%p,%d,%p,%d,%d)=%s\n", \
- OciTp, (void*)envp, mode, ctxp, (void*)f1, (void*)f2, (void*)f3, sz,
(void*)usremepp ,chset, nchset, oci_status_name(stat)),stat \
+ "%sNlsEnvCreate(%p,%s,%d,%d,%p,%p,%p,%d,%p,%d,%d)=%s\n", \
+ OciTp, (void*)envp, oci_mode(mode),mode, ctxp, (void*)f1, (void*)f2,
(void*)f3, sz, (void*)usremepp ,chset, nchset, oci_status_name(stat)),stat \
: stat
@@ -249,10 +249,10 @@
stat=OCIBindByName(sh,bp,eh,p1,pl,v,vs,dt,in,al,rc,mx,cu,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
"%sBindByName(%p,%p,%p,\"%s\",placeh_len=%ld,value_p=%p,value_sz=%ld," \
- "dty=%u,indp=%p,alenp=%p,rcodep=%p,maxarr_len=%lu,curelep=%p
(*=%d),mode=%lu)=%s\n",\
+ "dty=%u,indp=%p,alenp=%p,rcodep=%p,maxarr_len=%lu,curelep=%p
(*=%d),mode=%s,%lu)=%s\n",\
OciTp, (void*)sh,(void*)bp,(void*)eh,p1,sl_t(pl),(void*)(v), \
sl_t(vs),(ub2)(dt),(void*)(in),(ub2*)(al),(ub2*)(rc), \
- ul_t((mx)),pul_t((cu)),(cu ? *(int*)cu : 0 ) ,ul_t((md)),
\
+ ul_t((mx)),pul_t((cu)),(cu ? *(int*)cu : 0 )
,oci_bind_options(md),ul_t((md)), \
oci_status_name(stat)),stat : stat
#define OCIBindArrayOfStruct_log_stat(bp,ep,sd,si,sl,sr,stat) \
@@ -273,9 +273,9 @@
#define OCIDefineByPos_log_stat(sh,dp,eh,p1,vp,vs,dt,ip,rp,cp,m,stat) \
stat=OCIDefineByPos(sh,dp,eh,p1,vp,vs,dt,ip,rp,cp,m); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sDefineByPos(%p,%p,%p,%lu,%p,%ld,%u,%p,%p,%p,%lu)=%s\n", \
+ "%sDefineByPos(%p,%p,%p,%lu,%p,%ld,%u,%p,%p,%p,mode=%s,%lu)=%s\n",
\
OciTp, (void*)sh,(void*)dp,(void*)eh,ul_t((p1)),(void*)(vp), \
- sl_t(vs),(ub2)dt,(void*)(ip),(ub2*)(rp),(ub2*)(cp),ul_t(m), \
+
sl_t(vs),(ub2)dt,(void*)(ip),(ub2*)(rp),(ub2*)(cp),oci_define_options(m),ul_t(m),
\
oci_status_name(stat)),stat : stat
#define OCIDescribeAny_log_stat(sh,eh,op,ol,opt,il,ot,dh,stat) \
@@ -333,8 +333,8 @@
#define OCIInitialize_log_stat(md,cp,mlf,rlf,mfp,stat) \
stat=OCIInitialize(md,cp,mlf,rlf,mfp); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sInitialize(%lu,%p,%p,%p,%p)=%s\n", \
- OciTp, ul_t(md),(void*)cp,(void*)mlf,(void*)rlf,(void*)mfp, \
+ "%sInitialize(%lu,with mode =%s %p,%p,%p,%p)=%s\n",
\
+ OciTp,
oci_mode(md),ul_t(md),(void*)cp,(void*)mlf,(void*)rlf,(void*)mfp, \
oci_status_name(stat)),stat : stat
#define OCILobGetLength_log_stat(sh,eh,lh,l,stat) \
@@ -433,20 +433,20 @@
OciTp, (void*)hp,ul_t((ht)),(void*)eh,(void*)pp,ul_t(ps), \
oci_status_name(stat)),stat : stat
-#define OCIServerAttach_log_stat(imp_dbh, dbname,stat) \
+#define OCIServerAttach_log_stat(imp_dbh, dbname,md,stat) \
stat=OCIServerAttach( imp_dbh->srvhp, imp_dbh->errhp, \
- (text*)dbname, (sb4)strlen(dbname), 0);
\
+ (text*)dbname, (sb4)strlen(dbname), md);
\
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sServerAttach(%p, %p, \"%s\", %d, 0)=%s\n", \
+ "%sServerAttach(%p, %p, \"%s\", %d, mode=%s,%d)=%s\n",
\
OciTp, (void*)imp_dbh->srvhp,(void*)imp_dbh->errhp, dbname, \
- strlen(dbname), oci_status_name(stat)),stat : stat
+ strlen(dbname), oci_mode(md),ul_t(md),oci_status_name(stat)),stat :
stat
#define OCIStmtExecute_log_stat(sv,st,eh,i,ro,si,so,md,stat) \
stat=OCIStmtExecute(sv,st,eh,i,ro,si,so,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sStmtExecute(%p,%p,%p,%lu,%lu,%p,%p,%lu)=%s\n", \
+ "%sStmtExecute(%p,%p,%p,%lu,%lu,%p,%p,mode=%s,%lu)=%s\n",
\
OciTp, (void*)sv,(void*)st,(void*)eh,ul_t((i)), \
- ul_t((ro)),(void*)(si),(void*)(so),ul_t((md)), \
+ ul_t((ro)),(void*)(si),(void*)(so),oci_exe_mode(md),ul_t((md)),
\
oci_status_name(stat)),stat : stat
#define OCIStmtFetch_log_stat(sh,eh,nr,or,os,stat) \
stat=OCIStmtFetch2(sh,eh,nr,or,os,OCI_DEFAULT);
\
@@ -465,22 +465,22 @@
#define OCIServerDetach_log_stat(sh,eh,md,stat) \
stat=OCIServerDetach(sh,eh,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sServerDetach(%p,%p,%lu)=%s\n", \
- OciTp, (void*)sh,(void*)eh,ul_t(md), \
+ "%sServerDetach(%p,%p,mode=%s,%lu)=%s\n",
\
+ OciTp, (void*)sh,(void*)eh,oci_mode(md),ul_t(md),
\
oci_status_name(stat)),stat : stat
#define OCISessionBegin_log_stat(sh,eh,uh,cr,md,stat) \
stat=OCISessionBegin(sh,eh,uh,cr,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sSessionBegin(%p,%p,%p,%lu,%lu)=%s\n", \
- OciTp, (void*)sh,(void*)eh,(void*)uh,ul_t(cr),ul_t(md), \
+ "%sSessionBegin(%p,%p,%p,%lu,mode=%s %lu)=%s\n",
\
+ OciTp, (void*)sh,(void*)eh,(void*)uh,ul_t(cr),oci_mode(md),ul_t(md),
\
oci_status_name(stat)),stat : stat
#define OCISessionEnd_log_stat(sh,eh,ah,md,stat) \
stat=OCISessionEnd(sh,eh,ah,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sSessionEnd(%p,%p,%p,%lu)=%s\n", \
- OciTp, (void*)sh,(void*)eh,(void*)ah,ul_t(md), \
+ "%sSessionEnd(%p,%p,%p,mode=%s %lu)=%s\n",
\
+ OciTp, (void*)sh,(void*)eh,(void*)ah,oci_mode(md),ul_t(md),
\
oci_status_name(stat)),stat : stat
#define OCITransCommit_log_stat(sh,eh,md,stat) \
@@ -493,8 +493,8 @@
#define OCITransRollback_log_stat(sh,eh,md,stat) \
stat=OCITransRollback(sh,eh,md); \
(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,
\
- "%sTransRollback(%p,%p,%lu)=%s\n", \
- OciTp, (void*)sh,(void*)eh,ul_t(md), \
+ "%sTransRollback(%p,%p,mode=%s %lu)=%s\n",
\
+ OciTp, (void*)sh,(void*)eh,oci_mode(md),ul_t(md),
\
oci_status_name(stat)),stat : stat
#endif /* !DBD_OCI_TRACEON */