develooper Front page | perl.dbd.oracle.changes | Postings from March 2012

[svn:dbd-oracle] r15225 - dbd-oracle/trunk

From:
mjevans
Date:
March 15, 2012 10:08
Subject:
[svn:dbd-oracle] r15225 - dbd-oracle/trunk
Message ID:
20120315170826.77187184B87@xx12.develooper.com
Author: mjevans
Date: Thu Mar 15 10:08:24 2012
New Revision: 15225

Modified:
   dbd-oracle/trunk/Oracle.xs
   dbd-oracle/trunk/dbdimp.c
   dbd-oracle/trunk/dbdimp.h
   dbd-oracle/trunk/oci8.c
   dbd-oracle/trunk/ocitrace.h

Log:
More changes to remove DBIS usage


Modified: dbd-oracle/trunk/Oracle.xs
==============================================================================
--- dbd-oracle/trunk/Oracle.xs	(original)
+++ dbd-oracle/trunk/Oracle.xs	Thu Mar 15 10:08:24 2012
@@ -305,9 +305,9 @@
 			croak("ora_pfile is not a string");
 		str = (text*)SvPV(*svp, svp_len);
 		OCIHandleAlloc(imp_dbh->envhp, (dvoid**)&admhp, (ub4)OCI_HTYPE_ADMIN, (size_t)0, (dvoid**)0);
-		OCIAttrSet_log_stat((dvoid*)admhp, (ub4)OCI_HTYPE_ADMIN, (dvoid*)str, (ub4)svp_len, (ub4)OCI_ATTR_ADMIN_PFILE, (OCIError*)imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, (dvoid*)admhp, (ub4)OCI_HTYPE_ADMIN, (dvoid*)str, (ub4)svp_len, (ub4)OCI_ATTR_ADMIN_PFILE, (OCIError*)imp_dbh->errhp, status);
   }
-	OCIDBStartup_log_stat(imp_dbh->svchp, imp_dbh->errhp, admhp, mode, flags, status);
+	OCIDBStartup_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, admhp, mode, flags, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCIDBStartup");
 		ST(0) = &PL_sv_undef;
@@ -315,7 +315,7 @@
 	else {
 		ST(0) = &PL_sv_yes;
 	}
-	if (admhp) OCIHandleFree_log_stat((dvoid*)admhp, (ub4)OCI_HTYPE_ADMIN, status);
+	if (admhp) OCIHandleFree_log_stat(imp_dbh, (dvoid*)admhp, (ub4)OCI_HTYPE_ADMIN, status);
 #else
 	croak("OCIDBStartup not available");
 #endif
@@ -338,7 +338,7 @@
 	mode = OCI_DEFAULT;
 	DBD_ATTRIB_GET_IV(attribs, "ora_mode", 8, svp, mode);
 	admhp = (OCIAdmin*)0;
-	OCIDBShutdown_log_stat(imp_dbh->svchp, imp_dbh->errhp, admhp, mode, status);
+	OCIDBShutdown_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, admhp, mode, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCIDBShutdown");
 		ST(0) = &PL_sv_undef;
@@ -359,7 +359,7 @@
 	ub4 can_taf = 0;
 	CODE:
 #ifdef OCI_ATTR_TAF_ENABLED
-	OCIAttrGet_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, &can_taf, NULL,
+	OCIAttrGet_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, &can_taf, NULL,
 				OCI_ATTR_TAF_ENABLED, imp_dbh->errhp, status);
 	if (status != OCI_SUCCESS) {
 # else
@@ -391,14 +391,14 @@
 	/*so we should stay connected but we cannot get nay new connections*/
 	{
 #if !defined(ORA_OCI_102)
-	OCIServerVersion_log_stat(imp_dbh->svchp,imp_dbh->errhp,buf,2,OCI_HTYPE_SVCCTX,status);
+	OCIServerVersion_log_stat(imp_dbh, imp_dbh->svchp,imp_dbh->errhp,buf,2,OCI_HTYPE_SVCCTX,status);
 #else
 	vernum = ora_db_version(dbh,imp_dbh);
 	/* OCIPing causes server failures if called against server ver < 10.2 */
 	if (((int)((vernum>>24) & 0xFF) < 10 ) || (((int)((vernum>>24) & 0xFF) == 10 ) && ((int)((vernum>>20) & 0x0F) < 2 ))){
-		OCIServerVersion_log_stat(imp_dbh->svchp,imp_dbh->errhp,buf,2,OCI_HTYPE_SVCCTX,status);
+		OCIServerVersion_log_stat(imp_dbh, imp_dbh->svchp,imp_dbh->errhp,buf,2,OCI_HTYPE_SVCCTX,status);
 	} else {
-    	OCIPing_log_stat(imp_dbh->svchp,imp_dbh->errhp,status);
+    	OCIPing_log_stat(imp_dbh, imp_dbh->svchp,imp_dbh->errhp,status);
 	}
 #endif
 	if (status != OCI_SUCCESS){
@@ -441,7 +441,7 @@
 	/* if (0 && SvUTF8(data) && !IN_BYTES) { amtp = sv_len_utf8(data); }  */
 	/* added by lab: */
 	/* LAB do something about length here? see above comment */
-	 OCILobCharSetForm_log_stat( imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
+	 OCILobCharSetForm_log_stat(imp_dbh, imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobCharSetForm");
 	ST(0) = &PL_sv_undef;
@@ -449,7 +449,12 @@
 	}
 #ifdef OCI_ATTR_CHARSET_ID
 	/* Effectively only used so AL32UTF8 works properly */
-	OCILobCharSetId_log_stat( imp_dbh->envhp, imp_dbh->errhp, locator, &csid, status );
+	OCILobCharSetId_log_stat(imp_dbh,
+                             imp_dbh->envhp,
+                             imp_dbh->errhp,
+                             locator,
+                             &csid,
+                             status );
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobCharSetId");
 	ST(0) = &PL_sv_undef;
@@ -459,7 +464,7 @@
 	/* if data is utf8 but charset isn't then switch to utf8 csid */
 	csid = (SvUTF8(data) && !CS_IS_UTF8(csid)) ? utf8_csid : CSFORM_IMPLIED_CSID(csform);
 
-	OCILobWrite_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator,
+	OCILobWrite_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator,
 		&amtp, (ub4)offset,
 		bufp, (ub4)data_len, OCI_ONE_PIECE,
 		NULL, NULL,
@@ -497,7 +502,7 @@
 	/* if (1 && SvUTF8(data) && !IN_BYTES) */
 	/* added by lab: */
 	/* LAB do something about length here? see above comment */
-	OCILobCharSetForm_log_stat( imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
+	OCILobCharSetForm_log_stat(imp_dbh, imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobCharSetForm");
 	ST(0) = &PL_sv_undef;
@@ -505,7 +510,12 @@
 	}
 #ifdef OCI_ATTR_CHARSET_ID
 	/* Effectively only used so AL32UTF8 works properly */
-	OCILobCharSetId_log_stat( imp_dbh->envhp, imp_dbh->errhp, locator, &csid, status );
+	OCILobCharSetId_log_stat(imp_dbh,
+                             imp_dbh->envhp,
+                             imp_dbh->errhp,
+                             locator,
+                             &csid,
+                             status );
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobCharSetId");
 	ST(0) = &PL_sv_undef;
@@ -514,7 +524,7 @@
 #endif /* OCI_ATTR_CHARSET_ID */
 	/* if data is utf8 but charset isn't then switch to utf8 csid */
 	csid = (SvUTF8(data) && !CS_IS_UTF8(csid)) ? utf8_csid : CSFORM_IMPLIED_CSID(csform);
-	OCILobWriteAppend_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator,
+	OCILobWriteAppend_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator,
 				   &amtp, bufp, (ub4)data_len, OCI_ONE_PIECE,
 				   NULL, NULL,
 				   csid, csform, status);
@@ -554,7 +564,7 @@
 	/* if locator is CLOB and data is UTF8 and not in bytes pragma */
 	/* if (0 && SvUTF8(dest_sv) && !IN_BYTES) { amtp = sv_len_utf8(dest_sv); }  */
 	/* added by lab: */
-	OCILobCharSetForm_log_stat( imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
+	OCILobCharSetForm_log_stat(imp_dbh,  imp_dbh->envhp, imp_dbh->errhp, locator, &csform, status );
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobCharSetForm");
 	dest_sv = &PL_sv_undef;
@@ -564,9 +574,9 @@
         /* see rt 75163 */
         boolean is_open;
 
-        OCILobFileIsOpen_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator, &is_open, status);
+        OCILobFileIsOpen_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator, &is_open, status);
         if (status == OCI_SUCCESS && !is_open) {
-            OCILobFileOpen_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator,
+            OCILobFileOpen_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator,
                                     (ub1)OCI_FILE_READONLY, status);
             if (status != OCI_SUCCESS) {
                 oci_error(dbh, imp_dbh->errhp, status, "OCILobFileOpen");
@@ -575,7 +585,7 @@
         }
     }
 
-	OCILobRead_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator,
+	OCILobRead_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator,
 		&amtp, (ub4)offset, /* offset starts at 1 */
 		bufp, (ub4)bufp_len,
 		0, 0, (ub2)0, csform, status);
@@ -603,7 +613,7 @@
 	D_imp_dbh(dbh);
 	sword status;
 	CODE:
-	OCILobTrim_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator, length, status);
+	OCILobTrim_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator, length, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobTrim");
 	ST(0) = &PL_sv_undef;
@@ -621,7 +631,7 @@
 	sword status;
 	boolean is_init = 0;
 	CODE:
-	OCILobLocatorIsInit_log_stat(imp_dbh->envhp,imp_dbh->errhp,locator,&is_init,status);
+	OCILobLocatorIsInit_log_stat(imp_dbh, imp_dbh->envhp,imp_dbh->errhp,locator,&is_init,status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobLocatorIsInit ora_lob_is_init");
 	    ST(0) = &PL_sv_undef;
@@ -639,7 +649,7 @@
 	sword status;
 	ub4 len = 0;
 	CODE:
-	OCILobGetLength_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator, &len, status);
+	OCILobGetLength_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator, &len, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobGetLength ora_lob_length");
 	ST(0) = &PL_sv_undef;
@@ -658,7 +668,7 @@
 	sword status;
 	ub4 chunk_size = 0;
 	CODE:
-	OCILobGetChunkSize_log_stat(imp_dbh->svchp, imp_dbh->errhp, locator, &chunk_size, status);
+	OCILobGetChunkSize_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, locator, &chunk_size, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCILobGetChunkSize");
 		ST(0) = &PL_sv_undef;

Modified: dbd-oracle/trunk/dbdimp.c
==============================================================================
--- dbd-oracle/trunk/dbdimp.c	(original)
+++ dbd-oracle/trunk/dbdimp.c	Thu Mar 15 10:08:24 2012
@@ -62,11 +62,12 @@
 };
 static sql_fbh_t ora2sql_type _((imp_fbh_t* fbh));
 
-void ora_free_phs_contents _((phs_t *phs));
-static void dump_env_to_trace();
+void ora_free_phs_contents _((imp_sth_t *imp_sth, phs_t *phs));
+static void dump_env_to_trace(imp_dbh_t *imp_dbh);
 
 static sb4
-oci_error_get(OCIError *errhp, sword status, char *what, SV *errstr, int debug)
+oci_error_get(imp_xxh_t *imp_xxh,
+              OCIError *errhp, sword status, char *what, SV *errstr, int debug)
 {
 	dTHX;
 	text errbuf[1024];
@@ -86,16 +87,17 @@
 	}
 
 	while( ++recno
-	&& OCIErrorGet_log_stat(errhp, recno, (text*)NULL, &eg_errcode, errbuf,
+           && OCIErrorGet_log_stat(imp_xxh, errhp, recno, (text*)NULL, &eg_errcode, errbuf,
 		(ub4)sizeof(errbuf), OCI_HTYPE_ERROR, eg_status) != OCI_NO_DATA
-	&& eg_status != OCI_INVALID_HANDLE
-	&& recno < 100
+           && eg_status != OCI_INVALID_HANDLE
+           && recno < 100
 	) {
 		if (debug >= 4 || recno>1/*XXX temp*/  || dbd_verbose >= 4 )
-			PerlIO_printf(DBILOGFP, "	OCIErrorGet after %s (er%ld:%s): %d, %ld: %s\n",
-				what ? what : "<NULL>", (long)recno,
-				(eg_status==OCI_SUCCESS) ? "ok" : oci_status_name(eg_status),
-				status, (long)eg_errcode, errbuf);
+			PerlIO_printf(DBIc_LOGPIO(imp_xxh),
+                          "	OCIErrorGet after %s (er%ld:%s): %d, %ld: %s\n",
+                          what ? what : "<NULL>", (long)recno,
+                          (eg_status==OCI_SUCCESS) ? "ok" : oci_status_name(eg_status),
+                          status, (long)eg_errcode, errbuf);
 			errcode = eg_errcode;
 		sv_catpv(errstr, (char*)errbuf);
 		if (*(SvEND(errstr)-1) == '\n')
@@ -205,34 +207,32 @@
 {
 	dTHR;
 	dTHX;
-	/* The disconnect_all concept is flawed and needs more work */
+
+    /* The disconnect_all concept is flawed and needs more work */
 	if (!PL_dirty && !SvTRUE(perl_get_sv("DBI::PERL_ENDING",0))) {
-	DBIh_SET_ERR_CHAR(drh, (imp_xxh_t*)imp_drh, Nullch, 1, "disconnect_all not implemented", Nullch, Nullch);
-	return FALSE;
+        DBIh_SET_ERR_CHAR(drh, (imp_xxh_t*)imp_drh, Nullch, 1, "disconnect_all not implemented", Nullch, Nullch);
+        return FALSE;
 	}
 	return FALSE;
 }
 
 
-
 void
-dbd_fbh_dump(imp_fbh_t *fbh, int i, int aidx)
+dbd_fbh_dump(imp_sth_t *imp_sth, imp_fbh_t *fbh, int i, int aidx)
 {
 	dTHX;
-	PerlIO *fp = DBILOGFP;
-	PerlIO_printf(fp, "	fbh %d: '%s'\t%s, ",
+	PerlIO_printf(DBIc_LOGPIO(imp_sth), "	fbh %d: '%s'\t%s, ",
 		i, fbh->name, (fbh->nullok) ? "NULLable" : "NO null ");
-	PerlIO_printf(fp, "otype %3d->%3d, dbsize %ld/%ld, p%d.s%d\n",
+	PerlIO_printf(DBIc_LOGPIO(imp_sth), "otype %3d->%3d, dbsize %ld/%ld, p%d.s%d\n",
 		fbh->dbtype, fbh->ftype, (long)fbh->dbsize,(long)fbh->disize,
 		fbh->prec, fbh->scale);
 	if (fbh->fb_ary) {
-	PerlIO_printf(fp, "	  out: ftype %d, bufl %d. indp %d, rlen %d, rcode %d\n",
+	PerlIO_printf(DBIc_LOGPIO(imp_sth), "	  out: ftype %d, bufl %d. indp %d, rlen %d, rcode %d\n",
 		fbh->ftype, fbh->fb_ary->bufl, fbh->fb_ary->aindp[aidx],
 		fbh->fb_ary->arlen[aidx], fbh->fb_ary->arcode[aidx]);
 	}
 }
 
-
 int
 ora_dbtype_is_long(int dbtype)
 {
@@ -430,10 +430,10 @@
 			croak("ora_driver_name is not a string");
 		imp_dbh->driver_name = (char *) SvPV (*svp, svp_len );
 		imp_dbh->driver_namel= (ub4) svp_len;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->driver_name,imp_dbh->driver_namel,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->driver_name,imp_dbh->driver_namel,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
     }
     else {
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION,(text*)"DBDO1.28",7,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION,(text*)"DBDO1.28",7,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
 	}
 #endif /*ORA_OCI_112*/
 
@@ -443,7 +443,7 @@
 			croak("ora_action is not a string");
 		imp_dbh->action = (char *) SvPV (*svp, svp_len );
 		imp_dbh->actionl= (ub4) svp_len;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
     }
 
 	if ((svp=DBD_ATTRIB_GET_SVP(attr, "ora_module_name", 15)) && SvOK(*svp)) {
@@ -452,7 +452,7 @@
 			croak("ora_module_name is not a string");
 		imp_dbh->module_name = (char *) SvPV (*svp, svp_len );
 		imp_dbh->module_namel= (ub4) svp_len;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->module_name,imp_dbh->module_namel,OCI_ATTR_MODULE,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->module_name,imp_dbh->module_namel,OCI_ATTR_MODULE,imp_dbh->errhp, status);
 
     }
     if ((svp=DBD_ATTRIB_GET_SVP(attr, "ora_client_identifier", 21)) && SvOK(*svp)) {
@@ -461,7 +461,7 @@
 			croak("ora_client_identifier is not a string");
 		imp_dbh->client_identifier = (char *) SvPV (*svp, svp_len );
 		imp_dbh->client_identifierl= (ub4) svp_len;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_identifier,imp_dbh->client_identifierl,OCI_ATTR_CLIENT_IDENTIFIER,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_identifier,imp_dbh->client_identifierl,OCI_ATTR_CLIENT_IDENTIFIER,imp_dbh->errhp, status);
 
     }
     if ((svp=DBD_ATTRIB_GET_SVP(attr, "ora_client_info", 15)) && SvOK(*svp)) {
@@ -470,7 +470,7 @@
 			croak("ora_client_info is not a string");
 		imp_dbh->client_info = (char *) SvPV (*svp, svp_len );
 		imp_dbh->client_infol= (ub4) svp_len;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_info,imp_dbh->client_infol,OCI_ATTR_CLIENT_INFO,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_info,imp_dbh->client_infol,OCI_ATTR_CLIENT_INFO,imp_dbh->errhp, status);
 
     }
 
@@ -513,7 +513,7 @@
 		DBD_ATTRIB_GET_IV(  attr, "ora_objects",11, svp, ora_objects);
 
 	if (DBIc_DBISTATE(imp_dbh)->debug >= 6 || dbd_verbose >= 6 )
-		dump_env_to_trace();
+		dump_env_to_trace(imp_dbh);
 
 	/* dbi_imp_data code adapted from DBD::mysql */
 	if (DBIc_has(imp_dbh, DBIcf_IMPSET)) {
@@ -590,14 +590,14 @@
 		{
 			size_t rsize = 0;
 			/* Get CLIENT char and nchar charset id values */
-			OCINlsEnvironmentVariableGet_log_stat( &charsetid,(size_t) 0, OCI_NLS_CHARSET_ID, 0, &rsize ,status );
+			OCINlsEnvironmentVariableGet_log_stat(imp_dbh, &charsetid,(size_t) 0, OCI_NLS_CHARSET_ID, 0, &rsize ,status );
 			if (status != OCI_SUCCESS) {
 				oci_error(dbh, NULL, status,
 					"OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID) Check NLS settings etc.");
 				return 0;
 			}
 
-			OCINlsEnvironmentVariableGet_log_stat( &ncharsetid,(size_t)  0, OCI_NLS_NCHARSET_ID, 0, &rsize ,status );
+			OCINlsEnvironmentVariableGet_log_stat(imp_dbh, &ncharsetid,(size_t)  0, OCI_NLS_NCHARSET_ID, 0, &rsize ,status );
 			if (status != OCI_SUCCESS) {
 				oci_error(dbh, NULL, status,
 					"OCINlsEnvironmentVariableGet(OCI_NLS_NCHARSET_ID) Check NLS settings etc.");
@@ -624,7 +624,7 @@
 			form attribute.
 			}*/
 
-			OCIEnvNlsCreate_log_stat( &imp_dbh->envhp, init_mode, 0, NULL, NULL, NULL, 0, 0,
+			OCIEnvNlsCreate_log_stat(imp_dbh, &imp_dbh->envhp, init_mode, 0, NULL, NULL, NULL, 0, 0,
 				charsetid, ncharsetid, status );
 
 			if (status != OCI_SUCCESS) {
@@ -665,7 +665,7 @@
 				if (new_charsetid) charsetid = new_charsetid;
 				if (new_ncharsetid) ncharsetid = new_ncharsetid;
 				imp_dbh->envhp = NULL;
-				OCIEnvNlsCreate_log_stat( &imp_dbh->envhp, init_mode, 0, NULL, NULL, NULL, 0, 0,
+				OCIEnvNlsCreate_log_stat(imp_dbh, &imp_dbh->envhp, init_mode, 0, NULL, NULL, NULL, 0, 0,
 							charsetid, ncharsetid, status );
 				if (status != OCI_SUCCESS) {
 					oci_error(dbh, NULL, status,
@@ -686,7 +686,7 @@
 
 	if (shared_dbh_ssv) { /*is this a cached or shared handle from DBI*/
 		if (!imp_dbh->envhp) { /*no hande so create a new one*/
-        	OCIEnvInit_log_stat( &imp_dbh->envhp, OCI_DEFAULT, 0, 0, status);
+        	OCIEnvInit_log_stat(imp_dbh, &imp_dbh->envhp, OCI_DEFAULT, 0, 0, status);
 			if (status != OCI_SUCCESS) {
 				oci_error(dbh, (OCIError*)imp_dbh->envhp, status, "OCIEnvInit");
 				return 0;
@@ -694,8 +694,8 @@
 		}
 	}
 
-	OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
-	OCIAttrGet_log_stat(imp_dbh->envhp, OCI_HTYPE_ENV, &charsetid, (ub4)0 ,
+	OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+	OCIAttrGet_log_stat(imp_dbh, imp_dbh->envhp, OCI_HTYPE_ENV, &charsetid, (ub4)0 ,
 			OCI_ATTR_ENV_CHARSET_ID, imp_dbh->errhp, status);
 
 	if (status != OCI_SUCCESS) {
@@ -703,7 +703,7 @@
 		return 0;
 	}
 
-	OCIAttrGet_log_stat(imp_dbh->envhp, OCI_HTYPE_ENV, &ncharsetid, (ub4)0 ,
+	OCIAttrGet_log_stat(imp_dbh, imp_dbh->envhp, OCI_HTYPE_ENV, &ncharsetid, (ub4)0 ,
 			OCI_ATTR_ENV_NCHARSET_ID, imp_dbh->errhp, status);
 
 	if (status != OCI_SUCCESS) {
@@ -735,12 +735,12 @@
 
 	if (!shared_dbh) {
 
-		OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+		OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
 
 		if (status != OCI_SUCCESS) {
 			oci_error(dbh, imp_dbh->errhp, status, "OCIServerAttach");
-			OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
-			OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
 			return 0;
 		}
 
@@ -762,57 +762,60 @@
 				if (!imp_dbh->pool_incr)
 					imp_dbh->pool_incr = 2;
 
-				OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->poolhp, OCI_HTYPE_SPOOL, status);
+				OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->poolhp, OCI_HTYPE_SPOOL, status);
 
-				OCISessionPoolCreate_log_stat(imp_dbh->envhp,
-						imp_dbh->errhp,
-						imp_dbh->poolhp,
-						(OraText **) &imp_dbh->pool_name,
-						(ub4 *) &imp_dbh->pool_namel,
-						(OraText *) dbname,
-						strlen(dbname),
-						imp_dbh->pool_min,
-						imp_dbh->pool_max,
-						imp_dbh->pool_incr,
-						(OraText *) uid,
-						strlen(uid),
-						(OraText *) pwd,
-						strlen(pwd),
-						status);
+				OCISessionPoolCreate_log_stat(
+                    imp_dbh,
+                    imp_dbh->envhp,
+                    imp_dbh->errhp,
+                    imp_dbh->poolhp,
+                    (OraText **) &imp_dbh->pool_name,
+                    (ub4 *) &imp_dbh->pool_namel,
+                    (OraText *) dbname,
+                    strlen(dbname),
+                    imp_dbh->pool_min,
+                    imp_dbh->pool_max,
+                    imp_dbh->pool_incr,
+                    (OraText *) uid,
+                    strlen(uid),
+                    (OraText *) pwd,
+                    strlen(pwd),
+                    status);
 
 				if (status != OCI_SUCCESS) {
 
 					oci_error(dbh, imp_dbh->errhp, status, "OCISessionPoolCreate");
-					OCIServerDetach_log_stat(imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
-					OCIHandleFree_log_stat(imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
-					OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
-					OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+					OCIServerDetach_log_stat(imp_dbh, imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
 					return 0;
 				}
 
-				OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->authp, OCI_HTYPE_AUTHINFO, status);
+				OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->authp, OCI_HTYPE_AUTHINFO, status);
 
-				OCIAttrSet_log_stat(imp_dbh->authp, (ub4) OCI_HTYPE_AUTHINFO,
+				OCIAttrSet_log_stat(imp_dbh, imp_dbh->authp, (ub4) OCI_HTYPE_AUTHINFO,
 							&purity, (ub4) 0,(ub4) OCI_ATTR_PURITY, imp_dbh->errhp, status);
 
 				if (imp_dbh->pool_class) /*pool_class may or may not be used */
-						OCIAttrSet_log_stat(imp_dbh->authp, (ub4) OCI_HTYPE_AUTHINFO,
+                    OCIAttrSet_log_stat(imp_dbh, imp_dbh->authp, (ub4) OCI_HTYPE_AUTHINFO,
 								(OraText *) imp_dbh->pool_class, (ub4) imp_dbh->pool_classl,
 								(ub4) OCI_ATTR_CONNECTION_CLASS, imp_dbh->errhp, status);
 
 				cred_type = ora_parse_uid(imp_dbh, &uid, &pwd);
 
-				OCISessionGet_log_stat(imp_dbh->envhp, imp_dbh->errhp, &imp_dbh->svchp, imp_dbh->authp,
+				OCISessionGet_log_stat(imp_dbh, imp_dbh->envhp, imp_dbh->errhp, &imp_dbh->svchp, imp_dbh->authp,
 								imp_dbh->pool_name, (ub4)strlen((char *)imp_dbh->pool_name), status);
 
 				if (status != OCI_SUCCESS) {
 
 					oci_error(dbh, imp_dbh->errhp, status, "OCISessionGet");
-					OCIServerDetach_log_stat(imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
-					OCISessionPoolDestroy(imp_dbh->poolhp, imp_dbh->errhp,status);
-					OCIHandleFree_log_stat(imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
-					OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
-					OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+					OCIServerDetach_log_stat(imp_dbh, imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
+					OCISessionPoolDestroy_log_stat(
+                        imp_dbh, imp_dbh->poolhp, imp_dbh->errhp,status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+					OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
 					return 0;
 				}
 
@@ -833,28 +836,28 @@
 				else {
 #endif /* ORA_OCI_112 */
 
-					OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
+					OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->svchp, OCI_HTYPE_SVCCTX, 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->seshp, OCI_HTYPE_SESSION,status);
-                        OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
-                        OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR, status);
-                        OCIHandleFree_log_stat(imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
+                        OCIHandleFree_log_stat(imp_dbh, imp_dbh->seshp, OCI_HTYPE_SESSION,status);
+                        OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+                        OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR, status);
+                        OCIHandleFree_log_stat(imp_dbh, imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
                         if (forced_new_environment)
-                            OCIHandleFree_log_stat(imp_dbh->envhp, OCI_HTYPE_ENV, status);
+                            OCIHandleFree_log_stat(imp_dbh, imp_dbh->envhp, OCI_HTYPE_ENV, status);
                         return 0;
                     }
 
 
-					OCIAttrSet_log_stat( imp_dbh->svchp, OCI_HTYPE_SVCCTX, imp_dbh->srvhp,
+					OCIAttrSet_log_stat(imp_dbh, imp_dbh->svchp, OCI_HTYPE_SVCCTX, imp_dbh->srvhp,
 									(ub4) 0, OCI_ATTR_SERVER, imp_dbh->errhp, status);
 
-					OCIHandleAlloc_ok(imp_dbh->envhp, &imp_dbh->seshp, OCI_HTYPE_SESSION, status);
+					OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_dbh->seshp, OCI_HTYPE_SESSION, status);
 
 					cred_type = ora_parse_uid(imp_dbh, &uid, &pwd);
 
-					OCISessionBegin_log_stat( imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,cred_type, sess_mode_type, status);
+					OCISessionBegin_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,cred_type, sess_mode_type, status);
 
 					if (status == OCI_SUCCESS_WITH_INFO) {
 						/* eg ORA-28011: the account will expire soon; change your password now */
@@ -863,17 +866,17 @@
 					}
 					if (status != OCI_SUCCESS) {
 						oci_error(dbh, imp_dbh->errhp, status, "OCISessionBegin");
-						OCIServerDetach_log_stat(imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
-						OCIHandleFree_log_stat(imp_dbh->seshp, OCI_HTYPE_SESSION,status);
-						OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
-						OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
-						OCIHandleFree_log_stat(imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
+						OCIServerDetach_log_stat(imp_dbh, imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, status);
+						OCIHandleFree_log_stat(imp_dbh, imp_dbh->seshp, OCI_HTYPE_SESSION,status);
+						OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+						OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+						OCIHandleFree_log_stat(imp_dbh, imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
 						if (forced_new_environment)
-							OCIHandleFree_log_stat(imp_dbh->envhp, OCI_HTYPE_ENV, status);
+							OCIHandleFree_log_stat(imp_dbh, imp_dbh->envhp, OCI_HTYPE_ENV, status);
 						return 0;
 					}
 
-					OCIAttrSet_log_stat(imp_dbh->svchp, (ub4) OCI_HTYPE_SVCCTX,
+					OCIAttrSet_log_stat(imp_dbh, imp_dbh->svchp, (ub4) OCI_HTYPE_SVCCTX,
 								imp_dbh->seshp, (ub4) 0,(ub4) OCI_ATTR_SESSION, imp_dbh->errhp, status);
 #ifdef ORA_OCI_112
 				}
@@ -912,7 +915,7 @@
         can_taf = 0;
 
 #ifdef OCI_ATTR_TAF_ENABLED
-		OCIAttrGet_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, &can_taf, NULL,
+		OCIAttrGet_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, &can_taf, NULL,
 				OCI_ATTR_TAF_ENABLED, imp_dbh->errhp, status);
 #endif
 
@@ -943,7 +946,7 @@
 {
 	dTHX;
 	sword status;
-	OCITransCommit_log_stat(imp_dbh->svchp, imp_dbh->errhp, OCI_DEFAULT, status);
+	OCITransCommit_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, OCI_DEFAULT, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCITransCommit");
 		return 0;
@@ -966,7 +969,7 @@
 	 /* if we are using a scrolling cursor we should get rid of the
 		cursor by fetching row 0 */
 	if (imp_sth->exe_mode==OCI_STMT_SCROLLABLE_READONLY){
-		OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp, 0,OCI_FETCH_NEXT,0,  status);
+		OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp, 0,OCI_FETCH_NEXT,0,  status);
 	}
 	return 1;
 }
@@ -978,7 +981,7 @@
 {
 	dTHX;
 	sword status;
-	OCITransRollback_log_stat(imp_dbh->svchp, imp_dbh->errhp, OCI_DEFAULT, status);
+	OCITransRollback_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, OCI_DEFAULT, status);
 	if (status != OCI_SUCCESS) {
 	oci_error(dbh, imp_dbh->errhp, status, "OCITransRollback");
 	return 0;
@@ -1056,17 +1059,17 @@
 		sword s_se, s_sd;
 #ifdef ORA_OCI_112
 		if (imp_dbh->using_drcp) {
-			OCISessionRelease_log_stat(imp_dbh->svchp, imp_dbh->errhp,s_se);
+			OCISessionRelease_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp,s_se);
 		}
 		else {
 #endif
-			OCISessionEnd_log_stat(imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,
+			OCISessionEnd_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,
 			  OCI_DEFAULT, s_se);
 #ifdef ORA_OCI_112
 		}
 #endif
 		if (s_se) oci_error(dbh, imp_dbh->errhp, s_se, "OCISessionEnd");
-		OCIServerDetach_log_stat(imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, s_sd);
+		OCIServerDetach_log_stat(imp_dbh, imp_dbh->srvhp, imp_dbh->errhp, OCI_DEFAULT, s_sd);
 		if (s_sd) oci_error(dbh, imp_dbh->errhp, s_sd, "OCIServerDetach");
 		if (s_se || s_sd)
 			return 0;
@@ -1104,29 +1107,29 @@
 			OCIFocbkStruct 	tafailover;
 			tafailover.fo_ctx = NULL;
 			tafailover.callback_function = NULL;
-			OCIAttrSet_log_stat(imp_dbh->srvhp, (ub4) OCI_HTYPE_SERVER,
+			OCIAttrSet_log_stat(imp_dbh, imp_dbh->srvhp, (ub4) OCI_HTYPE_SERVER,
 							(dvoid *) &tafailover, (ub4) 0,
 							(ub4) OCI_ATTR_FOCBK, imp_dbh->errhp, status);
 
 		}
 #ifdef ORA_OCI_112
 		if (imp_dbh->using_drcp) {
-			OCIHandleFree_log_stat(imp_dbh->authp, OCI_HTYPE_SESSION,status);
-			OCISessionPoolDestroy_log_stat(imp_dbh->poolhp, imp_dbh->errhp,status);
-			OCIHandleFree_log_stat(imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->authp, OCI_HTYPE_SESSION,status);
+			OCISessionPoolDestroy_log_stat(imp_dbh, imp_dbh->poolhp, imp_dbh->errhp,status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->poolhp, OCI_HTYPE_SPOOL,status);
 		}
 		else {
 #endif
-			OCIHandleFree_log_stat(imp_dbh->seshp, OCI_HTYPE_SESSION,status);
-			OCIHandleFree_log_stat(imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->seshp, OCI_HTYPE_SESSION,status);
+			OCIHandleFree_log_stat(imp_dbh, imp_dbh->svchp, OCI_HTYPE_SVCCTX, status);
 
 #ifdef ORA_OCI_112
 		}
 #endif
-		OCIHandleFree_log_stat(imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
+		OCIHandleFree_log_stat(imp_dbh, imp_dbh->srvhp, OCI_HTYPE_SERVER, status);
 
 	}
-	OCIHandleFree_log_stat(imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
+	OCIHandleFree_log_stat(imp_dbh, imp_dbh->errhp, OCI_HTYPE_ERROR,  status);
 dbd_db_destroy_out:
 	DBIc_IMPSET_off(imp_dbh);
 }
@@ -1150,7 +1153,7 @@
 	else if (kl==15 && strEQ(key, "ora_driver_name") ) {
 		imp_dbh->driver_name = (char *) SvPV (valuesv, vl );
 		imp_dbh->driver_namel= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->driver_name,imp_dbh->driver_namel,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->driver_name,imp_dbh->driver_namel,OCI_ATTR_DRIVER_NAME,imp_dbh->errhp, status);
 	}
 	else if (kl==8 && strEQ(key, "ora_drcp") ) {
 		imp_dbh->using_drcp = 1;
@@ -1182,30 +1185,30 @@
 	else if (kl==10 && strEQ(key, "ora_action") ) {
 		imp_dbh->action = (char *) SvPV (valuesv, vl );
 		imp_dbh->actionl= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
 
 	}
 	else if (kl==10 && strEQ(key, "ora_action") ) {
 		imp_dbh->action = (char *) SvPV (valuesv, vl );
 		imp_dbh->actionl= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->action,imp_dbh->actionl,OCI_ATTR_ACTION,imp_dbh->errhp, status);
 
 	}
 	else if (kl==21 && strEQ(key, "ora_client_identifier") ) {
 		imp_dbh->client_identifier = (char *) SvPV (valuesv, vl );
 		imp_dbh->client_identifierl= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_identifier,imp_dbh->client_identifierl,OCI_ATTR_CLIENT_IDENTIFIER,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_identifier,imp_dbh->client_identifierl,OCI_ATTR_CLIENT_IDENTIFIER,imp_dbh->errhp, status);
 
 	}
     else if (kl==15 && strEQ(key, "ora_client_info") ) {
 		imp_dbh->client_info = (char *) SvPV (valuesv, vl );
 		imp_dbh->client_infol= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_info,imp_dbh->client_infol,OCI_ATTR_CLIENT_INFO,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->client_info,imp_dbh->client_infol,OCI_ATTR_CLIENT_INFO,imp_dbh->errhp, status);
 	}
 	else if (kl==15 && strEQ(key, "ora_module_name") ) {
 		imp_dbh->module_name = (char *) SvPV (valuesv, vl );
 		imp_dbh->module_namel= (ub4) vl;
-		OCIAttrSet_log_stat(imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->module_name,imp_dbh->module_namel,OCI_ATTR_MODULE,imp_dbh->errhp, status);
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp,OCI_HTYPE_SESSION, imp_dbh->module_name,imp_dbh->module_namel,OCI_ATTR_MODULE,imp_dbh->errhp, status);
 
 	}
 	else if (kl==20 && strEQ(key, "ora_oci_success_warn") ) {
@@ -1391,9 +1394,9 @@
 			PerlIO_printf(DBIc_LOGPIO(imp_sth),
                           " use a temp lob locator for large xml \n");
 
-		OCIDescriptorAlloc_ok(imp_dbh->envhp, &src_ptr, OCI_DTYPE_LOB);
+		OCIDescriptorAlloc_ok(imp_dbh, imp_dbh->envhp, &src_ptr, OCI_DTYPE_LOB);
 
-		OCILobCreateTemporary_log_stat(imp_dbh->svchp, imp_sth->errhp,
+		OCILobCreateTemporary_log_stat(imp_dbh, imp_dbh->svchp, imp_sth->errhp,
 					 (OCILobLocator *) src_ptr, (ub2) OCI_DEFAULT,
 					 (ub1) OCI_DEFAULT, OCI_TEMP_CLOB, FALSE, OCI_DURATION_SESSION, status);
 
@@ -1402,7 +1405,7 @@
 		}
 		csid = (SvUTF8(source) && !CS_IS_UTF8(csid)) ? utf8_csid : CSFORM_IMPLIED_CSID(csform);
 		buflen = len;
-		OCILobWriteAppend_log_stat(imp_dbh->svchp, imp_dbh->errhp, src_ptr,
+		OCILobWriteAppend_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, src_ptr,
 						&buflen, bufp, (ub4)len, OCI_ONE_PIECE,
 						NULL, NULL,
 						csid, csform, status);
@@ -1425,13 +1428,15 @@
 
 
 
-	status =	OCIXMLTypeCreateFromSrc(imp_dbh->svchp,
-					imp_dbh->errhp,
-					(OCIDuration)OCI_DURATION_CALLOUT,
-					(ub1)src_type,
-					(dvoid *)src_ptr,
-					(sb4)OCI_IND_NOTNULL,
-				&xml);
+	OCIXMLTypeCreateFromSrc_log_stat(imp_dbh,
+                                     imp_dbh->svchp,
+                                     imp_dbh->errhp,
+                                     (OCIDuration)OCI_DURATION_CALLOUT,
+                                     (ub1)src_type,
+                                     (dvoid *)src_ptr,
+                                     (sb4)OCI_IND_NOTNULL,
+                                     &xml,
+                                     status);
 
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCIXMLTypeCreateFromSrc");
@@ -1442,7 +1447,7 @@
 		OCILobFreeTemporary(imp_dbh->svchp, imp_dbh->errhp,
 					(OCILobLocator*) src_ptr);
 
-		OCIDescriptorFree((dvoid *) src_ptr, (ub4) OCI_DTYPE_LOB);
+		OCIDescriptorFree_log(imp_dbh, (dvoid *) src_ptr, (ub4) OCI_DTYPE_LOB);
 	}
 
 
@@ -1923,7 +1928,7 @@
         }
 	}
 	/* Do actual bind */
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 		(text*)phs->name, (sb4)strlen(phs->name),
 		phs->array_buf,
 		phs->maxlen,
@@ -1939,7 +1944,7 @@
 	oci_error(sth, imp_sth->errhp, status, "OCIBindByName");
 	return 0;
 	}
-	OCIBindArrayOfStruct_log_stat(phs->bndhp, imp_sth->errhp,
+	OCIBindArrayOfStruct_log_stat(imp_sth, phs->bndhp, imp_sth->errhp,
 		(unsigned)phs->maxlen,			/* Skip parameter for the next data value */
 		(unsigned)sizeof (OCIInd),		/* Skip parameter for the next indicator value */
 		(unsigned)sizeof(unsigned short), /* Skip parameter for the next actual length value */
@@ -1952,7 +1957,7 @@
 	/* Fixup charset */
 	if (csform) {
 		/* set OCI_ATTR_CHARSET_FORM before we get the default OCI_ATTR_CHARSET_ID */
-	OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+        OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 		&csform, (ub4) 0, (ub4) OCI_ATTR_CHARSET_FORM, imp_sth->errhp, status);
 	if ( status != OCI_SUCCESS ) {
 		oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_FORM)"));
@@ -1961,7 +1966,7 @@
 	}
 
 	if (!phs->csid_orig) {	/* get the default csid Oracle would use */
-		OCIAttrGet_log_stat(phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
+		OCIAttrGet_log_stat(imp_sth, phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
 			OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 	}
 
@@ -1986,7 +1991,7 @@
 
 
 	if (csid) {
-		OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 			&csid, (ub4) 0, (ub4) OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_ID)"));
@@ -1995,7 +2000,7 @@
 	}
 
 	if (phs->maxdata_size) {
-	OCIAttrSet_log_stat(phs->bndhp, (ub4)OCI_HTYPE_BIND,
+        OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4)OCI_HTYPE_BIND,
 		phs->array_buf, (ub4)phs->array_buflen, (ub4)OCI_ATTR_MAXDATA_SIZE, imp_sth->errhp, status);
 	if ( status != OCI_SUCCESS ) {
 		oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_MAXDATA_SIZE)"));
@@ -2009,10 +2014,10 @@
 
 /* Copy array data from array buffer into perl array */
 /* Returns false on error, true on success */
-int dbd_phs_varchar_table_posy_exe(phs_t *phs){
+int dbd_phs_varchar_table_posy_exe(imp_sth_t *imp_sth, phs_t *phs){
 	dTHX;
 
-	int trace_level = DBIS->debug;
+	int trace_level = DBIc_DBISTATE(imp_sth)->debug;
 	AV *arr;
 
 	if( ( ! SvROK(phs->sv) )  || (SvTYPE(SvRV(phs->sv))!=SVt_PVAV) ) { /* Allow only array binds */
@@ -2020,7 +2025,7 @@
 			neatsvpv(phs->sv,0), phs->name);
 	}
 	if (trace_level >= 1 || dbd_verbose >= 3 ){
-	PerlIO_printf(DBILOGFP,
+        PerlIO_printf(DBIc_LOGPIO(imp_sth),
 		"dbd_phs_varchar_table_posy_exe(): Called for '%s' : array_numstruct=%d, maxlen=%ld \n",
 		phs->name,
 		phs->array_numstruct,
@@ -2060,14 +2065,14 @@
 			if( item ){
 				SvSetMagicSV(item,&PL_sv_undef);
 				if (trace_level >= 3 || dbd_verbose >= 3 ){
-					PerlIO_printf(DBILOGFP,
+					PerlIO_printf(DBIc_LOGPIO(imp_sth),
 						"dbd_phs_varchar_table_posy_exe(): arr[%d] = undef; SvSetMagicSV(item,&PL_sv_undef);\n",i);
 				}
 			}
 			else{
 				av_store(arr,i,&PL_sv_undef);
 				if (trace_level >= 3 || dbd_verbose >= 3 ){
-					PerlIO_printf(DBILOGFP,
+					PerlIO_printf(DBIc_LOGPIO(imp_sth),
 						"dbd_phs_varchar_table_posy_exe(): arr[%d] = undef; av_store(arr,i,&PL_sv_undef);\n",i);
 				}
 			}
@@ -2076,7 +2081,7 @@
 			if( (phs->array_indicators[i] == -2) || (phs->array_indicators[i] > 0) ){
 			/* Truncation occurred */
 				if (trace_level >= 2 || dbd_verbose >= 3 ){
-					PerlIO_printf(DBILOGFP,
+					PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_varchar_table_posy_exe(): Placeholder '%s': data truncated at %d row.\n",
 							phs->name,i);
 				}
@@ -2088,7 +2093,7 @@
 				sv_setpvn_mg(item,phs->array_buf+phs->maxlen*i,phs->array_lengths[i]);
 				SvPOK_only_UTF8(item);
 				if (trace_level >= 3 || dbd_verbose >= 3 ){
-					PerlIO_printf(DBILOGFP,
+					PerlIO_printf(DBIc_LOGPIO(imp_sth),
 						"dbd_phs_varchar_table_posy_exe(): arr[%d] = '%s'; "
 						"sv_setpvn_mg(item,phs->array_buf+phs->maxlen*i,phs->array_lengths[i]); \n",
 						i, phs->array_buf+phs->maxlen*i
@@ -2098,7 +2103,7 @@
 			else{
 				av_store(arr,i,newSVpvn(phs->array_buf+phs->maxlen*i,phs->array_lengths[i]));
 				if (trace_level >= 3 || dbd_verbose >= 3 ){
-					PerlIO_printf(DBILOGFP,
+					PerlIO_printf(DBIc_LOGPIO(imp_sth),
 						"dbd_phs_varchar_table_posy_exe(): arr[%d] = '%s'; "
 						"av_store(arr,i,newSVpvn(phs->array_buf+phs->maxlen*i,phs->array_lengths[i])); \n",
 						i, phs->array_buf+phs->maxlen*i
@@ -2109,7 +2114,7 @@
 	}
 	}
 	if (trace_level >= 2 || dbd_verbose >= 3 ){
-		PerlIO_printf(DBILOGFP,
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),
 			"dbd_phs_varchar_table_posy_exe(): scalar(@arr)=%ld.\n",
 			(long)av_len(arr)+1);
 	}
@@ -2359,7 +2364,7 @@
 	}
 	}
 	/* Do actual bind */
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 		(text*)phs->name, (sb4)strlen(phs->name),
 		phs->array_buf,
 		phs->maxlen,
@@ -2375,7 +2380,7 @@
 	oci_error(sth, imp_sth->errhp, status, "OCIBindByName");
 	return 0;
 	}
-	OCIBindArrayOfStruct_log_stat(phs->bndhp, imp_sth->errhp,
+	OCIBindArrayOfStruct_log_stat(imp_sth, phs->bndhp, imp_sth->errhp,
 		(unsigned)phs->maxlen,			/* Skip parameter for the next data value */
 		(unsigned)sizeof(OCIInd),		/* Skip parameter for the next indicator value */
 		(unsigned)sizeof(unsigned short), /* Skip parameter for the next actual length value */
@@ -2386,7 +2391,7 @@
 	return 0;
 	}
 	if (phs->maxdata_size) {
-	OCIAttrSet_log_stat(phs->bndhp, (ub4)OCI_HTYPE_BIND,
+        OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4)OCI_HTYPE_BIND,
 		phs->array_buf, (ub4)phs->array_buflen, (ub4)OCI_ATTR_MAXDATA_SIZE, imp_sth->errhp, status);
 	if ( status != OCI_SUCCESS ) {
 		oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_MAXDATA_SIZE)"));
@@ -2400,10 +2405,10 @@
 
 /* Copy array data from array buffer into perl array */
 /* Returns false on error, true on success */
-int dbd_phs_number_table_post_exe(phs_t *phs){
+int dbd_phs_number_table_post_exe(imp_sth_t *imp_sth, phs_t *phs){
 	dTHX;
 
-	int trace_level = DBIS->debug;
+	int trace_level = DBIc_DBISTATE(imp_sth)->debug;
 	AV *arr;
 
 	if( ( ! SvROK(phs->sv) )  || (SvTYPE(SvRV(phs->sv))!=SVt_PVAV) ) { /* Allow only array binds */
@@ -2411,7 +2416,7 @@
 			neatsvpv(phs->sv,0), phs->name);
 	}
 	if (trace_level >= 1 || dbd_verbose >= 3 ){
-	PerlIO_printf(DBILOGFP,
+        PerlIO_printf(DBIc_LOGPIO(imp_sth),
 		"dbd_phs_number_table_post_exe(): Called for '%s' : array_numstruct=%d, maxlen=%ld \n",
 		phs->name,
 		phs->array_numstruct,
@@ -2457,7 +2462,7 @@
 		if( item ){
 			SvSetMagicSV(item,&PL_sv_undef);
 			if (trace_level >= 3 || dbd_verbose >= 3 ){
-			PerlIO_printf(DBILOGFP,
+                PerlIO_printf(DBIc_LOGPIO(imp_sth),
 				"dbd_phs_number_table_post_exe(): arr[%d] = undef; SvSetMagicSV(item,&PL_sv_undef);\n",
 				i
 				);
@@ -2465,7 +2470,7 @@
 		}else{
 			av_store(arr,i,&PL_sv_undef);
 			if (trace_level >= 3 || dbd_verbose >= 3 ){
-			PerlIO_printf(DBILOGFP,
+                PerlIO_printf(DBIc_LOGPIO(imp_sth),
 				"dbd_phs_number_table_post_exe(): arr[%d] = undef; av_store(arr,i,&PL_sv_undef);\n",
 				i
 				);
@@ -2475,7 +2480,7 @@
 		if( (phs->array_indicators[i] == -2) || (phs->array_indicators[i] > 0) ){
 			/* Truncation occurred */
 			if (trace_level >= 2 || dbd_verbose >= 3 ){
-			PerlIO_printf(DBILOGFP,
+                PerlIO_printf(DBIc_LOGPIO(imp_sth),
 				"dbd_phs_number_table_post_exe(): Placeholder '%s': data truncated at %d row.\n",
 				phs->name,i);
 			}
@@ -2486,7 +2491,7 @@
 			switch(phs->ora_internal_type){
 			case SQLT_INT:
 				if (trace_level >= 4 || dbd_verbose >= 4 ){
-				PerlIO_printf(DBILOGFP,
+                    PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_number_table_post_exe(): (int) set arr[%d] = %d \n",
 					i, *(int*)(phs->array_buf+phs->maxlen*i)
 					);
@@ -2495,7 +2500,7 @@
 				break;
 			case SQLT_FLT:
 				if (trace_level >= 4 || dbd_verbose >= 4 ){
-				PerlIO_printf(DBILOGFP,
+                    PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_number_table_post_exe(): (double) set arr[%d] = %lf \n",
 					i, *(double*)(phs->array_buf+phs->maxlen*i)
 					);
@@ -2505,7 +2510,7 @@
 			if (trace_level >= 3 || dbd_verbose >= 3 ){
 			STRLEN l;
 			char *str= SvPOK(item) ? SvPV(item,l) : "<unprintable>" ;
-			PerlIO_printf(DBILOGFP,
+			PerlIO_printf(DBIc_LOGPIO(imp_sth),
 				"dbd_phs_number_table_post_exe(): arr[%d] = '%s'\n",
 					i, str ? str : "<unprintable>"
 				);
@@ -2514,7 +2519,7 @@
 			switch(phs->ora_internal_type){
 			case SQLT_INT:
 				if (trace_level >= 4 || dbd_verbose >= 4 ){
-				PerlIO_printf(DBILOGFP,
+                    PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_number_table_post_exe(): (int) store new arr[%d] = %d \n",
 					i, *(int*)(phs->array_buf+phs->maxlen*i)
 				);
@@ -2523,7 +2528,7 @@
 				break;
 			case SQLT_FLT:
 				if (trace_level >= 4 || dbd_verbose >= 4 ){
-				PerlIO_printf(DBILOGFP,
+                    PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_number_table_post_exe(): (double) store new arr[%d] = %lf \n",
 					i, *(double*)(phs->array_buf+phs->maxlen*i)
 					);
@@ -2538,7 +2543,7 @@
 					item=*pitem;
 				}
 				str= item ? ( SvPOK(item) ? SvPV(item,l) : "<unprintable>"  ) : "<undef>";
-				PerlIO_printf(DBILOGFP,
+				PerlIO_printf(DBIc_LOGPIO(imp_sth),
 					"dbd_phs_number_table_post_exe(): arr[%d] = '%s'\n",
 					i, str ? str : "<unprintable>"
 				);
@@ -2548,7 +2553,7 @@
 	}
 	}
 	if (trace_level >= 2 || dbd_verbose >= 3 ){
-	PerlIO_printf(DBILOGFP,
+        PerlIO_printf(DBIc_LOGPIO(imp_sth),
 		"dbd_phs_number_table_post_exe(): scalar(@arr)=%ld.\n",
 		(long)av_len(arr)+1);
 	}
@@ -2696,7 +2701,7 @@
             imp_sth->stmhp, phs->bndhp, imp_sth->errhp, phs->name,
             imp_sth_csr->stmhp, phs->ftype);
 
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 			(text*)phs->name, (sb4)strlen(phs->name),
 			&imp_sth_csr->stmhp,
 			0,
@@ -2744,18 +2749,18 @@
 
 		if (!phs->desc_h || 1) { /* XXX phs->desc_t != OCI_HTYPE_STMT) */
 			if (phs->desc_h) {
-				OCIHandleFree_log_stat(phs->desc_h, phs->desc_t, status);
+				OCIHandleFree_log_stat(imp_sth, phs->desc_h, phs->desc_t, status);
 				phs->desc_h = NULL;
 			}
 			phs->desc_t = OCI_HTYPE_STMT;
-			OCIHandleAlloc_ok(imp_sth->envhp, &phs->desc_h, phs->desc_t, status);
+			OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &phs->desc_h, phs->desc_t, status);
 		 }
 
 
 		phs->progv = (char*)&phs->desc_h;
 		phs->maxlen = 0;
 
-		OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+		OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 			(text*)phs->name,
 			(sb4)strlen(phs->name),
 			phs->progv,
@@ -2864,12 +2869,19 @@
 	/* ensure that the value is a support named object type */
 	/* (currently only OCIXMLType*)						 */
 	if ( sv_isa(phs->sv, "OCIXMLTypePtr") ) {
-		OCITypeByName(imp_sth->envhp, imp_sth->errhp, imp_sth->svchp,
-			(CONST text*)"SYS", 3,
-			(CONST text*)"XMLTYPE", 7,
-			(CONST text*)0, 0,
-			OCI_DURATION_CALLOUT, OCI_TYPEGET_HEADER,
-			&tdo);
+        /* TO_DO not logging: */
+		OCITypeByName_log(
+            imp_sth,
+            imp_sth->envhp,
+            imp_sth->errhp,
+            imp_sth->svchp,
+            (CONST text*)"SYS", 3,    /* schema_name, schema_length */
+            (CONST text*)"XMLTYPE", 7, /* type_name, type_length */
+            (CONST text*)0, 0,         /* version_name, version_length */
+            OCI_DURATION_CALLOUT,      /* pin_duration */
+            OCI_TYPEGET_HEADER,        /* get_option */
+            &tdo,                      /* tdo */
+            status);
 		ptr = SvRV(phs->sv);
 		phs->progv  = (void*) SvIV(ptr);
 		phs->maxlen = sizeof(OCIXMLType*);
@@ -2880,7 +2892,7 @@
 
 	/* bind by name */
 
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
  			(text*)phs->name, (sb4)strlen(phs->name),
  			(dvoid *) NULL, /* value supplied in BindObject later */
  			0,
@@ -2974,7 +2986,7 @@
 	at_exec = (phs->desc_h == NULL);
 
 
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 		(text*)phs->name, (sb4)strlen(phs->name),
 		phs->progv,
 		phs->maxlen ? (sb4)phs->maxlen : 1,	/* else bind "" fails	*/
@@ -2991,7 +3003,7 @@
 		return 0;
 	}
 	if (at_exec) {
-		OCIBindDynamic_log(phs->bndhp, imp_sth->errhp,
+		OCIBindDynamic_log(imp_sth, phs->bndhp, imp_sth->errhp,
 			(dvoid *)phs, dbd_phs_in,
 			(dvoid *)phs, dbd_phs_out, status);
 
@@ -3022,7 +3034,7 @@
 
 	if (csform) {
 		/* set OCI_ATTR_CHARSET_FORM before we get the default OCI_ATTR_CHARSET_ID */
-		OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 		&csform, (ub4) 0, (ub4) OCI_ATTR_CHARSET_FORM, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_FORM)"));
@@ -3031,7 +3043,7 @@
 	}
 
 	if (!phs->csid_orig) {	/* get the default csid Oracle would use */
-		OCIAttrGet_log_stat(phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
+		OCIAttrGet_log_stat(imp_sth, phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
 		OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 	}
 
@@ -3057,7 +3069,7 @@
             (unsigned long)phs->maxlen, (unsigned long)phs->maxdata_size);
 
 	if (csid) {
-		OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 			&csid, (ub4) 0, (ub4) OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_ID)"));
@@ -3066,7 +3078,7 @@
 	}
 
 	if (phs->maxdata_size) {
-		OCIAttrSet_log_stat(phs->bndhp, (ub4)OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4)OCI_HTYPE_BIND,
 			neatsvpv(phs->sv,0), (ub4)phs->maxdata_size, (ub4)OCI_ATTR_MAXDATA_SIZE, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_MAXDATA_SIZE)"));
@@ -3278,7 +3290,7 @@
 /* --- functions to 'complete' the fetch of a value --- */
 
 void
-dbd_phs_sv_complete(phs_t *phs, SV *sv, I32 debug)
+dbd_phs_sv_complete(imp_sth_t *imp_sth, phs_t *phs, SV *sv, I32 debug)
 {
 	dTHX;
 	char *note = "";
@@ -3356,14 +3368,15 @@
 	}
 }
 void
-dbd_phs_avsv_complete(phs_t *phs, I32 index, I32 debug)
+dbd_phs_avsv_complete(imp_sth_t *imp_sth, phs_t *phs, I32 index, I32 debug)
 {
 	dTHX;
 	AV *av = (AV*)SvRV(phs->sv);
 	SV *sv = *av_fetch(av, index, 1);
-	dbd_phs_sv_complete(phs, sv, 0);
+	dbd_phs_sv_complete(imp_sth, phs, sv, 0);
 	if (debug >= 2 || dbd_verbose >= 3 )
-		PerlIO_printf(DBILOGFP, " dbd_phs_avsv_complete out '%s'[%ld] = %s (arcode %d, ind %d, len %d)\n",
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),
+                      " dbd_phs_avsv_complete out '%s'[%ld] = %s (arcode %d, ind %d, len %d)\n",
 		phs->name, (long)index, neatsvpv(sv,0), phs->arcode, phs->indp, phs->alen);
 }
 
@@ -3473,7 +3486,7 @@
                 "Statement Execute Mode is %d (%s)\n",
                 imp_sth->exe_mode,oci_exe_mode(imp_sth->exe_mode));
 
-		OCIStmtExecute_log_stat(imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
+		OCIStmtExecute_log_stat(imp_sth, imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
 					(ub4)(is_select ? 0: 1),
 					0, 0, 0,(ub4)imp_sth->exe_mode,status);
 
@@ -3534,11 +3547,11 @@
 					phs->name,phs->ftype,sql_typecode_name(phs->ftype));
 			}
 			if( phs->ftype == ORA_VARCHAR2_TABLE ){
-				dbd_phs_varchar_table_posy_exe(phs);
+				dbd_phs_varchar_table_posy_exe(imp_sth, phs);
 				continue;
 			}
 			if( phs->ftype == ORA_NUMBER_TABLE ){
-				dbd_phs_number_table_post_exe(phs);
+				dbd_phs_number_table_post_exe(imp_sth, phs);
 				continue;
 			}
 
@@ -3551,10 +3564,10 @@
 					AV *av = (AV*)SvRV(sv);
 					I32 avlen = AvFILL(av);
 					if (avlen >= 0)
-						 dbd_phs_avsv_complete(phs, avlen, debug);
+                        dbd_phs_avsv_complete(imp_sth, phs, avlen, debug);
 				}
 				else {
-					dbd_phs_sv_complete(phs, sv, debug);
+					dbd_phs_sv_complete(imp_sth, phs, sv, debug);
 				}
 			}
 		}
@@ -3578,7 +3591,7 @@
 	ub2 csid;
 	int trace_level = DBIc_DBISTATE(imp_sth)->debug;
 	int i;
-	OCIBindByName_log_stat(imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
+	OCIBindByName_log_stat(imp_sth, imp_sth->stmhp, &phs->bndhp, imp_sth->errhp,
 			(text*)phs->name, (sb4)strlen(phs->name),
 			0,
 			phs->maxlen ? (sb4)phs->maxlen : 1, /* else bind "" fails */
@@ -3595,7 +3608,7 @@
 	}
 
 
-	OCIBindDynamic_log(phs->bndhp, imp_sth->errhp,
+	OCIBindDynamic_log(imp_sth, phs->bndhp, imp_sth->errhp,
 					(dvoid *)phs, dbd_phs_in,
 					(dvoid *)phs, dbd_phs_out, status);
 	if (status != OCI_SUCCESS) {
@@ -3623,7 +3636,7 @@
 
 	if (csform) {
 		/* set OCI_ATTR_CHARSET_FORM before we get the default OCI_ATTR_CHARSET_ID */
-		OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 			&csform, (ub4) 0, (ub4) OCI_ATTR_CHARSET_FORM, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_FORM)"));
@@ -3632,7 +3645,7 @@
 	}
 
 	if (!phs->csid_orig) {	  /* get the default csid Oracle would use */
-		OCIAttrGet_log_stat(phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
+		OCIAttrGet_log_stat(imp_sth, phs->bndhp, OCI_HTYPE_BIND, &phs->csid_orig, (ub4)0 ,
 			OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 	}
 
@@ -3678,7 +3691,7 @@
 			(unsigned long)phs->maxlen, (unsigned long)phs->maxdata_size);
 
 	if (csid) {
-		OCIAttrSet_log_stat(phs->bndhp, (ub4) OCI_HTYPE_BIND,
+		OCIAttrSet_log_stat(imp_sth, phs->bndhp, (ub4) OCI_HTYPE_BIND,
 			&csid, (ub4) 0, (ub4) OCI_ATTR_CHARSET_ID, imp_sth->errhp, status);
 		if ( status != OCI_SUCCESS ) {
 			oci_error(sth, imp_sth->errhp, status, ora_sql_error(imp_sth,"OCIAttrSet (OCI_ATTR_CHARSET_ID)"));
@@ -3900,7 +3913,7 @@
 	if(autocommit)
 		oci_mode |= OCI_COMMIT_ON_SUCCESS;
 
-	OCIStmtExecute_log_stat(imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
+	OCIStmtExecute_log_stat(imp_sth, imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
 							exe_count, 0, 0, 0, oci_mode, exe_status);
 
 	OCIAttrGet_stmhp_stat(imp_sth, &row_count, 0, OCI_ATTR_ROW_COUNT, status);
@@ -3922,7 +3935,7 @@
 				AV *av = (AV*)SvRV(sv);
 				I32 avlen = AvFILL(av);
 				for (j=0;j<=avlen;j++){
-					dbd_phs_avsv_complete(phs, j, debug);
+					dbd_phs_avsv_complete(imp_sth, phs, j, debug);
 				}
 			}
 		}
@@ -3946,13 +3959,13 @@
 		err_svs[0] = newSViv((IV)0);
 		err_svs[1] = newSVpvn("", 0);
 		err_svs[2] = newSVpvn("S1000",5);
-		OCIHandleAlloc_ok(imp_sth->envhp, &row_errhp, OCI_HTYPE_ERROR, status);
-		OCIHandleAlloc_ok(imp_sth->envhp, &tmp_errhp, OCI_HTYPE_ERROR, status);
+		OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &row_errhp, OCI_HTYPE_ERROR, status);
+		OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &tmp_errhp, OCI_HTYPE_ERROR, status);
 		for(i = 0; (unsigned int) i < num_errs; i++) {
-			OCIParamGet_log_stat(imp_sth->errhp, OCI_HTYPE_ERROR,
+			OCIParamGet_log_stat(imp_sth, imp_sth->errhp, OCI_HTYPE_ERROR,
 								 tmp_errhp, (dvoid *)&row_errhp,
 								 (ub4)i, status);
-			OCIAttrGet_log_stat(row_errhp, OCI_HTYPE_ERROR, &row_off, 0,
+			OCIAttrGet_log_stat(imp_sth, row_errhp, OCI_HTYPE_ERROR, &row_off, 0,
 								OCI_ATTR_DML_ROW_OFFSET, imp_sth->errhp, status);
 			if (debug >= 6 || dbd_verbose >= 6 )
 				PerlIO_printf(
@@ -3960,18 +3973,18 @@
                     "	ora_st_execute_array error in row %d.\n",
                     row_off);
 			sv_setpv(err_svs[1], "");
-			err_code = oci_error_get(row_errhp, exe_status, NULL, err_svs[1], debug);
+			err_code = oci_error_get((imp_xxh_t *)imp_sth, row_errhp, exe_status, NULL, err_svs[1], debug);
 			sv_setiv(err_svs[0], (IV)err_code);
 			av_store(tuples_status_av, row_off,
 					 newRV_noinc((SV *)(av_make(3, err_svs))));
 		}
-		OCIHandleFree_log_stat(tmp_errhp, OCI_HTYPE_ERROR,  status);
-		OCIHandleFree_log_stat(row_errhp, OCI_HTYPE_ERROR,  status);
+		OCIHandleFree_log_stat(imp_sth, tmp_errhp, OCI_HTYPE_ERROR,  status);
+		OCIHandleFree_log_stat(imp_sth, row_errhp, OCI_HTYPE_ERROR,  status);
 
 		/* Do a commit here if autocommit is set, since Oracle
 			doesn't do that for us when some rows are in error. */
 		if(autocommit) {
-			OCITransCommit_log_stat(imp_sth->svchp, imp_sth->errhp,
+			OCITransCommit_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp,
 									OCI_DEFAULT, status);
 			if (status != OCI_SUCCESS) {
 				oci_error(sth, imp_sth->errhp, status, "OCITransCommit");
@@ -4090,7 +4103,7 @@
 	not sure if we need this for non scrolling cursors they should die on
 	a OER(1403) no records)*/
 
-	OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp, 0,
+	OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp, 0,
 		OCI_FETCH_NEXT,0,  status);
 
 	if (status != OCI_SUCCESS && status != OCI_SUCCESS_WITH_INFO) {
@@ -4117,14 +4130,14 @@
         boolean is_open;
         sword status;
 
-        OCILobFileIsOpen_log_stat(imp_dbh->svchp, imp_dbh->errhp, fbh->desc_h, &is_open, status);
+        OCILobFileIsOpen_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, fbh->desc_h, &is_open, status);
         if (status == OCI_SUCCESS && is_open) {
-            OCILobFileClose_log_stat(imp_sth->svchp, imp_sth->errhp,
+            OCILobFileClose_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp,
                                      fbh->desc_h, status);
         }
 
 
-        OCIDescriptorFree_log(fbh->desc_h, fbh->desc_t);
+        OCIDescriptorFree_log(imp_sth, fbh->desc_h, fbh->desc_t);
     }
 
 	if (fbh->obj) {
@@ -4136,11 +4149,11 @@
 }
 
 void
-ora_free_phs_contents(phs_t *phs)
+ora_free_phs_contents(imp_sth_t *imp_sth, phs_t *phs)
 {
 	dTHX;
 	if (phs->desc_h)
-	OCIDescriptorFree_log(phs->desc_h, phs->desc_t);
+        OCIDescriptorFree_log(imp_sth, phs->desc_h, phs->desc_t);
 	if( phs->array_buf ){
 		free(phs->array_buf);
 		phs->array_buf=NULL;
@@ -4167,7 +4180,7 @@
 #if defined(OCI_HTYPE_DIRPATH_FN_CTX)	/* >= 9.0 */
 	boolean is_temporary = 0;
 	sword status;
-	OCILobIsTemporary_log_stat(imp_sth->envhp, imp_sth->errhp, lobloc, &is_temporary, status);
+	OCILobIsTemporary_log_stat(imp_sth, imp_sth->envhp, imp_sth->errhp, lobloc, &is_temporary, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobIsTemporary");
 		return;
@@ -4179,7 +4192,7 @@
                 DBIc_LOGPIO(imp_sth),
                 "	   OCILobFreeTemporary %s\n", oci_status_name(status));
 		}
-		OCILobFreeTemporary_log_stat(imp_sth->svchp, imp_sth->errhp, lobloc, status);
+		OCILobFreeTemporary_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobloc, status);
 		if (status != OCI_SUCCESS) {
 			oci_error(sth, imp_sth->errhp, status, "OCILobFreeTemporary");
 			return;
@@ -4208,11 +4221,11 @@
 	cursor by fetching row 0 */
 
 	if (imp_sth->exe_mode==OCI_STMT_SCROLLABLE_READONLY){
-		OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp, 0,OCI_FETCH_NEXT,0,  status);
+		OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp, 0,OCI_FETCH_NEXT,0,  status);
 	}
 
 	if (imp_sth->dschp){
-		OCIHandleFree_log_stat(imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+		OCIHandleFree_log_stat(imp_sth, imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 	}
 
 
@@ -4223,7 +4236,7 @@
 
 	if (!PL_dirty) { /* XXX not ideal, leak may be a problem in some cases */
 		if (!imp_sth->nested_cursor) {
-			OCIHandleFree_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT, status);
+			OCIHandleFree_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT, status);
 			if (status != OCI_SUCCESS)
 				oci_error(sth, imp_sth->errhp, status, "OCIHandleFree");
 		}
@@ -4260,7 +4273,7 @@
 			  	phs_t *phs = (phs_t*)(void*)SvPVX(sv);
 				if (phs->desc_h && phs->desc_t == OCI_DTYPE_LOB)
 					ora_free_templob(sth, imp_sth, (OCILobLocator*)phs->desc_h);
-		  		ora_free_phs_contents(phs);
+		  		ora_free_phs_contents(imp_sth, phs);
 			}
 		}
 		sv_free((SV*)imp_sth->all_params_hv);
@@ -4482,9 +4495,8 @@
 }
 
 static void
-dump_env_to_trace() {
+dump_env_to_trace(imp_dbh_t *imp_dbh) {
 	dTHX;
-	PerlIO *fp = DBILOGFP;
 	int i = 0;
 	char *p;
 
@@ -4496,10 +4508,10 @@
 #endif
 
 
-	PerlIO_printf(fp, "Environment variables:\n");
+	PerlIO_printf(DBIc_LOGPIO(imp_dbh), "Environment variables:\n");
 	do {
-	p = (char*)environ[i++];
-	PerlIO_printf(fp,"\t%s\n",p);
+        p = (char*)environ[i++];
+        PerlIO_printf(DBIc_LOGPIO(imp_dbh),"\t%s\n",p);
 	} while ((char*)environ[i] != '\0');
 }
 

Modified: dbd-oracle/trunk/dbdimp.h
==============================================================================
--- dbd-oracle/trunk/dbdimp.h	(original)
+++ dbd-oracle/trunk/dbdimp.h	Thu Mar 15 10:08:24 2012
@@ -320,7 +320,7 @@
 
 void dbd_init_oci _((dbistate_t *dbistate));
 void dbd_preparse _((imp_sth_t *imp_sth, char *statement));
-void dbd_fbh_dump(imp_fbh_t *fbh, int i, int aidx);
+void dbd_fbh_dump(imp_sth_t *imp_sth, imp_fbh_t *fbh, int i, int aidx);
 void ora_free_fbh_contents _((SV *sth, imp_fbh_t *fbh));
 void ora_free_templob _((SV *sth, imp_sth_t *imp_sth, OCILobLocator *lobloc));
 int ora_dbtype_is_long _((int dbtype));
@@ -329,8 +329,8 @@
 
 int ora_db_reauthenticate _((SV *dbh, imp_dbh_t *imp_dbh, char *uid, char *pwd));
 
-void dbd_phs_sv_complete _((phs_t *phs, SV *sv, I32 debug));
-void dbd_phs_avsv_complete _((phs_t *phs, I32 index, I32 debug));
+void dbd_phs_sv_complete _((imp_sth_t *imp_sth, phs_t *phs, SV *sv, I32 debug));
+void dbd_phs_avsv_complete _((imp_sth_t *imp_sth, phs_t *phs, I32 index, I32 debug));
 
 int pp_exec_rset _((SV *sth, imp_sth_t *imp_sth, phs_t *phs, int pre_exec));
 int pp_rebind_ph_rset_in _((SV *sth, imp_sth_t *imp_sth, phs_t *phs));
@@ -366,8 +366,8 @@
 SV * ora_create_xml _((SV *dbh, char *source));
 
 void ora_free_lob_refetch _((SV *sth, imp_sth_t *imp_sth));
-void dbd_phs_avsv_complete _((phs_t *phs, I32 index, I32 debug));
-void dbd_phs_sv_complete _((phs_t *phs, SV *sv, I32 debug));
+void dbd_phs_avsv_complete _((imp_sth_t *imp_sth, phs_t *phs, I32 index, I32 debug));
+void dbd_phs_sv_complete _((imp_sth_t *imp_sth, phs_t *phs, SV *sv, I32 debug));
 int post_execute_lobs _((SV *sth, imp_sth_t *imp_sth, ub4 row_count));
 ub4 ora_parse_uid _((imp_dbh_t *imp_dbh, char **uidp, char **pwdp));
 char *ora_sql_error _((imp_sth_t *imp_sth, char *msg));

Modified: dbd-oracle/trunk/oci8.c
==============================================================================
--- dbd-oracle/trunk/oci8.c	(original)
+++ dbd-oracle/trunk/oci8.c	Thu Mar 15 10:08:24 2012
@@ -109,7 +109,7 @@
 	return SvPVX(sv);
 }
  */
- 
+
 char *
 oci_exe_mode(ub4 mode)
 {
@@ -812,7 +812,8 @@
 
 
 static sb4
-oci_error_get(OCIError *errhp, sword status, char *what, SV *errstr, int debug)
+oci_error_get(imp_xxh_t *imp_xxh,
+              OCIError *errhp, sword status, char *what, SV *errstr, int debug)
 {
 	dTHX;
 	text errbuf[1024];
@@ -834,12 +835,13 @@
 	}
 
 	while( ++recno
-		&& OCIErrorGet_log_stat(errhp, recno, (text*)NULL, &eg_errcode, errbuf,
+           && OCIErrorGet_log_stat(imp_xxh, errhp, recno, (text*)NULL, &eg_errcode, errbuf,
 		(ub4)sizeof(errbuf), OCI_HTYPE_ERROR, eg_status) != OCI_NO_DATA
 		&& eg_status != OCI_INVALID_HANDLE
 		&& recno < 100) {
 		if (debug >= 4 || recno>1/*XXX temp*/)
-			PerlIO_printf(DBILOGFP, "	OCIErrorGet after %s (er%ld:%s): %d, %ld: %s\n",
+			PerlIO_printf(DBIc_LOGPIO(imp_xxh),
+                          "	OCIErrorGet after %s (er%ld:%s): %d, %ld: %s\n",
 			what ? what : "<NULL>", (long)recno,
 			(eg_status==OCI_SUCCESS) ? "ok" : oci_status_name(eg_status),
 			status, (long)eg_errcode, errbuf);
@@ -873,7 +875,8 @@
 	sb4 errcode;
 	SV *errstr_sv = sv_newmortal();
 	SV *errcode_sv = sv_newmortal();
-	errcode = oci_error_get(errhp, status, what, errstr_sv, DBIS->debug);
+	errcode = oci_error_get(imp_xxh, errhp, status, what, errstr_sv,
+                            DBIc_DBISTATE(imp_xxh)->debug);
 	if (CSFORM_IMPLIES_UTF8(SQLCS_IMPLICIT)) {
 #ifdef sv_utf8_decode
 	sv_utf8_decode(errstr_sv);
@@ -1051,14 +1054,14 @@
 
 
 
-	OCIHandleAlloc_ok(imp_dbh->envhp, &imp_sth->stmhp, OCI_HTYPE_STMT, status);
-	OCIStmtPrepare_log_stat(imp_sth->stmhp, imp_sth->errhp,
+	OCIHandleAlloc_ok(imp_dbh, imp_dbh->envhp, &imp_sth->stmhp, OCI_HTYPE_STMT, status);
+	OCIStmtPrepare_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp,
 			(text*)imp_sth->statement, (ub4)strlen(imp_sth->statement),
 			OCI_NTV_SYNTAX, OCI_DEFAULT, status);
 
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCIStmtPrepare");
-		OCIHandleFree_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT, status);
+		OCIHandleFree_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT, status);
 
 		return 0;
 	}
@@ -1066,7 +1069,7 @@
 
 	OCIAttrGet_stmhp_stat(imp_sth, &imp_sth->stmt_type, 0, OCI_ATTR_STMT_TYPE, status);
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	dbd_st_prepare'd sql %s ( auto_lob%d, check_sql%d)\n",
@@ -1348,9 +1351,9 @@
 	tafailover.callback_function = &taf_cbk;
 
 /* register the callback */
-	OCIAttrSet_log_stat(imp_dbh->srvhp, (ub4) OCI_HTYPE_SERVER,
-								(dvoid *) &tafailover, (ub4) 0,
-								(ub4) OCI_ATTR_FOCBK, imp_dbh->errhp, status);
+	OCIAttrSet_log_stat(imp_dbh, imp_dbh->srvhp, (ub4) OCI_HTYPE_SERVER,
+                        (dvoid *) &tafailover, (ub4) 0,
+                        (ub4) OCI_ATTR_FOCBK, imp_dbh->errhp, status);
 
 	return status;
 }
@@ -1427,7 +1430,7 @@
 					return 0;
 				}
 
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+                if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "		fetching field %d of %d. LONG value truncated from "
@@ -1454,6 +1457,7 @@
 fetch_cleanup_rset(SV *sth, imp_fbh_t *fbh)
 {
 	dTHX;
+    D_imp_sth(sth);
 	SV *sth_nested = (SV *)fbh->special;
 	fbh->special = NULL;
 
@@ -1468,8 +1472,8 @@
 		if (fbh_nested->fetch_cleanup)
 		fbh_nested->fetch_cleanup(sth_nested, fbh_nested);
 	}
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
-		PerlIO_printf(DBILOGFP,
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),
 			"	fetch_cleanup_rset - deactivating handle %s (defunct nested cursor)\n",
 						neatsvpv(sth_nested, 0));
 
@@ -1490,7 +1494,7 @@
 	HV *init_attr = newHV();
 	int count;
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	fetch_func_rset - allocating handle for cursor nested within %s ...\n",
@@ -1511,7 +1515,7 @@
 	SvREFCNT_dec(init_attr);
 	PUTBACK; FREETMPS; LEAVE;
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	fetch_func_rset - ... allocated %s for nested cursor\n",
@@ -1547,7 +1551,7 @@
 {
 	dTHX;
 
-	if (DBIS->debug >= 6 || dbd_verbose >= 6 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	 dbd_rebind_ph_rset phs->is_inout=%d\n",
@@ -1600,11 +1604,11 @@
 	if (!phs->desc_h) {
 		++imp_sth->has_lobs;
 		phs->desc_t = OCI_DTYPE_LOB;
-		OCIDescriptorAlloc_ok(imp_sth->envhp,
+		OCIDescriptorAlloc_ok(imp_sth, imp_sth->envhp,
 				&phs->desc_h, phs->desc_t);
 	}
 
-	OCIAttrSet_log_stat(phs->desc_h, phs->desc_t,
+	OCIAttrSet_log_stat(imp_sth, phs->desc_h, phs->desc_t,
 			&lobEmpty, 0, OCI_ATTR_LOBEMPTY, imp_sth->errhp, status);
 
 	if (status != OCI_SUCCESS)
@@ -1635,7 +1639,7 @@
 		src = INT2PTR(OCILobLocator *, SvIV(SvRV(phs->sv)));
 		dest = (OCILobLocator **) phs->progv;
 
-		OCILobLocatorAssign_log_stat(imp_dbh->svchp, imp_sth->errhp, src, dest, status);
+		OCILobLocatorAssign_log_stat(imp_dbh, imp_dbh->svchp, imp_sth->errhp, src, dest, status);
 		if (status != OCI_SUCCESS) {
 			oci_error(sth, imp_sth->errhp, status, "OCILobLocatorAssign");
 			return 0;
@@ -1655,7 +1659,7 @@
 
 		if (amtp > 0) {
 			ub1 lobtype = (phs->ftype == 112 ? OCI_TEMP_CLOB : OCI_TEMP_BLOB);
-			OCILobCreateTemporary_log_stat(imp_dbh->svchp, imp_sth->errhp,
+			OCILobCreateTemporary_log_stat(imp_dbh, imp_dbh->svchp, imp_sth->errhp,
 				(OCILobLocator *) phs->desc_h, (ub2) OCI_DEFAULT,
 				(ub1) OCI_DEFAULT, lobtype, TRUE, OCI_DURATION_SESSION, status);
 			if (status != OCI_SUCCESS) {
@@ -1666,12 +1670,22 @@
 			if( ! phs->csid ) {
 				ub1 csform = SQLCS_IMPLICIT;
 				ub2 csid = 0;
-				OCILobCharSetForm_log_stat( imp_sth->envhp, imp_sth->errhp, (OCILobLocator*)phs->desc_h, &csform, status );
+				OCILobCharSetForm_log_stat(imp_sth,
+                                           imp_sth->envhp,
+                                           imp_sth->errhp,
+                                           (OCILobLocator*)phs->desc_h,
+                                           &csform,
+                                           status );
 				if (status != OCI_SUCCESS)
 					return oci_error(sth, imp_sth->errhp, status, "OCILobCharSetForm");
 #ifdef OCI_ATTR_CHARSET_ID
 			/* Effectively only used so AL32UTF8 works properly */
-				OCILobCharSetId_log_stat( imp_sth->envhp, imp_sth->errhp, (OCILobLocator*)phs->desc_h, &csid, status );
+				OCILobCharSetId_log_stat(imp_sth,
+                                         imp_sth->envhp,
+                                         imp_sth->errhp,
+                                         (OCILobLocator*)phs->desc_h,
+                                         &csid,
+                                         status );
 				if (status != OCI_SUCCESS)
 					return oci_error(sth, imp_sth->errhp, status, "OCILobCharSetId");
 #endif /* OCI_ATTR_CHARSET_ID */
@@ -1681,7 +1695,7 @@
 				phs->csform = csform;
 			}
 
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	  calling OCILobWrite phs->csid=%d phs->csform=%d amtp=%d\n",
@@ -1689,7 +1703,7 @@
 
 		/* write lob data */
 
-			OCILobWrite_log_stat(imp_sth->svchp, imp_sth->errhp,
+			OCILobWrite_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp,
 				(OCILobLocator*)phs->desc_h, &amtp, 1, SvPVX(phs->sv), amtp, OCI_ONE_PIECE,
 					0,0, phs->csid, phs->csform, status);
 			if (status != OCI_SUCCESS) {
@@ -1722,7 +1736,12 @@
 	 */
 	ub1 csform = SQLCS_IMPLICIT;
 
-	OCILobCharSetForm_log_stat( imp_sth->envhp, imp_sth->errhp, lobl, &csform, status );
+	OCILobCharSetForm_log_stat(imp_sth,
+                               imp_sth->envhp,
+                               imp_sth->errhp,
+                               lobl,
+                               &csform,
+                               status );
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobCharSetForm");
 		sv_set_undef(dest_sv);	/* signal error */
@@ -1737,7 +1756,7 @@
 		return 0;
 	}
 
-	OCILobGetLength_log_stat(imp_sth->svchp, imp_sth->errhp,
+	OCILobGetLength_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp,
 				 lobl, &loblen, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobGetLength ora_blob_read_mb_piece");
@@ -1758,7 +1777,7 @@
 
 		New(42, buffer, buflen, ub1);
 
-		OCILobRead_log_stat(imp_sth->svchp, imp_sth->errhp, lobl,
+		OCILobRead_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobl,
 				&amtp, (ub4)1 + offset, buffer, buflen,
 				0, 0, (ub2)0 ,csform ,status );
 			  /* lab  0, 0, (ub2)0, (ub1)SQLCS_IMPLICIT, status); */
@@ -1842,14 +1861,19 @@
 		return 0;
 	}
 
-	OCILobGetLength_log_stat(imp_sth->svchp, imp_sth->errhp, lobl, &loblen, status);
+	OCILobGetLength_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobl, &loblen, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobGetLength ora_blob_read_piece");
 		sv_set_undef(dest_sv);	/* signal error */
 		return 0;
 	}
 
-	OCILobCharSetForm_log_stat( imp_sth->envhp, imp_sth->errhp, lobl, &csform, status );
+	OCILobCharSetForm_log_stat(imp_sth,
+                               imp_sth->envhp,
+                               imp_sth->errhp,
+                               lobl,
+                               &csform,
+                               status );
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobCharSetForm");
 		sv_set_undef(dest_sv);	/* signal error */
@@ -1892,7 +1916,7 @@
 		buflen = amtp;
 	}
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "		blob_read field %d: ftype %d %s, offset %ld, len %lu."
@@ -1904,11 +1928,11 @@
 		ub1 * bufp = (ub1 *)(SvPVX(dest_sv));
 		bufp += destoffset;
 
-		OCILobRead_log_stat(imp_sth->svchp, imp_sth->errhp, lobl,
+		OCILobRead_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobl,
 			&amtp, (ub4)1 + offset, bufp, buflen,
 			0, 0, (ub2)0 , csform, status);
 
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "		OCILobRead field %d %s: LOBlen %lu, LongReadLen %lu,"
@@ -1925,7 +1949,7 @@
 	}
 	else {
 		assert(amtp == 0);
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
 				"		OCILobRead field %d %s: LOBlen %lu, LongReadLen %lu, "
@@ -1964,7 +1988,7 @@
 
 	/* The length is expressed in terms of bytes for BLOBs and BFILEs,	*/
 	/* and in terms of characters for CLOBs	and NCLOBS			*/
-	OCILobGetLength_log_stat(imp_sth->svchp, imp_sth->errhp, lobloc, &loblen, status);
+	OCILobGetLength_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobloc, &loblen, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCILobGetLength fetch_lob");
 		return 0;
@@ -2024,7 +2048,12 @@
 
 	if (loblen > 0) {
 		ub1  csform = 0;
-		OCILobCharSetForm_log_stat(imp_sth->envhp, imp_sth->errhp, lobloc, &csform, status );
+		OCILobCharSetForm_log_stat(imp_sth,
+                                   imp_sth->envhp,
+                                   imp_sth->errhp,
+                                   lobloc,
+                                   &csform,
+                                   status );
 		if (status != OCI_SUCCESS) {
 			oci_error(sth, imp_sth->errhp, status, "OCILobCharSetForm");
 			sv_set_undef(dest_sv);
@@ -2032,7 +2061,7 @@
 		}
 
 	if (ftype == ORA_BFILE) {
-		OCILobFileOpen_log_stat(imp_sth->svchp, imp_sth->errhp, lobloc,
+		OCILobFileOpen_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobloc,
 				(ub1)OCI_FILE_READONLY, status);
 		if (status != OCI_SUCCESS) {
 			oci_error(sth, imp_sth->errhp, status, "OCILobFileOpen");
@@ -2041,7 +2070,7 @@
 		}
 	}
 
-	OCILobRead_log_stat(imp_sth->svchp, imp_sth->errhp, lobloc,
+	OCILobRead_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, lobloc,
 		&amtp, (ub4)1, SvPVX(dest_sv), buflen,
 		0, 0, (ub2)0, csform, status);
 
@@ -2069,7 +2098,7 @@
 
 
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 || oci_warn){
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 || oci_warn){
 		char buf[11];
 		strcpy(buf,"bytes");
 		if (ftype == ORA_CLOB)
@@ -2085,7 +2114,7 @@
 
     }
 	if (ftype == ORA_BFILE) {
-		OCILobFileClose_log_stat(imp_sth->svchp, imp_sth->errhp,
+		OCILobFileClose_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp,
 		lobloc, status);
 	}
 
@@ -2107,7 +2136,7 @@
 		/* tell perl what we've put in its dest_sv */
 		SvCUR(dest_sv) = amtp;
 		*SvEND(dest_sv) = '\0';
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "		OCILobRead %s %s: LOBlen %lu, LongReadLen %lu, "
@@ -2143,18 +2172,18 @@
 
 #ifdef OCI_DTYPE_REF
 static void
-fbh_setup_getrefpv(imp_fbh_t *fbh, int desc_t, char *bless)
+fbh_setup_getrefpv(imp_sth_t *imp_sth, imp_fbh_t *fbh, int desc_t, char *bless)
 {
 	dTHX;
 	if (DBIS->debug >= 2 || dbd_verbose >= 3 )
-	PerlIO_printf(DBILOGFP,
+        PerlIO_printf(DBIc_LOGPIO(imp_sth),
 		"	col %d: otype %d, desctype %d, %s", fbh->field_num, fbh->dbtype, desc_t, bless);
 	fbh->ftype  = fbh->dbtype;
 	fbh->disize = fbh->dbsize;
 	fbh->fetch_func = fetch_func_getrefpv;
 	fbh->bless  = bless;
 	fbh->desc_t = desc_t;
-	OCIDescriptorAlloc_ok(fbh->imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
+	OCIDescriptorAlloc_ok(imp_sth, fbh->imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
 }
 #endif
 
@@ -2211,6 +2240,7 @@
 static void get_attr_val(SV *sth,AV *list,imp_fbh_t *fbh, text  *name , OCITypeCode  typecode, dvoid	*attr_value )
 {
 	dTHX;
+    D_imp_sth(sth);
 	text		str_buf[200];
 	double		dnum;
 	size_t		str_len;
@@ -2224,8 +2254,10 @@
 	SV			*raw_sv;
 
   /* get the data based on the type code*/
-	if (DBIS->debug >= 5 || dbd_verbose >= 5 ) {
-		PerlIO_printf(DBILOGFP, " getting value of object attribute named  %s with typecode=%s\n",name,oci_typecode_name(typecode));
+	if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ) {
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),
+                      " getting value of object attribute named  %s with typecode=%s\n",
+                      name,oci_typecode_name(typecode));
 	}
 
 	switch (typecode)
@@ -2234,13 +2266,14 @@
 	case OCI_TYPECODE_INTERVAL_YM  :
 	case OCI_TYPECODE_INTERVAL_DS  :
 
-		OCIIntervalToText_log_stat(fbh->imp_sth->envhp,
-		 						fbh->imp_sth->errhp,
-		 						attr_value,
-		 						str_buf,
-		 						(size_t) 200,
-		 						&str_len,
-							status);
+      OCIIntervalToText_log_stat(fbh->imp_sth,
+                                 fbh->imp_sth->envhp,
+                                 fbh->imp_sth->errhp,
+                                 attr_value,
+                                 str_buf,
+                                 (size_t) 200,
+                                 &str_len,
+                                 status);
 		str_buf[str_len+1] = '\0';
 		av_push(list, newSVpv( (char *) str_buf,0));
 		break;
@@ -2251,8 +2284,13 @@
 
 
 		ub4_str_len = 200;
-		OCIDateTimeToText_log_stat(fbh->imp_sth->envhp,
-									fbh->imp_sth->errhp,attr_value,&ub4_str_len,str_buf,status);
+		OCIDateTimeToText_log_stat(fbh->imp_sth,
+                                   fbh->imp_sth->envhp,
+                                   fbh->imp_sth->errhp,
+                                   attr_value,
+                                   &ub4_str_len,
+                                   str_buf,
+                                   status);
 
 		if (typecode == OCI_TYPECODE_TIMESTAMP_TZ || typecode == OCI_TYPECODE_TIMESTAMP_LTZ){
 			char s_tz_hour[3]="000";
@@ -2285,7 +2323,12 @@
 
 	case OCI_TYPECODE_DATE :						 /* fixed length string*/
 		ub4_str_len = 200;
-		OCIDateToText_log_stat(fbh->imp_sth->errhp, (CONST OCIDate *) attr_value,&ub4_str_len,str_buf,status);
+		OCIDateToText_log_stat(fbh->imp_sth,
+                               fbh->imp_sth->errhp,
+                               (CONST OCIDate *) attr_value,
+                               &ub4_str_len,
+                               str_buf,
+                               status);
 		str_buf[ub4_str_len+1] = '\0';
 		av_push(list, newSVpv( (char *) str_buf,0));
 		break;
@@ -2373,6 +2416,7 @@
 get_object (SV *sth, AV *list, imp_fbh_t *fbh,fbh_obj_t *base_obj,OCIComplexObject *value, OCIType *instance_tdo, dvoid *obj_ind){
 
 	dTHX;
+    D_imp_sth(sth);
 	sword 		status;
 	dvoid		*element ;
 	dvoid		*attr_value;
@@ -2388,8 +2432,10 @@
 
 	 OCIType	*tdo = instance_tdo ? instance_tdo : obj->tdo;
 
-	if (DBIS->debug >= 5 || dbd_verbose >= 5 ) {
-		PerlIO_printf(DBILOGFP, " getting attributes of object named  %s with typecode=%s\n",obj->type_name,oci_typecode_name(obj->typecode));
+     if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ) {
+         PerlIO_printf(DBIc_LOGPIO(imp_sth),
+                       " getting attributes of object named  %s with typecode=%s\n",
+                       obj->type_name,oci_typecode_name(obj->typecode));
 	}
 
 	switch (obj->typecode) {
@@ -2417,7 +2463,11 @@
 						return 0;
 					}
 
-					OCITypeByRef_log_stat(fbh->imp_sth->envhp,fbh->imp_sth->errhp,type_ref,&tdo,status);
+					OCITypeByRef_log_stat(fbh->imp_sth,
+                                          fbh->imp_sth->envhp,
+                                          fbh->imp_sth->errhp,
+                                          type_ref,
+                                          &tdo,status);
 
 					if (status != OCI_SUCCESS) {
 						oci_error(sth, fbh->imp_sth->errhp, status, "OCITypeByRef");
@@ -2441,15 +2491,15 @@
 					}
 					if (tdo != obj->tdo) {
 						/* new subtyped -> get obj description */
-						if (DBIS->debug >= 5 || dbd_verbose >= 5 ) {
-							PerlIO_printf(DBILOGFP, " describe subtype (tdo=%p) of object type %s (tdo=%p)\n",(void*)tdo,base_obj->type_name,(void*)base_obj->tdo);
+						if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ) {
+							PerlIO_printf(DBIc_LOGPIO(imp_sth), " describe subtype (tdo=%p) of object type %s (tdo=%p)\n",(void*)tdo,base_obj->type_name,(void*)base_obj->tdo);
 						}
 
 						Newz(1, obj->next_subtype, 1, fbh_obj_t);
 						obj->next_subtype->tdo = tdo;
 						if ( describe_obj_by_tdo(sth, fbh->imp_sth, obj->next_subtype, 0 /*unknown level there*/) ) {
 							obj = obj->next_subtype;
-							if (DBIS->debug >= 5 || dbd_verbose >= 5 ){
+							if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ){
 								dump_struct(fbh->imp_sth,obj,0);
 							}
 						}
@@ -2458,8 +2508,8 @@
 						}
 					}
 
-					if (DBIS->debug >= 5 || dbd_verbose >= 5 ) {
-						PerlIO_printf(DBILOGFP, " getting attributes of object subtype  %s\n",obj->type_name);
+					if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ) {
+						PerlIO_printf(DBIc_LOGPIO(imp_sth), " getting attributes of object subtype  %s\n",obj->type_name);
 					}
 				}
 
@@ -2495,11 +2545,23 @@
 id only shows you examples with the C struct built in and only a single record. Nowhere does it say you can do it this way.
 */
 
-				status = OCIObjectGetAttr(fbh->imp_sth->envhp, fbh->imp_sth->errhp, value,
-										obj_ind, tdo,
-										(CONST oratext**)&fld->type_name, &fld->type_namel, 1,
-										(ub4 *)0, 0, &attr_null_status, &attr_null_struct,
-										&attr_value, &attr_tdo);
+				OCIObjectGetAttr_log_stat(
+                    fbh->imp_sth,
+                    fbh->imp_sth->envhp,
+                    fbh->imp_sth->errhp,
+                    value,                      /* instance */
+                    obj_ind,                    /* null_struct */
+                    tdo,                        /* tdo */
+                    (CONST oratext**)&fld->type_name, /* names */
+                    &fld->type_namel,                 /* lengths */
+                    1,                                /* name_count */
+                    (ub4 *)0,                         /* indexes */
+                    0,                                /* index_count */
+                    &attr_null_status,                /* attr_null_status */
+                    &attr_null_struct,                /* attr_null_struct */
+                    &attr_value,                      /* attr_value */
+                    &attr_tdo,                        /* attr_tdo */
+                    status);
 
 				if (status != OCI_SUCCESS) {
 					oci_error(sth, fbh->imp_sth->errhp, status, "OCIObjectGetAttr");
@@ -2538,8 +2600,12 @@
 				case OCI_TYPECODE_TABLE :					/* nested table */
 				case OCI_TYPECODE_VARRAY :					/* variable array */
 					fld = &obj->fields[0]; /*get the field */
-					OCIIterCreate_log_stat(fbh->imp_sth->envhp, fbh->imp_sth->errhp,
-						(OCIColl*) value, &itr,status);
+					OCIIterCreate_log_stat(fbh->imp_sth,
+                                           fbh->imp_sth->envhp,
+                                           fbh->imp_sth->errhp,
+                                           (OCIColl*) value,
+                                           &itr,
+                                           status);
 					if (status != OCI_SUCCESS) {
 						/*not really an error just no data
 						oci_error(sth, fbh->imp_sth->errhp, status, "OCIIterCreate");*/
@@ -2567,8 +2633,11 @@
 					}
 					/*nasty surprise here. one has to get rid of the iterator or you will leak memory
 					  not documented in oci or in demos */
-					OCIIterDelete_log_stat( fbh->imp_sth->envhp,
-							  fbh->imp_sth->errhp, &itr,status );
+					OCIIterDelete_log_stat(fbh->imp_sth,
+                                           fbh->imp_sth->envhp,
+                                           fbh->imp_sth->errhp,
+                                           &itr,
+                                           status );
 					if (status != OCI_SUCCESS) {
 						oci_error(sth, fbh->imp_sth->errhp, status, "OCIIterDelete");
 						return 0;
@@ -2597,8 +2666,12 @@
 fetch_func_oci_object(SV *sth, imp_fbh_t *fbh,SV *dest_sv)
 {
 	dTHX;
-	if (DBIS->debug >= 4 || dbd_verbose >= 4 ) {
-		PerlIO_printf(DBILOGFP, " getting an embedded object named  %s with typecode=%s\n",fbh->obj->type_name,oci_typecode_name(fbh->obj->typecode));
+    D_imp_sth(sth);
+
+	if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 ) {
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),
+                      " getting an embedded object named  %s with typecode=%s\n",
+                      fbh->obj->type_name,oci_typecode_name(fbh->obj->typecode));
 	}
 
 	if (fbh->obj->obj_ind && fbh->obj->obj_ind[0] == OCI_IND_NULL) {
@@ -2630,14 +2703,22 @@
 	ub4 actual_bufl=imp_sth->piece_size*(fb_ary->piece_count)+fb_ary->bufl;
 
 	if (fb_ary->piece_count==0){
-		if (DBIS->debug >= 6 || dbd_verbose >= 6 )
-			PerlIO_printf(DBILOGFP,"  Fetch persistent lob of %d (char/bytes) with callback in 1 piece of %d (Char/Bytes)\n",actual_bufl,fb_ary->bufl);
+		if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 )
+			PerlIO_printf(
+                DBIc_LOGPIO(imp_sth),
+                "  Fetch persistent lob of %d (char/bytes) with callback in 1 "
+                "piece of %d (Char/Bytes)\n",
+                actual_bufl,fb_ary->bufl);
 
 		memcpy(fb_ary->cb_abuf,fb_ary->abuf,fb_ary->bufl );
 
 	} else {
-			if (DBIS->debug >= 6 || dbd_verbose >= 6 )
-			PerlIO_printf(DBILOGFP,"  Fetch persistent lob of %d (Char/Bytes) with callback in %d piece(s) of %d (Char/Bytes) and one piece of %d (Char/Bytes)\n",actual_bufl,fb_ary->piece_count,fbh->piece_size,fb_ary->bufl);
+        if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 )
+			PerlIO_printf(
+                DBIc_LOGPIO(imp_sth),
+                "  Fetch persistent lob of %d (Char/Bytes) with callback in %d "
+                "piece(s) of %d (Char/Bytes) and one piece of %d (Char/Bytes)\n",
+                actual_bufl,fb_ary->piece_count,fbh->piece_size,fb_ary->bufl);
 
 		memcpy(fb_ary->cb_abuf+imp_sth->piece_size*(fb_ary->piece_count),fb_ary->abuf,fb_ary->bufl );
 	}
@@ -2671,21 +2752,22 @@
 	ub2	rcode  = 0;
 	sword status = OCI_NEED_DATA;
 
-	if (DBIS->debug >= 4 || dbd_verbose >= 4 ) {
+	if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 ) {
 		PerlIO_printf(DBIc_LOGPIO(imp_sth), "in fetch_get_piece  \n");
 	}
 
 	while (status == OCI_NEED_DATA){
 
-			OCIStmtGetPieceInfo_log_stat(fbh->imp_sth->stmhp,
-										 fbh->imp_sth->errhp,
-										 &hdlptr,
-										 &hdltype,
-										 &in_out,
-										 &iter,
-										 &idx,
-										 &piece,
-										 status);
+        OCIStmtGetPieceInfo_log_stat(fbh->imp_sth,
+                                     fbh->imp_sth->stmhp,
+                                     fbh->imp_sth->errhp,
+                                     &hdlptr,
+                                     &hdltype,
+                                     &in_out,
+                                     &iter,
+                                     &idx,
+                                     &piece,
+                                     status);
 
 		/* This is how this works
 		First we get the piece Info above
@@ -2700,7 +2782,8 @@
 		*/
 		if ( hdlptr==fbh->defnp){
 
-			OCIStmtSetPieceInfo_log_stat(fbh->defnp,
+			OCIStmtSetPieceInfo_log_stat(fbh->imp_sth,
+                                         fbh->defnp,
 										 fbh->imp_sth->errhp,
 										 fb_ary->abuf,
 										 &buflen,
@@ -2709,7 +2792,7 @@
 										 &rcode,status);
 
 
-				OCIStmtFetch_log_stat(fbh->imp_sth->stmhp,fbh->imp_sth->errhp,1,(ub2)OCI_FETCH_NEXT,OCI_DEFAULT,status);
+            OCIStmtFetch_log_stat(fbh->imp_sth, fbh->imp_sth->stmhp,fbh->imp_sth->errhp,1,(ub2)OCI_FETCH_NEXT,OCI_DEFAULT,status);
 
 
 			if (status==OCI_SUCCESS_WITH_INFO && !DBIc_has(fbh->imp_sth,DBIcf_LongTruncOk)){
@@ -2727,7 +2810,7 @@
 	}
 
 
-	if (DBIS->debug >= 6 || dbd_verbose >= 6 ){
+	if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 ){
 		if (fb_ary->piece_count==1){
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
@@ -2815,6 +2898,8 @@
 static void
 fetch_cleanup_pres_lobs(SV *sth,imp_fbh_t *fbh){
 	dTHX;
+    D_imp_sth(sth);
+
 	fb_ary_t *fb_ary = fbh->fb_ary;
 
 	if( sth ) { /* For GCC not to warn on unused parameter*/  }
@@ -2824,8 +2909,8 @@
 	fb_ary->cb_bufl=fbh->disize; /*reset this back to the max size for the fetch*/
 	memset( fb_ary->cb_abuf, '\0', fbh->disize ); /*clean out the call back buffer*/
 
- 	if (DBIS->debug >= 5 || dbd_verbose >= 5 )
-		PerlIO_printf(DBILOGFP,"  fetch_cleanup_pres_lobs \n");
+ 	if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 )
+		PerlIO_printf(DBIc_LOGPIO(imp_sth),"  fetch_cleanup_pres_lobs \n");
 
 	return;
 }
@@ -2833,6 +2918,7 @@
 static void
 fetch_cleanup_oci_object(SV *sth, imp_fbh_t *fbh){
 	dTHX;
+    D_imp_sth(sth);
 
 	if( sth ) { /* For GCC not to warn on unused parameter*/  }
 
@@ -2842,8 +2928,8 @@
 		}
 	}
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
-			PerlIO_printf(DBILOGFP,"  fetch_cleanup_oci_object \n");
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
+        PerlIO_printf(DBIc_LOGPIO(imp_sth),"  fetch_cleanup_oci_object \n");
 	return;
 }
 
@@ -2856,7 +2942,7 @@
 	imp_sth->rs_fetch_count		=0;
 	imp_sth->rs_array_status	=OCI_SUCCESS;
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	rs_array_init:imp_sth->rs_array_size=%d, rs_array_idx=%d, "
@@ -2950,7 +3036,7 @@
 		/* is prefetch_rows are greater than the RowCahceSize then use prefetch_rows*/
 	}
 
-	OCIAttrSet_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT,
+	OCIAttrSet_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT,
 						&prefetch_mem,  sizeof(prefetch_mem), OCI_ATTR_PREFETCH_MEMORY,
 						imp_sth->errhp, status);
 
@@ -2960,7 +3046,7 @@
 		++num_errors;
 	}
 
-	OCIAttrSet_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT,
+	OCIAttrSet_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT,
 					&prefetch_rows, sizeof(prefetch_rows), OCI_ATTR_PREFETCH_ROWS,
 				imp_sth->errhp, status);
 
@@ -2988,7 +3074,7 @@
 
 
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 || oci_warn) /*will also display if oci_warn is on*/
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 || oci_warn) /*will also display if oci_warn is on*/
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
 			"	cache settings DB Handle RowCacheSize=%d,Statement Handle "
@@ -3011,7 +3097,7 @@
 	sword status;
 	OCIRef *type_ref;
 
-	if (DBIS->debug >= 5 || dbd_verbose >= 5 ) {
+	if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ) {
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "At level=%d in description an embedded object \n",level);
@@ -3026,7 +3112,12 @@
 		return 0;
 	}
 
-	OCITypeByRef_log_stat(imp_sth->envhp,imp_sth->errhp,type_ref,&obj->tdo,status);
+	OCITypeByRef_log_stat(imp_sth,
+                          imp_sth->envhp,
+                          imp_sth->errhp,
+                          type_ref,
+                          &obj->tdo,
+                          status);
 
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, imp_sth->errhp, status, "OCITypeByRef");
@@ -3044,7 +3135,7 @@
 	ub4  type_namel, schema_namel;
 
 
-	OCIDescribeAny_log_stat(imp_sth->svchp,imp_sth->errhp,obj->tdo,(ub4)0,OCI_OTYPE_PTR,(ub1)1,OCI_PTYPE_TYPE,imp_sth->dschp,status);
+	OCIDescribeAny_log_stat(imp_sth, imp_sth->svchp,imp_sth->errhp,obj->tdo,(ub4)0,OCI_OTYPE_PTR,(ub1)1,OCI_PTYPE_TYPE,imp_sth->dschp,status);
 	/*we have the Actual TDO  so lets see what it is made up of by a describe*/
 
 	if (status != OCI_SUCCESS) {
@@ -3090,7 +3181,7 @@
 		return 0;
 	}
 
-	if (DBIS->debug >= 6 || dbd_verbose >= 6 ) {
+	if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 ) {
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "Getting the properties of object named =%s at level %d typecode=%d\n",
@@ -3100,7 +3191,7 @@
 	if (obj->typecode == OCI_TYPECODE_OBJECT || obj->typecode == OCI_TYPECODE_OPAQUE){
 		OCIParam *list_attr= (OCIParam *) 0;
 		ub2	  pos;
-		if (DBIS->debug >= 6 || dbd_verbose >= 6 ) {
+		if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 ) {
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "Object named =%s at level %d is an Object\n",
@@ -3115,7 +3206,7 @@
 		}
 		/*we will need a reff to the TDO for the pin operation*/
 
-		OCIObjectPin_log_stat(imp_sth->envhp,imp_sth->errhp, obj->obj_ref,(dvoid  **)&obj->obj_type,status);
+		OCIObjectPin_log_stat(imp_sth, imp_sth->envhp,imp_sth->errhp, obj->obj_ref,(dvoid  **)&obj->obj_type,status);
 
 		if (status != OCI_SUCCESS) {
 			oci_error(sth,imp_sth->errhp, status, "OCIObjectPin");
@@ -3152,7 +3243,7 @@
 			OCIParam *parmdf= (OCIParam *) 0;
 			fbh_obj_t *fld = &obj->fields[pos-1]; /*get the field holder*/
 
-			OCIParamGet_log_stat((dvoid *) list_attr,(ub4) OCI_DTYPE_PARAM, imp_sth->errhp,(dvoid *)&parmdf, (ub4) pos ,status);
+			OCIParamGet_log_stat(imp_sth, (dvoid *) list_attr,(ub4) OCI_DTYPE_PARAM, imp_sth->errhp,(dvoid *)&parmdf, (ub4) pos ,status);
 
 			if (status != OCI_SUCCESS) {
 				oci_error(sth,imp_sth->errhp, status, "OCIParamGet");
@@ -3175,7 +3266,7 @@
 				return 0;
 			}
 
-			if (DBIS->debug >= 6 || dbd_verbose >= 6 ) {
+			if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 ) {
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "Getting property #%d, named=%s and its typecode is %d \n",
@@ -3192,7 +3283,7 @@
 	} else {
 		/*well this is an embedded table or varray of some form so find out what is in it*/
 
-		if (DBIS->debug >= 6 || dbd_verbose >= 6 ) {
+		if (DBIc_DBISTATE(imp_sth)->debug >= 6 || dbd_verbose >= 6 ) {
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "Object named =%s at level %d is an Varray or Table\n",
@@ -3315,7 +3406,7 @@
 
 
 	if (imp_sth->stmt_type != OCI_STMT_SELECT) { /* XXX DISABLED, see num_fields test below */
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "	dbd_describe skipped for %s\n",
@@ -3324,7 +3415,7 @@
 		return 1;
 	}
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	dbd_describe %s (%s, lb %lu)...\n",
@@ -3335,7 +3426,7 @@
 	/* sth is not 'active' (executing) then we need an explicit describe.	*/
 	if ( !DBIc_ACTIVE(imp_sth) ) {
 
-		OCIStmtExecute_log_stat(imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
+		OCIStmtExecute_log_stat(imp_sth, imp_sth->svchp, imp_sth->stmhp, imp_sth->errhp,
 			0, 0, 0, 0, OCI_DESCRIBE_ONLY, status);
 		if (status != OCI_SUCCESS) {
 			oci_error(h, imp_sth->errhp, status,
@@ -3350,7 +3441,7 @@
 		return 0;
 	}
 	if (num_fields == 0) {
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "	dbd_describe skipped for %s (no fields returned)\n",
@@ -3374,7 +3465,7 @@
 		fbh->field_num	= i;
 		fbh->define_mode = OCI_DEFAULT;
 
-		OCIParamGet_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT, imp_sth->errhp,
+		OCIParamGet_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT, imp_sth->errhp,
 				(dvoid**)&fbh->parmdp, (ub4)i, status);
 
 		if (status != OCI_SUCCESS) {
@@ -3413,7 +3504,7 @@
 		fbh->name	= SvPVX(fbh->name_sv);
 		fbh->ftype	= 5;	/* default: return as null terminated string */
 
-		if (DBIS->debug >= 4 || dbd_verbose >= 4 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "Describe col #%d type=%d(%s)\n",
@@ -3555,7 +3646,7 @@
 				fbh->fetch_cleanup = fetch_cleanup_oci_object; /* clean up any AV  from the fetch*/
 				fbh->desc_t = SQLT_NTY;
 				if (!imp_sth->dschp){
-					OCIHandleAlloc_ok(imp_sth->envhp, &imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+					OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 				 	if (status != OCI_SUCCESS) {
 						oci_error(h,imp_sth->errhp, status, "OCIHandleAlloc");
 						++num_errors;
@@ -3636,7 +3727,7 @@
 
 					fbh->bless  = "OCILobLocatorPtr";
 					fbh->desc_t = OCI_DTYPE_LOB;
-					OCIDescriptorAlloc_ok(imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
+					OCIDescriptorAlloc_ok(imp_sth, imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
 
 
 				}
@@ -3645,7 +3736,7 @@
 
 #ifdef OCI_DTYPE_REF
 			case	111:				/* REF		*/
-				fbh_setup_getrefpv(fbh, OCI_DTYPE_REF, "OCIRefPtr");
+              fbh_setup_getrefpv(imp_sth, fbh, OCI_DTYPE_REF, "OCIRefPtr");
 				break;
 #endif
 
@@ -3675,14 +3766,14 @@
 				fbh->ftype  = fbh->dbtype;
 				fbh->disize = fbh->dbsize;
 				p = "Field %d has an Oracle type (%d) which is not explicitly supported%s";
-				if (DBIS->debug >= 1 || dbd_verbose >= 3 )
+				if (DBIc_DBISTATE(imp_sth)->debug >= 1 || dbd_verbose >= 3 )
 					PerlIO_printf(DBIc_LOGPIO(imp_sth), p, i, fbh->dbtype, "\n");
 				if (PL_dowarn)
 					warn(p, i, fbh->dbtype, "");
 				break;
 		}
 
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			  PerlIO_printf(
                   DBIc_LOGPIO(imp_sth),
                   "Described col %2d: dbtype %d(%s), scale %d, prec %d, nullok %d, "
@@ -3705,8 +3796,8 @@
 
 		est_width += avg_width;
 
-		if (DBIS->debug >= 2 || dbd_verbose >= 3 )
-			dbd_fbh_dump(fbh, (int)i, 0);
+		if (DBIc_DBISTATE(imp_sth)->debug >= 2 || dbd_verbose >= 3 )
+			dbd_fbh_dump(imp_sth, fbh, (int)i, 0);
 
 	}/* end define of filed struct[i] fbh*/
 
@@ -3745,12 +3836,12 @@
 		}
 
 		if (fbh->ftype == ORA_RSET) { /* RSET */
-			OCIHandleAlloc_ok(imp_sth->envhp,
+			OCIHandleAlloc_ok(imp_sth, imp_sth->envhp,
 			(dvoid*)&((OCIStmt **)fb_ary->abuf)[0],
 			 OCI_HTYPE_STMT, status);
 		}
 
-		OCIDefineByPos_log_stat(imp_sth->stmhp,
+		OCIDefineByPos_log_stat(imp_sth, imp_sth->stmhp,
 			&fbh->defnp,
 			imp_sth->errhp,
 			(ub4) i,
@@ -3766,11 +3857,11 @@
 
 		if (fbh->clbk_lob){
 			 /* use a dynamic callback for persistent binary and char lobs*/
-			OCIDefineDynamic_log_stat(fbh->defnp,imp_sth->errhp,(dvoid *) fbh,status);
+			OCIDefineDynamic_log_stat(imp_sth, fbh->defnp,imp_sth->errhp,(dvoid *) fbh,status);
 		}
 
 		if (fbh->ftype == 108)  { /* Embedded object bind it differently*/
-			if (DBIS->debug >= 5 || dbd_verbose >= 5 ){
+			if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ){
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "Field #%d is a  object or colection of some sort. "
@@ -3782,10 +3873,10 @@
 				++num_errors;
 			}
 
-			if (DBIS->debug >= 5 || dbd_verbose >= 5 ){
+			if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ){
 				dump_struct(imp_sth,fbh->obj,0);
 			}
-			OCIDefineObject_log_stat(fbh->defnp,imp_sth->errhp,fbh->obj->tdo,(dvoid**)&fbh->obj->obj_value,(dvoid**)&fbh->obj->obj_ind,status);
+			OCIDefineObject_log_stat(imp_sth,fbh->defnp,imp_sth->errhp,fbh->obj->tdo,(dvoid**)&fbh->obj->obj_value,(dvoid**)&fbh->obj->obj_ind,status);
 
 			if (status != OCI_SUCCESS) {
 				oci_error(h,imp_sth->errhp, status, "OCIDefineObject");
@@ -3803,12 +3894,12 @@
 #ifdef OCI_ATTR_CHARSET_FORM
 		if ( (fbh->dbtype == 1) && fbh->csform ) {
 		/* csform may be 0 when talking to Oracle 8.0 database*/
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	calling OCIAttrSet OCI_ATTR_CHARSET_FORM with csform=%d (%s)\n",
                     fbh->csform,oci_csform_name(fbh->csform) );
-				OCIAttrSet_log_stat( fbh->defnp, (ub4) OCI_HTYPE_DEFINE, (dvoid *) &fbh->csform,
+            OCIAttrSet_log_stat(imp_sth, fbh->defnp, (ub4) OCI_HTYPE_DEFINE, (dvoid *) &fbh->csform,
 						 (ub4) 0, (ub4) OCI_ATTR_CHARSET_FORM, imp_sth->errhp, status );
 			if (status != OCI_SUCCESS) {
 				oci_error(h, imp_sth->errhp, status, "OCIAttrSet OCI_ATTR_CHARSET_FORM");
@@ -3819,7 +3910,7 @@
 
 	}
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
 			"	dbd_describe'd %d columns (row bytes: %d max, %d est avg, cache: %d)\n",
@@ -3864,7 +3955,7 @@
 		status = OCI_SUCCESS;
 	}
 	else {
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 ){
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 ){
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "	dbd_st_fetch %d fields...\n", DBIc_NUM_FIELDS(imp_sth));
@@ -3874,7 +3965,7 @@
 			if (imp_sth->exe_mode!=OCI_STMT_SCROLLABLE_READONLY)
 				croak ("attempt to use a scrollable cursor without first setting ora_exe_mode to OCI_STMT_SCROLLABLE_READONLY\n") ;
 
-			if (DBIS->debug >= 4 || dbd_verbose >= 4 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	Scrolling Fetch, postion before fetch=%d, "
@@ -3882,12 +3973,12 @@
 					imp_sth->fetch_position, oci_fetch_options(imp_sth->fetch_orient),
                     imp_sth->fetch_offset);
 
-			OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp,1, imp_sth->fetch_orient,imp_sth->fetch_offset, status);
+			OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp,1, imp_sth->fetch_orient,imp_sth->fetch_offset, status);
 				/*this will work without a round trip so might as well open it up for all statments handles*/
 				/* defualt and OCI_FETCH_NEXT are the same so this avoids miscaluation on the next value*/
 			OCIAttrGet_stmhp_stat(imp_sth, &imp_sth->fetch_position, 0, OCI_ATTR_CURRENT_POSITION, status);
 
-			if (DBIS->debug >= 4 || dbd_verbose >= 4 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	Scrolling Fetch, postion after fetch=%d\n",
@@ -3896,7 +3987,7 @@
 		else {
 
 			if (imp_sth->row_cache_off){ /*Do not use array fetch or local cache */
-				OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp,1,(ub2)OCI_FETCH_NEXT, OCI_DEFAULT, status);
+				OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp, imp_sth->errhp,1,(ub2)OCI_FETCH_NEXT, OCI_DEFAULT, status);
 				imp_sth->rs_fetch_count++;
 				imp_sth->rs_array_idx=0;
 
@@ -3908,7 +3999,7 @@
 				if (imp_sth->rs_array_num_rows<=imp_sth->rs_array_idx && (imp_sth->rs_array_status==OCI_SUCCESS || imp_sth->rs_array_status==OCI_SUCCESS_WITH_INFO)) {
 /* 			PerlIO_printf(DBIc_LOGPIO(imp_sth), "	dbd_st_fetch fields...b\n");*/
 
-					OCIStmtFetch_log_stat(imp_sth->stmhp,imp_sth->errhp,imp_sth->rs_array_size,(ub2)OCI_FETCH_NEXT,OCI_DEFAULT,status);
+					OCIStmtFetch_log_stat(imp_sth, imp_sth->stmhp,imp_sth->errhp,imp_sth->rs_array_size,(ub2)OCI_FETCH_NEXT,OCI_DEFAULT,status);
 
 					imp_sth->rs_array_status=status;
 					imp_sth->rs_fetch_count++;
@@ -3920,7 +4011,7 @@
 					imp_dbh->RowsInCache =imp_sth->rs_array_size;
 					imp_sth->RowsInCache =imp_sth->rs_array_size;
 
-					if (DBIS->debug >= 4 || dbd_verbose >= 4 || oci_warn)
+					if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 || oci_warn)
 						PerlIO_printf(
                             DBIc_LOGPIO(imp_sth),
                             "...Fetched %d rows\n",imp_sth->rs_array_num_rows);
@@ -3946,7 +4037,7 @@
 		if (status == OCI_NO_DATA) {
 			dTHR; 			/* for DBIc_ACTIVE_off	*/
 			DBIc_ACTIVE_off(imp_sth);	/* eg finish		*/
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 || oci_warn)
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 || oci_warn)
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	dbd_st_fetch no-more-data, fetch count=%d\n",
@@ -3968,9 +4059,9 @@
 	/* per-field rcode value be dealt with as we fetch the data	*/
 	}
 
-	av = DBIS->get_fbav(imp_sth);
+	av = DBIc_DBISTATE(imp_sth)->get_fbav(imp_sth);
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 ) {
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 ) {
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "	dbd_st_fetched %d fields with status of %d(%s)\n",
@@ -3988,7 +4079,7 @@
 		SV *sv 				= AvARRAY(av)[i]; /* Note: we (re)use the SV in the AV	*/;
 
 
-		if (DBIS->debug >= 4 || dbd_verbose >= 4 ) {
+		if (DBIc_DBISTATE(imp_sth)->debug >= 4 || dbd_verbose >= 4 ) {
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "	field #%d with rc=%d(%s)\n",i+1,rc,oci_col_return_codes(rc));
@@ -4110,7 +4201,7 @@
 			oci_error(sth, imp_sth->errhp, OCI_ERROR, buf);
 		}
 
-		if (DBIS->debug >= 5 || dbd_verbose >= 5 ){
+		if (DBIc_DBISTATE(imp_sth)->debug >= 5 || dbd_verbose >= 5 ){
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "\n		%p (field=%d): %s\n",	 av, i,neatsvpv(sv,10));
@@ -4140,21 +4231,21 @@
 	}
 #ifdef ORA_OCI_112
     if (imp_dbh->using_drcp){
-		OCIAttrSet_log_stat(imp_dbh->authp, OCI_HTYPE_SESSION,
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->authp, OCI_HTYPE_SESSION,
 			*uidp, strlen(*uidp),
 			(ub4) OCI_ATTR_USERNAME, imp_dbh->errhp, status);
 
-		OCIAttrSet_log_stat(imp_dbh->authp, OCI_HTYPE_SESSION,
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->authp, OCI_HTYPE_SESSION,
 			(strlen(*pwdp)) ? *pwdp : NULL, strlen(*pwdp),
 			(ub4) OCI_ATTR_PASSWORD, imp_dbh->errhp, status);
 	}
 	else {
 #endif
-		OCIAttrSet_log_stat(imp_dbh->seshp, OCI_HTYPE_SESSION,
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp, OCI_HTYPE_SESSION,
 				*uidp, strlen(*uidp),
 				(ub4) OCI_ATTR_USERNAME, imp_dbh->errhp, status);
 
-		OCIAttrSet_log_stat(imp_dbh->seshp, OCI_HTYPE_SESSION,
+		OCIAttrSet_log_stat(imp_dbh, imp_dbh->seshp, OCI_HTYPE_SESSION,
 				(strlen(*pwdp)) ? *pwdp : NULL, strlen(*pwdp),
 			(ub4) OCI_ATTR_PASSWORD, imp_dbh->errhp, status);
 #ifdef ORA_OCI_112
@@ -4171,9 +4262,9 @@
 	sword status;
 	/* XXX should possibly create new session before ending the old so	*/
 	/* that if the new one can't be created, the old will still work.	*/
-	OCISessionEnd_log_stat(imp_dbh->svchp, imp_dbh->errhp,
+	OCISessionEnd_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp,
 			imp_dbh->seshp, OCI_DEFAULT, status); /* XXX check status here?*/
-	OCISessionBegin_log_stat( imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,
+	OCISessionBegin_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, imp_dbh->seshp,
 			 ora_parse_uid(imp_dbh, &uid, &pwd), (ub4) OCI_DEFAULT, status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCISessionBegin");
@@ -4317,14 +4408,14 @@
 		"Unable to parse table name for LOB refetch");
 
  	if (!imp_sth->dschp){
-			OCIHandleAlloc_ok(imp_sth->envhp, &imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+        OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 			if (status != OCI_SUCCESS) {
 			oci_error(sth,imp_sth->errhp, status, "OCIHandleAlloc");
 		}
 
 	 }
 
-	OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename, strlen(tablename),
+	OCIDescribeAny_log_stat(imp_sth, imp_sth->svchp, errhp, tablename, strlen(tablename),
 		(ub1)OCI_OTYPE_NAME, (ub1)1, (ub1)OCI_PTYPE_SYN, imp_sth->dschp, status);
 
 	if (status == OCI_SUCCESS) { /* There is a synonym, get the schema */
@@ -4335,14 +4426,14 @@
 		strncpy(syn_name,tablename,strlen(tablename));
 		/* Put the synonym name here for later user */
 
-		OCIAttrGet_log_stat(imp_sth->dschp,  OCI_HTYPE_DESCRIBE,
+		OCIAttrGet_log_stat(imp_sth, imp_sth->dschp,  OCI_HTYPE_DESCRIBE,
 				&parmhp, 0, OCI_ATTR_PARAM, errhp, status);
 
-		OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
+		OCIAttrGet_log_stat(imp_sth, parmhp, OCI_DTYPE_PARAM,
 				&syn_schema, &syn_schema_len, OCI_ATTR_SCHEMA_NAME, errhp, status);
 
 
-		OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
+		OCIAttrGet_log_stat(imp_sth, parmhp, OCI_DTYPE_PARAM,
 				&tablename, &tn_len, OCI_ATTR_NAME, errhp, status);
 
 		strncpy(new_tablename,syn_schema,syn_schema_len);
@@ -4352,7 +4443,7 @@
 
 		tablename=new_tablename;
 
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "		lob refetch using a synonym named=%s for %s \n",
@@ -4360,38 +4451,38 @@
 
 
 	}
-	OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename, strlen(tablename),
+	OCIDescribeAny_log_stat(imp_sth, imp_sth->svchp, errhp, tablename, strlen(tablename),
 		(ub1)OCI_OTYPE_NAME, (ub1)1, (ub1)OCI_PTYPE_TABLE, imp_sth->dschp, status);
 
 	if (status != OCI_SUCCESS) {
 	/* XXX this OCI_PTYPE_TABLE->OCI_PTYPE_VIEW fallback should actually be	*/
 	/* a loop that includes synonyms etc */
-		OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename, strlen(tablename),
+		OCIDescribeAny_log_stat(imp_sth, imp_sth->svchp, errhp, tablename, strlen(tablename),
 			(ub1)OCI_OTYPE_NAME, (ub1)1, (ub1)OCI_PTYPE_VIEW, imp_sth->dschp, status);
 		if (status != OCI_SUCCESS) {
-			OCIHandleFree_log_stat(imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+			OCIHandleFree_log_stat(imp_sth, imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 			return oci_error(sth, errhp, status, "OCIDescribeAny(view)/LOB refetch");
 		}
 	}
 
-	OCIAttrGet_log_stat(imp_sth->dschp,  OCI_HTYPE_DESCRIBE,
+	OCIAttrGet_log_stat(imp_sth, imp_sth->dschp,  OCI_HTYPE_DESCRIBE,
 				&parmhp, 0, OCI_ATTR_PARAM, errhp, status);
 	if (!status ) {
-		OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
+		OCIAttrGet_log_stat(imp_sth, parmhp, OCI_DTYPE_PARAM,
 				&numcols, 0, OCI_ATTR_NUM_COLS, errhp, status);
 	}
 
 	if (!status ) {
-		OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
+		OCIAttrGet_log_stat(imp_sth, parmhp, OCI_DTYPE_PARAM,
 				&collisthd, 0, OCI_ATTR_LIST_COLUMNS, errhp, status);
 	}
 
 	if (status != OCI_SUCCESS) {
-		OCIHandleFree_log_stat(imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+		OCIHandleFree_log_stat(imp_sth, imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 		return oci_error(sth, errhp, status, "OCIDescribeAny/OCIAttrGet/LOB refetch");
 	}
 
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
             "		lob refetch from table %s, %d columns:\n",
@@ -4401,21 +4492,21 @@
 		ub2 col_dbtype;
 		char *col_name;
 		ub4  col_name_len;
-		OCIParamGet_log_stat(collisthd, OCI_DTYPE_PARAM, errhp, (dvoid**)&colhd, i, status);
+		OCIParamGet_log_stat(imp_sth, collisthd, OCI_DTYPE_PARAM, errhp, (dvoid**)&colhd, i, status);
 		if (status)
 			break;
 
-		OCIAttrGet_log_stat(colhd, OCI_DTYPE_PARAM, &col_dbtype, 0,
+		OCIAttrGet_log_stat(imp_sth, colhd, OCI_DTYPE_PARAM, &col_dbtype, 0,
 							OCI_ATTR_DATA_TYPE, errhp, status);
 		if (status)
 			break;
 
-		OCIAttrGet_log_stat(colhd, OCI_DTYPE_PARAM, &col_name, &col_name_len,
+		OCIAttrGet_log_stat(imp_sth, colhd, OCI_DTYPE_PARAM, &col_name, &col_name_len,
 				OCI_ATTR_NAME, errhp, status);
 		if (status)
 			break;
 
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
                 "		lob refetch table col %d: '%.*s' otype %d\n",
@@ -4435,17 +4526,17 @@
 
 		(void)SvIOK_on(sv);	/* "what a wonderful hack!" */
 		(void)hv_store(lob_cols_hv, col_name,col_name_len, sv,0);
-		OCIDescriptorFree(colhd, OCI_DTYPE_PARAM);
+		OCIDescriptorFree_log(imp_sth, colhd, OCI_DTYPE_PARAM);
 		colhd = NULL;
 	}
 
 	if (colhd)
-		OCIDescriptorFree(colhd, OCI_DTYPE_PARAM);
+		OCIDescriptorFree_log(imp_sth, colhd, OCI_DTYPE_PARAM);
 
 	if (status != OCI_SUCCESS) {
 		oci_error(sth, errhp, status,
 			"OCIDescribeAny/OCIParamGet/OCIAttrGet/LOB refetch");
-		OCIHandleFree_log_stat(imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+		OCIHandleFree_log_stat(imp_sth, imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 		return 0;
 	}
 
@@ -4498,7 +4589,7 @@
 					while( (sv_other = hv_iternextsv(lob_cols_hv, &p_other, &i)) != NULL ) {
 						if (phs->ftype != SvIV(sv_other))
 							continue;
-						if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+						if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 							PerlIO_printf(
                                 DBIc_LOGPIO(imp_sth),
                                 "		both %s and %s have type %d - ambiguous\n",
@@ -4517,7 +4608,7 @@
 			(SvCUR(sql_select)>7)?", ":"", p, &phs->name[1]);
 			sv_catpv(sql_select, sql_field);
 
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "		lob refetch %s param: otype %d, matched field '%s' %s(%s)\n",
@@ -4530,14 +4621,14 @@
 					fbh->dbtype = phs->ftype;
 					fbh->disize = 99;
 					fbh->desc_t = OCI_DTYPE_LOB;
-					OCIDescriptorAlloc_ok(imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
+					OCIDescriptorAlloc_ok(imp_sth, imp_sth->envhp, &fbh->desc_h, fbh->desc_t);
 
 			break;	/* we're done with this placeholder now	*/
 
 		}
 		if (!matched) {
 			++unmatched_params;
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
 					"		lob refetch %s param: otype %d, UNMATCHED\n",
@@ -4555,7 +4646,7 @@
 	sv_catpv(sql_select, " from ");
 	sv_catpv(sql_select, tablename);
 	sv_catpv(sql_select, " where rowid = :rid for update"); /* get row with lock */
-	if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+	if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 		PerlIO_printf(
             DBIc_LOGPIO(imp_sth),
 			"		lob refetch sql: %s\n", SvPVX(sql_select));
@@ -4564,8 +4655,8 @@
 	lr->rowid  = NULL;
 	lr->parmdp_tmp = NULL;
 	lr->parmdp_lob = NULL;
-	OCIHandleAlloc_ok(imp_sth->envhp, &lr->stmthp, OCI_HTYPE_STMT, status);
-	OCIStmtPrepare_log_stat(lr->stmthp, errhp,
+	OCIHandleAlloc_ok(imp_sth, imp_sth->envhp, &lr->stmthp, OCI_HTYPE_STMT, status);
+	OCIStmtPrepare_log_stat(imp_sth, lr->stmthp, errhp,
 		(text*)SvPVX(sql_select), SvCUR(sql_select), OCI_NTV_SYNTAX,
 			OCI_DEFAULT, status);
 
@@ -4576,11 +4667,11 @@
 	}
 
 	/* bind the rowid input */
-	OCIDescriptorAlloc_ok(imp_sth->envhp, &lr->rowid, OCI_DTYPE_ROWID);
-	OCIBindByName_log_stat(lr->stmthp, &lr->bindhp, errhp, (text*)":rid", 4,
+	OCIDescriptorAlloc_ok(imp_sth, imp_sth->envhp, &lr->rowid, OCI_DTYPE_ROWID);
+	OCIBindByName_log_stat(imp_sth, lr->stmthp, &lr->bindhp, errhp, (text*)":rid", 4,
 		&lr->rowid, sizeof(OCIRowid*), SQLT_RDD, 0,0,0,0,0, OCI_DEFAULT, status);
 	if (status != OCI_SUCCESS) {
-		OCIDescriptorFree(lr->rowid, OCI_DTYPE_ROWID);
+		OCIDescriptorFree_log(imp_sth, lr->rowid, OCI_DTYPE_ROWID);
 		OCIHandleFree(lr->stmthp, OCI_HTYPE_STMT);
 		Safefree(lr);
 		return oci_error(sth, errhp, status, "OCIBindByPos/LOB refetch");
@@ -4596,17 +4687,17 @@
 			croak("panic: LOB refetch for '%s' param (%ld) - name not found",fbh->name,(unsigned long)i+1);
 		phs = (phs_t*)(void*)SvPVX(*phs_svp);
 		fbh->special = phs;
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
 				"		lob refetch %d for '%s' param: ftype %d setup\n",
 		(int)i+1,fbh->name, fbh->dbtype);
 		fbh->fb_ary = fb_ary_alloc(fbh->disize, 1);
-		OCIDefineByPos_log_stat(lr->stmthp, &defnp, errhp, (ub4)i+1,
+		OCIDefineByPos_log_stat(imp_sth, lr->stmthp, &defnp, errhp, (ub4)i+1,
 			&fbh->desc_h, -1, (ub2)fbh->ftype,
 		fbh->fb_ary->aindp, 0, fbh->fb_ary->arcode, OCI_DEFAULT, status);
 		if (status != OCI_SUCCESS) {
-			OCIDescriptorFree(lr->rowid, OCI_DTYPE_ROWID);
+			OCIDescriptorFree_log(imp_sth, lr->rowid, OCI_DTYPE_ROWID);
 			OCIHandleFree(lr->stmthp, OCI_HTYPE_STMT);
 			Safefree(lr);
 			fb_ary_free(fbh->fb_ary);
@@ -4615,7 +4706,7 @@
 		}
 	}
 
-	OCIHandleFree_log_stat(imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
+	OCIHandleFree_log_stat(imp_sth, imp_sth->dschp, OCI_HTYPE_DESCRIBE, status);
 
 	imp_sth->lob_refetch = lr;	/* structure copy */
 	return 1;
@@ -4652,7 +4743,7 @@
 
 
 				if (phs->desc_h && !phs->is_inout){
-						OCILobFreeTemporary_log_stat(imp_sth->svchp, imp_sth->errhp, phs->desc_h, status);
+                    OCILobFreeTemporary_log_stat(imp_sth, imp_sth->svchp, imp_sth->errhp, phs->desc_h, status);
 
 
 				/*	boolean lobEmpty=1;*/
@@ -4682,7 +4773,7 @@
 	if (status != OCI_SUCCESS)
 		return oci_error(sth, errhp, status, "OCIAttrGet OCI_ATTR_ROWID /LOB refetch");
 
-	OCIStmtExecute_log_stat(imp_sth->svchp, lr->stmthp, errhp,1, 0, NULL, NULL, OCI_DEFAULT, status);	/* execute and fetch */
+	OCIStmtExecute_log_stat(imp_sth, imp_sth->svchp, lr->stmthp, errhp,1, 0, NULL, NULL, OCI_DEFAULT, status);	/* execute and fetch */
 
 	if (status != OCI_SUCCESS)
 		return oci_error(sth, errhp, status,
@@ -4706,12 +4797,22 @@
 			if( ! fbh->csid ) {
 				ub1 csform = SQLCS_IMPLICIT;
 				ub2 csid = 0;
-				OCILobCharSetForm_log_stat( imp_sth->envhp, errhp, (OCILobLocator*)fbh->desc_h, &csform, status );
+				OCILobCharSetForm_log_stat(imp_sth,
+                                           imp_sth->envhp,
+                                           errhp,
+                                           (OCILobLocator*)fbh->desc_h,
+                                           &csform,
+                                           status );
 				if (status != OCI_SUCCESS)
 					return oci_error(sth, errhp, status, "OCILobCharSetForm");
 #ifdef OCI_ATTR_CHARSET_ID
 		/* Effectively only used so AL32UTF8 works properly */
-				OCILobCharSetId_log_stat( imp_sth->envhp, errhp, (OCILobLocator*)fbh->desc_h, &csid, status );
+				OCILobCharSetId_log_stat(imp_sth,
+                                         imp_sth->envhp,
+                                         errhp,
+                                         (OCILobLocator*)fbh->desc_h,
+                                         &csid,
+                                         status );
 				if (status != OCI_SUCCESS)
 					return oci_error(sth, errhp, status, "OCILobCharSetId");
 #endif /* OCI_ATTR_CHARSET_ID */
@@ -4721,13 +4822,13 @@
 				fbh->csform = csform;
 			}
 
-			if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+			if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 				PerlIO_printf(
                     DBIc_LOGPIO(imp_sth),
                     "	  calling OCILobWrite fbh->csid=%d fbh->csform=%d amtp=%d\n",
 					fbh->csid, fbh->csform, amtp );
 
-			OCILobWrite_log_stat(imp_sth->svchp, errhp,
+			OCILobWrite_log_stat(imp_sth, imp_sth->svchp, errhp,
 				(OCILobLocator*)fbh->desc_h, &amtp, 1, SvPVX(phs->sv), amtp, OCI_ONE_PIECE,
 				0,0, fbh->csid ,fbh->csform, status);
 
@@ -4736,7 +4837,7 @@
 			}
 
 		} else {			/* amtp==0 so truncate LOB to zero length */
-			OCILobTrim_log_stat(imp_sth->svchp, errhp, (OCILobLocator*)fbh->desc_h, 0, status);
+			OCILobTrim_log_stat(imp_sth, imp_sth->svchp, errhp, (OCILobLocator*)fbh->desc_h, 0, status);
 
 			if (status != OCI_SUCCESS) {
 				return oci_error(sth, errhp, status, "OCILobTrim in post_execute_lobs");
@@ -4744,7 +4845,7 @@
 
 		}
 
-		if (DBIS->debug >= 3 || dbd_verbose >= 3 )
+		if (DBIc_DBISTATE(imp_sth)->debug >= 3 || dbd_verbose >= 3 )
 			PerlIO_printf(
                 DBIc_LOGPIO(imp_sth),
 			"		lob refetch %d for '%s' param: ftype %d, len %ld: %s %s\n",
@@ -4770,8 +4871,8 @@
 	int i;
 	sword status;
 	if (lr->rowid)
-		OCIDescriptorFree(lr->rowid, OCI_DTYPE_ROWID);
-	OCIHandleFree_log_stat(lr->stmthp, OCI_HTYPE_STMT, status);
+		OCIDescriptorFree_log(imp_sth, lr->rowid, OCI_DTYPE_ROWID);
+	OCIHandleFree_log_stat(imp_sth, lr->stmthp, OCI_HTYPE_STMT, status);
 
 	if (status != OCI_SUCCESS)
 		oci_error(sth, imp_sth->errhp, status, "ora_free_lob_refetch/OCIHandleFree");
@@ -4800,7 +4901,7 @@
 
 	/* XXX should possibly create new session before ending the old so	*/
 	/* that if the new one can't be created, the old will still work.	*/
-	OCIServerRelease_log_stat(imp_dbh->svchp, imp_dbh->errhp, buf, 2,OCI_HTYPE_SVCCTX, &vernum , status);
+	OCIServerRelease_log_stat(imp_dbh, imp_dbh->svchp, imp_dbh->errhp, buf, 2,OCI_HTYPE_SVCCTX, &vernum , status);
 	if (status != OCI_SUCCESS) {
 		oci_error(dbh, imp_dbh->errhp, status, "OCISessionServerRelease");
 		return 0;

Modified: dbd-oracle/trunk/ocitrace.h
==============================================================================
--- dbd-oracle/trunk/ocitrace.h	(original)
+++ dbd-oracle/trunk/ocitrace.h	Thu Mar 15 10:08:24 2012
@@ -6,8 +6,8 @@
 	Macros named "_log_stat" return status in last parameter.
 */
 
-#define DBD_OCI_TRACEON	(DBIS->debug >= 6 || dbd_verbose>=6)
-#define DBD_OCI_TRACEFP	(DBILOGFP)
+#define DBD_OCI_TRACEON(h) (DBIc_DBISTATE(h)->debug >= 6 || dbd_verbose >= 6)
+#define DBD_OCI_TRACEFP(h) (DBIc_LOGPIO(h))
 #define OciTp		("\tOCI")		/* OCI Trace Prefix */
 #define OciTstr(s)	((s) ? (text*)(s) : (text*)"<NULL>")
 #define ul_t(v)		((unsigned long)(v))
@@ -36,121 +36,121 @@
 	If done well the log will read like a compilable program.
 */
 
-#define OCIServerRelease_log_stat(sc,errhp,b,bl,ht,ver,stat)\
+#define OCIServerRelease_log_stat(impdbh,sc,errhp,b,bl,ht,ver,stat) \
 	stat =OCIServerRelease(sc,errhp,b,bl,ht,ver);\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                   \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),         \
 				 "%sOCIServerRelease(%p)=%s\n",\
 				 OciTp, sc,oci_status_name(stat)),stat \
 	: stat
 
-#define OCISessionRelease_log_stat(svchp, errhp,stat)\
+#define OCISessionRelease_log_stat(impdbh,svchp, errhp,stat)            \
 	stat =OCISessionRelease(svchp, errhp, NULL, (ub4)0, OCI_DEFAULT);\
-	(DBD_OCI_TRACEON) \
-					? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                                       \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                             \
 						 "%sOCISessionRelease(svchp=%p)=%s\n",\
 						 OciTp, svchp,oci_status_name(stat)),stat \
 	: stat
 
-#define OCISessionPoolDestroy_log_stat(ph, errhp,stat )\
+#define OCISessionPoolDestroy_log_stat(impdbh, ph, errhp,stat )  \
 	stat =OCISessionPoolDestroy(ph, errhp,OCI_DEFAULT);\
-	(DBD_OCI_TRACEON) \
-				? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                         \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),               \
 					 "%sOCISessionPoolDestroy(ph=%p)=%s\n",\
 					 OciTp, ph,oci_status_name(stat)),stat \
 	: stat
-#define OCISessionGet_log_stat(envhp, errhp, sh, ah,pn,pnl,stat)\
+#define OCISessionGet_log_stat(impdbh,envhp, errhp, sh, ah,pn,pnl,stat) \
 	stat =OCISessionGet(envhp, errhp, sh, ah,pn,pnl,NULL,0, NULL, NULL, NULL, OCI_SESSGET_SPOOL);\
-	(DBD_OCI_TRACEON) \
-				? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                           \
 					 "%sOCISessionGet(envhp=%p,sh=%p,ah=%p,pn=%p,pnl=%d)=%s\n",\
 					 OciTp, envhp,sh,ah,pn,pnl,oci_status_name(stat)),stat \
 	: stat
 
-#define OCISessionPoolCreate_log_stat(envhp,errhp,ph,pn,pnl,dbn,dbl,sn,sm,si,un,unl,pw,pwl,stat)\
+#define OCISessionPoolCreate_log_stat(impdbh,envhp,errhp,ph,pn,pnl,dbn,dbl,sn,sm,si,un,unl,pw,pwl,stat) \
     stat =OCISessionPoolCreate(envhp,errhp,ph,pn,pnl,dbn,dbl,sn,sm,si,un,unl,pw,pwl,OCI_DEFAULT);\
-    (DBD_OCI_TRACEON) \
-				? PerlIO_printf(DBD_OCI_TRACEFP,\
+    (DBD_OCI_TRACEON(impdbh))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                           \
 					 "%sOCISessionPoolCreate(envhp=%p,ph=%p,pn=%p,pnl=%p,min=%d,max=%d,incr=%d, un=%s,unl=%d,pw=%s,pwl=%d)=%s\n",\
 					 OciTp, envhp,ph,pn,pnl,sn,sm,si,un,unl,pw,pwl,oci_status_name(stat)),stat \
 	: stat
 
 #if defined(ORA_OCI_102)
-#define OCIPing_log_stat(sc,errhp,stat)\
+#define OCIPing_log_stat(impdbh,sc,errhp,stat)  \
 	stat =OCIPing(sc,errhp,OCI_DEFAULT);\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                  \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),   \
 				 "%sOCIPing(%p)=%s\n",\
 				 OciTp, sc,oci_status_name(stat)),stat \
 	: stat
 #endif
 
-#define OCIServerVersion_log_stat(sc,errhp,b,bl,ht,stat)\
+#define OCIServerVersion_log_stat(impdbh,sc,errhp,b,bl,ht,stat) \
 	stat =OCIServerVersion(sc,errhp,b,bl,ht);\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))               \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),               \
 				 "%sOCIServerVersion_log_stat(%p,%s)=%s\n",\
 				 OciTp, sc,b,oci_status_name(stat)),stat \
 	: stat
 
-#define OCIStmtGetPieceInfo_log_stat(stmhp,errhp,hdlptr,hdltyp,in_out,iter,idx,piece,stat)\
+#define OCIStmtGetPieceInfo_log_stat(impsth,stmhp,errhp,hdlptr,hdltyp,in_out,iter,idx,piece,stat) \
 	stat =OCIStmtGetPieceInfo(stmhp,errhp,hdlptr,hdltyp,in_out,iter,idx,piece);\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impsth),                           \
 				"%sOCIStmtGetPieceInfo_log_stat(%p,%p,%u)=%s\n",\
 				OciTp, (void*)errhp,fbh,*piece,oci_status_name(stat)),stat \
 	: stat
 
 
-#define OCIStmtSetPieceInfo_log_stat(ptr,errhp,buf,blen,p,indp,rc,stat)\
+#define OCIStmtSetPieceInfo_log_stat(impsth,ptr,errhp,buf,blen,p,indp,rc,stat) \
 	stat =OCIStmtSetPieceInfo(ptr,OCI_HTYPE_DEFINE,errhp, buf, blen, p,indp,rc);\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impsth),                           \
 				 "%sOCIStmtSetPieceInfo_log_stat(%p,%p,%d,%p)=%s\n",\
 				 OciTp, (void*)errhp,fbh,piece,blen,oci_status_name(stat)),stat \
 	: stat
 
 
-#define OCIDefineDynamic_log_stat(defnp,errhp,fbh,stat)\
+#define OCIDefineDynamic_log_stat(impsth,defnp,errhp,fbh,stat)          \
 	stat =OCIDefineDynamic(defnp,errhp,fbh,(OCICallbackDefine) presist_lob_fetch_cbk );\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impsth),                           \
 				 "%sOCIDefineDynamic_log_stat(%p,%p,%p)=%s\n",\
 				 OciTp, (void*)defnp, (void*)errhp,fbh,oci_status_name(stat)),stat \
 	: stat
 
-#define OCIXMLTypeCreateFromSrc_log_stat(svchp,envhp,src_type,src_ptr,xml,stat)\
-	stat =OCIXMLTypeCreateFromSrc (svchp,envhp,(OCIDuration)OCI_DURATION_CALLOUT,(ub1)src_type,(dvoid *)src_ptr,(sb4)OCI_IND_NOTNULL, xml);\
-	(DBD_OCI_TRACEON)	\
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
-				 "%sOCIXMLTypeCreateFromSrc_log_stat(%p,%p,%p,%p,%p)=%s\n",\
-				 OciTp,	(void*)svchp,(void*)envhp, src_type, src_ptr,oci_status_name(stat)),stat \
+#define OCIXMLTypeCreateFromSrc_log_stat(impdbh,svchp,errhp,duration,src_type,src_ptr,ind,xml,stat) \
+	stat =OCIXMLTypeCreateFromSrc (svchp,errhp,duration,(ub1)src_type,(dvoid *)src_ptr,(sb4)ind, xml);\
+	(DBD_OCI_TRACEON(impdbh))                                          \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                           \
+				 "%sOCIXMLTypeCreateFromSrc_log_stat(%p,%p,%d,%d,%p,%d,%p)=%s\n",\
+                    OciTp,	(void*)svchp,(void*)errhp, duration, src_type, src_ptr, ind, xml, oci_status_name(stat)),stat \
 	: stat
 
-#define OCILobFileIsOpen_log_stat(envhp,errhp,loc,is_open,stat)           \
+#define OCILobFileIsOpen_log_stat(impdbh,envhp,errhp,loc,is_open,stat)  \
     stat = OCILobFileIsOpen(envhp,errhp,loc,is_open);\
-    (DBD_OCI_TRACEON) \
-            ? PerlIO_printf(DBD_OCI_TRACEFP, \
+    (DBD_OCI_TRACEON(impdbh))                       \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                           \
                  "%sOCILobFileIsOpen_log_stat(%p,%p,%p,%p,%d)=%s\n",\
                             OciTp, (void*)envhp, (void*)errhp, loc, is_open, *is_open,oci_status_name(stat)),stat : stat
 
-#define OCILobLocatorIsInit_log_stat(envhp,errhp,loc,is_initp,stat)\
+#define OCILobLocatorIsInit_log_stat(impdbh,envhp,errhp,loc,is_initp,stat) \
 	stat =OCILobLocatorIsInit (envhp,errhp,loc,is_initp );\
-	(DBD_OCI_TRACEON) \
-			? PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                            \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                           \
 				 "%sOCILobLocatorIsInit_log_stat(%p,%p,%p,%d)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,loc,*is_initp,oci_status_name(stat)),stat \
 	: stat
 
-#define OCIObjectPin_log_stat(envhp,errhp,or,ot,stat)\
+#define OCIObjectPin_log_stat(impsth,envhp,errhp,or,ot,stat)            \
 	stat = OCIObjectPin(envhp,errhp,or,(OCIComplexObject *)0,OCI_PIN_LATEST,OCI_DURATION_TRANS,OCI_LOCK_NONE,ot);\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
 				 "%sObjectPin_log_stat(%p,%p,%p,%p)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,or,ot,oci_status_name(stat)),stat \
 	: stat
 
-
+/*
 #define OCICollGetElem_log_stat(envhp,errhp,v,i,ex,e,ne,stat)\
 	stat = OCICollGetElem(envhp,errhp, v,i,ex,e,ne);\
 	(DBD_OCI_TRACEON) \
@@ -158,8 +158,8 @@
 				 "%sOCICollGetElem_log_stat(%p,%p,%d,%d,%d,%d,%d)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,v,i,ex,e,ne,oci_status_name(stat)),stat \
 	: stat
-
-
+*/
+/*
 #define OCITableFirst_log_stat(envhp,errhp,v,i,stat)\
 	stat = OCITableFirst(envhp,errhp,v,i);\
 	(DBD_OCI_TRACEON) \
@@ -167,60 +167,60 @@
 				 "%sOCITableFirst_log_stat(%p,%p,%d,%d)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,v,i,oci_status_name(stat)),stat \
 	: stat
-
-#define OCIObjectGetAttr_log_stat(envhp,errhp,v,no,ot,tn,tnl,ani,ans,av,atdo, stat)\
-	stat = OCIObjectGetAttr(errhp,errhp,v,no,ot,tn,tnl,1,(ub4 *)0, 0,ani,ans,av,atdo,stat);\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
-				 "%sOCIObjectGetAttr_log_stat(%p,%p,%d,%d,%d,%d,%d,%d,%d,%d,%d)=%s\n",\
-				 OciTp, (void*)envhp,(void*)errhp,v,no,ot,tn,tnl,ani,ans,av,atdo,(void*)errhp,oci_status_name(stat)),stat \
+*/
+#define OCIObjectGetAttr_log_stat(impsth,envhp,errhp,instance,nullstruct,tdo,names,lengths,namecount,indexes,indexcount,attrnullstatus,attrnullstruct,attrvalue, attrtdo, stat) \
+	stat = OCIObjectGetAttr(envhp,errhp,instance,nullstruct,tdo,names,lengths,namecount,indexes,indexcount,attrnullstatus,attrnullstruct,attrvalue,attrtdo); \
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
+				 "%sOCIObjectGetAttr_log_stat(%p,%p,%p,%p,%p,%p,%p,%d,%p,%d,%p,%p,%p,%p)=%s\n",\
+				 OciTp, (void*)envhp,(void*)errhp,instance,nullstruct,tdo,names,lengths,namecount,indexes,indexcount,attrnullstatus,attrnullstruct,attrvalue,attrtdo,oci_status_name(stat)),stat \
 	: stat
 
 
 
-#define OCIIntervalToText_log_stat(envhp,errhp,di,sb,ln,sl,stat)\
+#define OCIIntervalToText_log_stat(impsth,envhp,errhp,di,sb,ln,sl,stat) \
 	stat = OCIIntervalToText(envhp,errhp, *(OCIInterval**)di,3,3,sb,ln,sl);\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
 				"%sOCIIntervalToText(%p,%p,%p,%s)=%s\n",\
 				OciTp, (void*)errhp, di,sl,sb,oci_status_name(stat)),stat \
 	: stat
 
-#define OCIDateTimeToText_log_stat(envhp,errhp,d,sl,sb,stat)\
+#define OCIDateTimeToText_log_stat(impsth,envhp,errhp,d,sl,sb,stat)     \
 	stat = OCIDateTimeToText(envhp,errhp, *(OCIDateTime**)d,(CONST text*) 0,(ub1) 0,6, (CONST text*) 0, (ub4) 0,(ub4 *)sl,sb );\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
 				 "%sOCIDateTimeToText(%p,%p,%p,%s)=%s\n",\
 				 OciTp, (void*)errhp, d,sl,sb,oci_status_name(stat)),stat \
 	: stat
 
 
-#define OCIDateToText_log_stat(errhp,d,sl,sb,stat)\
+#define OCIDateToText_log_stat(impsth,errhp,d,sl,sb,stat)               \
 	stat = OCIDateToText(errhp, (CONST OCIDate *) d,(CONST text*) 0,(ub1) 0, (CONST text*) 0, (ub4) 0,(ub4 *)sl,sb );\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
 				 "%sDateToText_log_stat(%p,%p,%p,%s)=%s\n",\
 				 OciTp, (void*)errhp, d,sl,sb,oci_status_name(stat)),stat \
 	: stat
 
 
-#define OCIIterDelete_log_stat(envhp,errhp,itr,stat)\
+#define OCIIterDelete_log_stat(impsth,envhp,errhp,itr,stat) \
 	stat = OCIIterDelete(envhp,errhp,itr );\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                  \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),             \
 				 "%sOCIIterDelete_log_stat(%p,%p,%p)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,itr,oci_status_name(stat)),stat \
 	: stat
 
 
-#define OCIIterCreate_log_stat(envhp,errhp,coll,itr,stat)\
+#define OCIIterCreate_log_stat(impsth,envhp,errhp,coll,itr,stat)    \
 	stat = OCIIterCreate(envhp,errhp,coll,itr);\
-	(DBD_OCI_TRACEON) \
-			?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                 \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),             \
 				 "%sIterCreate_log_stat(%p,%p,%p)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,(void*)coll,oci_status_name(stat)),stat \
 	: stat
-
+/*
 #define OCICollSize_log_stat(envhp,errhp,coll,coll_siz,stat)\
 	stat = OCICollSize(envhp,errhp,(CONST OCIColl *)coll,coll_siz);\
 	(DBD_OCI_TRACEON) \
@@ -228,105 +228,105 @@
 				 "%sOCICollSize_log_stat(%p,%p,%d)=%s\n",\
 				 OciTp, (void*)envhp, (void*)errhp,oci_status_name(stat)),stat \
 	: stat
-
-#define OCIDefineObject_log_stat(defnp,errhp,tdo,eo_buff,eo_ind,stat)\
+*/
+#define OCIDefineObject_log_stat(impsth,defnp,errhp,tdo,eo_buff,eo_ind,stat) \
 	stat = OCIDefineObject(defnp,errhp,tdo,eo_buff,0,eo_ind, 0);\
-	(DBD_OCI_TRACEON) \
-		?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                  \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                 \
 				 "%sOCIDefineObject(%p,%p,%p)=%s\n",\
 			 OciTp, (void*)defnp, (void*)errhp, (void*)tdo,oci_status_name(stat)),stat \
 	: stat
 
-#define OCITypeByName_log_stat(envhp,errhp,svchp,p1,l,tdo,stat)\
-	stat = OCITypeByName(envhp,errhp,svchp,(const oratext*)"",0,p1,l,0,0,OCI_DURATION_TRANS,OCI_TYPEGET_ALL,tdo);\
-	(DBD_OCI_TRACEON) \
-		?	PerlIO_printf(DBD_OCI_TRACEFP,\
-			 "%sTypeByName(%p,%p,%p,%s,%d)=%s\n",\
-			 OciTp, (void*)envhp, (void*)errhp, (void*)svchp, (char*)(p1),(l),oci_status_name(stat)),stat \
-	: stat
+#define OCITypeByName_log(impsth,envhp,errhp,svchp,sn,snl,tn,tnl,vn,vnl,duration,option,tdo,stat) \
+	stat = OCITypeByName(envhp,errhp,svchp,sn,snl,tn,tnl,vn,vnl,duration,option,tdo); \
+	(DBD_OCI_TRACEON(impsth)) \
+    ? PerlIO_printf(DBD_OCI_TRACEFP(impsth),                      \
+                    "%sTypeByName(%p,%p,%p,%s,%d,%s,%d,\"\",0,%d,%d,%p)=%s\n", \
+                    OciTp, (void*)envhp, (void*)errhp, (void*)svchp, sn,snl,tn,tnl,duration,option,tdo,oci_status_name(stat)), stat \
+        :stat
 
-#define OCITypeByRef_log_stat(envhp,errhp,ref,tdo,stat)\
+#define OCITypeByRef_log_stat(impsth,envhp,errhp,ref,tdo,stat)          \
 	stat = OCITypeByRef(envhp,errhp,ref,OCI_DURATION_TRANS,OCI_TYPEGET_ALL,tdo);\
-	(DBD_OCI_TRACEON) \
-		?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impsth))                                          \
+    ?	PerlIO_printf(DBD_OCI_TRACEFP(impsth),                         \
 			 "%sTypeByRef(%p,%p,%p)=%s\n",\
 			 OciTp, (void*)envhp, (void*)errhp, (void*)ref,oci_status_name(stat)),stat \
 	: stat
 
 /* added by lab */
-#define OCILobCharSetId_log_stat( envhp, errhp, locp, csidp, stat ) \
+#define OCILobCharSetId_log_stat(impxxh, envhp, errhp, locp, csidp, stat ) \
 	stat = OCILobCharSetId( envhp, errhp, locp, csidp ); \
-	(DBD_OCI_TRACEON) \
-	?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impxxh))                           \
+	?	PerlIO_printf(DBD_OCI_TRACEFP(impxxh),          \
 		 "%sLobCharSetId(%p,%p,%p,%d)=%s\n",\
 		 OciTp, (void*)envhp, (void*)errhp, (void*)locp, *csidp, oci_status_name(stat)),stat \
 	: stat
 
 /* added by lab */
-#define OCILobCharSetForm_log_stat( envhp, errhp, locp, formp, stat ) \
+#define OCILobCharSetForm_log_stat(impxxh, envhp, errhp, locp, formp, stat ) \
 	stat = OCILobCharSetForm( envhp, errhp, locp, formp ); \
-	(DBD_OCI_TRACEON) \
-	?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impxxh))                             \
+	?	PerlIO_printf(DBD_OCI_TRACEFP(impxxh),            \
 		 "%sLobCharSetForm(%p,%p,%p,%d)=%s\n",\
 		 OciTp, (void*)envhp, (void*)errhp, (void*)locp, *formp, oci_status_name(stat)),stat \
 	: stat
 
 /* added by lab */
-#define OCINlsEnvironmentVariableGet_log_stat( valp, size, item, charset, rsizep ,stat ) \
+#define OCINlsEnvironmentVariableGet_log_stat(impdbh, valp, size, item, charset, rsizep ,stat ) \
 	stat = OCINlsEnvironmentVariableGet(	valp, size, item, charset, rsizep ); \
-	(DBD_OCI_TRACEON) \
-	?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                                          \
+	?	PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                         \
 		 "%sNlsEnvironmentVariableGet(%d,%lu,%d,%d,%lu)=%s\n",\
 		 OciTp, *valp, (unsigned long)size, item, charset, (unsigned long)*rsizep, oci_status_name(stat)),stat \
 	: stat
 
 /* added by lab */
-#define OCIEnvNlsCreate_log_stat( envp, mode, ctxp, f1, f2, f3, sz, usremepp ,chset, nchset ,stat ) \
+#define OCIEnvNlsCreate_log_stat(impdbh, envp, mode, ctxp, f1, f2, f3, sz, usremepp ,chset, nchset ,stat ) \
 	stat = OCIEnvNlsCreate(envp, mode, ctxp, f1, f2, f3, sz, usremepp ,chset, nchset ); \
-	(DBD_OCI_TRACEON) \
-	?	PerlIO_printf(DBD_OCI_TRACEFP,\
+	(DBD_OCI_TRACEON(impdbh))                                          \
+	?	PerlIO_printf(DBD_OCI_TRACEFP(impdbh),                         \
 		 "%sEnvNlsEnvCreate(%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
 
 
-#define OCIAttrGet_log_stat(th,ht,ah,sp,at,eh,stat)					\
+#define OCIAttrGet_log_stat(impxxh, th,ht,ah,sp,at,eh,stat)  \
 	stat = OCIAttrGet(th,ht,ah,sp,at,eh);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sAttrGet(%p,%s,%p,%p,%s,%p)=%s\n",			\
 		OciTp, (void*)th,oci_hdtype_name(ht),(void*)ah,pul_t(sp),oci_attr_name(at),(void*)eh,\
 		oci_status_name(stat)),stat : stat
 
-#define OCIAttrGet_d_log_stat(th,ht,ah,sp,at,eh,stat)					\
+#define OCIAttrGet_d_log_stat(impsth, th,ht,ah,sp,at,eh,stat)    \
 	stat = OCIAttrGet(th,ht,ah,sp,at,eh);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sAttrGet(%p,%s,%p,%p,%s,%p)=%s\n",			\
 		OciTp, (void*)th,oci_hdtype_name(ht),(void*)ah,pul_t(sp),oci_dtype_attr_name(at),(void*)eh,\
 		oci_status_name(stat)),stat : stat
 
  #define OCIAttrGet_parmap(imp_sth,dh, ht, p1, l, stat)				\
-				OCIAttrGet_log_stat(dh, ht,			\
+        OCIAttrGet_log_stat(imp_sth, dh, ht,                                \
 		(void*)(p1), (l), OCI_ATTR_PARAM, imp_sth->errhp, stat)
 
 
 #define OCIAttrGet_parmdp(imp_sth, parmdp, p1, l, a, stat)				\
-	OCIAttrGet_d_log_stat(parmdp, OCI_DTYPE_PARAM,			\
+	OCIAttrGet_d_log_stat(imp_sth, parmdp, OCI_DTYPE_PARAM,              \
 		(void*)(p1), (l), (a), imp_sth->errhp, stat)
 
 #define OCIAttrGet_stmhp_stat(imp_sth, p1, l, a, stat)					\
-	OCIAttrGet_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT,		\
+	OCIAttrGet_log_stat(imp_sth, imp_sth->stmhp, OCI_HTYPE_STMT,         \
 		(void*)(p1), (l), (a), imp_sth->errhp, stat)
 
-#define OCIAttrSet_log_stat(th,ht,ah,s1,a,eh,stat)						\
+#define OCIAttrSet_log_stat(impxxh,th,ht,ah,s1,a,eh,stat)   \
 	stat=OCIAttrSet(th,ht,ah,s1,a,eh);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sAttrSet(%p,%s, %p,%lu,Attr=%s,%p)=%s\n",			\
 		OciTp, (void*)th,oci_hdtype_name(ht),(void *)ah,ul_t(s1),oci_attr_name(a),(void*)eh,	\
 		oci_status_name(stat)),stat : stat
 
-#define OCIBindByName_log_stat(sh,bp,eh,p1,pl,v,vs,dt,in,al,rc,mx,cu,md,stat)	\
+#define OCIBindByName_log_stat(impsth,sh,bp,eh,p1,pl,v,vs,dt,in,al,rc,mx,cu,md,stat) \
 	stat=OCIBindByName(sh,bp,eh,p1,pl,v,vs,dt,in,al,rc,mx,cu,md);	\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%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=%s,%lu)=%s\n",\
  		OciTp, (void*)sh,(void*)bp,(void*)eh,p1,sl_t(pl),(void*)(v),	\
@@ -334,182 +334,182 @@
 		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)	\
+#define	OCIBindArrayOfStruct_log_stat(impsth,bp,ep,sd,si,sl,sr,stat)	\
 	stat=OCIBindArrayOfStruct(bp,ep,sd,si,sl,sr);		\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,	\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sOCIBindArrayOfStruct(%p,%p,%u,%u,%u,%u)=%s\n",	\
 		OciTp,(void*)bp,(void*)ep,sd,si,sl,sr,		\
 		oci_status_name(stat)),stat : stat
 
-#define OCIBindDynamic_log(bh,eh,icx,cbi,ocx,cbo,stat)				 \
+#define OCIBindDynamic_log(impsth,bh,eh,icx,cbi,ocx,cbo,stat)   \
 	stat=OCIBindDynamic(bh,eh,icx,cbi,ocx,cbo);			\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sBindDynamic(%p,%p,%p,%p,%p,%p)=%s\n",			\
 		OciTp, (void*)bh,(void*)eh,(void*)icx,(void*)cbi,		\
 		(void*)ocx,(void*)cbo,					\
 		oci_status_name(stat)),stat : stat
 
-#define OCIDefineByPos_log_stat(sh,dp,eh,p1,vp,vs,dt,ip,rp,cp,m,stat)	\
+#define OCIDefineByPos_log_stat(impsth,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,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%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),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)		 \
+#define OCIDescribeAny_log_stat(impsth,sh,eh,op,ol,opt,il,ot,dh,stat)   \
 	stat=OCIDescribeAny(sh,eh,op,ol,opt,il,ot,dh);			\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sDescribeAny(%p,%p,%p,%lu,%u,%u,%u,%p)=%s\n",	 		\
 		OciTp, (void*)sh,(void*)eh,(void*)op,ul_t(ol),		\
 		(ub1)opt,(ub1)il,(ub1)ot,(void*)dh,				\
 		oci_status_name(stat)),stat : stat
 
-#define OCIDescriptorAlloc_ok(envhp, p1, t)							 \
-	if (DBD_OCI_TRACEON) PerlIO_printf(DBD_OCI_TRACEFP,			\
+#define OCIDescriptorAlloc_ok(impxxh,envhp, p1, t)              \
+	if (DBD_OCI_TRACEON(impxxh)) PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sDescriptorAlloc(%p,%p,%s,0,0)\n",					\
 		OciTp,(void*)envhp,(void*)(p1),oci_hdtype_name(t));			\
 	if (OCIDescriptorAlloc((envhp), (void**)(p1), (t), 0, 0)==OCI_SUCCESS);	\
 	else croak("OCIDescriptorAlloc (type %d) failed",t)
 
-#define OCIDescriptorFree_log(d,t)									 \
-	if (DBD_OCI_TRACEON) PerlIO_printf(DBD_OCI_TRACEFP,			\
+#define OCIDescriptorFree_log(impxxh,d,t)                       \
+	if (DBD_OCI_TRACEON(impxxh)) PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sDescriptorFree(%p,%s)\n", OciTp, (void*)d,oci_hdtype_name(t));	\
 	OCIDescriptorFree(d,t)
 
-#define OCIEnvInit_log_stat(ev,md,xm,um,stat)							\
+#define OCIEnvInit_log_stat(impdbh,ev,md,xm,um,stat)    \
 	stat=OCIEnvInit(ev,md,xm,um);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sEnvInit(%p,%lu,%lu,%p)=%s\n",				\
 		OciTp, (void*)ev,ul_t(md),ul_t(xm),(void*)um,			\
 		oci_status_name(stat)),stat : stat
 
-#define OCIErrorGet_log_stat(hp,rn,ss,ep,bp,bs,t, stat)			\
+#define OCIErrorGet_log_stat(impxxh, hp,rn,ss,ep,bp,bs,t, stat)  \
 	((stat = OCIErrorGet(hp,rn,ss,ep,bp,bs,t)),			\
-	((DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+     ((DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sErrorGet(%p,%lu,\"%s\",%p,\"%s\",%lu,%lu)=%s\n",		\
 		OciTp, (void*)hp,ul_t(rn),OciTstr(ss),psl_t(ep),		\
 		bp,ul_t(bs),ul_t(t), oci_status_name(stat)),stat : stat))
 
-#define OCIHandleAlloc_log_stat(ph,hp,t,xs,ump,stat)					\
+#define OCIHandleAlloc_log_stat(impxxh,ph,hp,t,xs,ump,stat) \
 	stat=OCIHandleAlloc(ph,hp,t,xs,ump);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sHandleAlloc(%p,%p,%s,%lu,%p)=%s\n",			\
 		OciTp, (void*)ph,(void*)hp,oci_hdtype_name(t),ul_t(xs),(void*)ump,	\
 		oci_status_name(stat)),stat : stat
 
-#define OCIHandleAlloc_ok(envhp, p1, t, stat)							\
-	OCIHandleAlloc_log_stat((envhp),(void**)(p1),(t),0,0, stat);	\
+#define OCIHandleAlloc_ok(impxxh,envhp, p1, t, stat)                \
+	OCIHandleAlloc_log_stat(impxxh,(envhp),(void**)(p1),(t),0,0, stat);	\
 	if (stat==OCI_SUCCESS) ;					\
 	else croak("OCIHandleAlloc(%s) failed",oci_hdtype_name(t))
 
-#define OCIHandleFree_log_stat(hp,t,stat)								\
+#define OCIHandleFree_log_stat(impxxh,hp,t,stat)    \
 	stat=OCIHandleFree(	(hp), (t));				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sHandleFree(%p,%s)=%s\n",OciTp,(void*)hp,oci_hdtype_name(t),		\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobGetLength_log_stat(sh,eh,lh,l,stat)						\
+#define OCILobGetLength_log_stat(impxxh,sh,eh,lh,l,stat)    \
 	stat=OCILobGetLength(sh,eh,lh,l);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobGetLength(%p,%p,%p,%p)=%s\n",				\
 		OciTp, (void*)sh,(void*)eh,(void*)lh,pul_t(l),		\
 		oci_status_name(stat)),stat : stat
 
 
-#define OCILobGetChunkSize_log_stat(sh,eh,lh,cs,stat)						\
+#define OCILobGetChunkSize_log_stat(impdbh,sh,eh,lh,cs,stat)    \
 	stat=OCILobGetChunkSize(sh,eh,lh,cs);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sLobGetChunkSize(%p,%p,%p,%p)=%s\n",				\
 		OciTp, (void*)sh,(void*)eh,(void*)lh,pul_t(cs),		\
 		oci_status_name(stat)),stat : stat
 
 
-#define OCILobFileOpen_log_stat(sv,eh,lh,mode,stat) \
+#define OCILobFileOpen_log_stat(impxxh,sv,eh,lh,mode,stat)  \
 	stat=OCILobFileOpen(sv,eh,lh,mode);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobFileOpen(%p,%p,%p,%u)=%s\n",				\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,(ub1)mode,		\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobFileClose_log_stat(sv,eh,lh,stat) \
+#define OCILobFileClose_log_stat(impsth,sv,eh,lh,stat)  \
 	stat=OCILobFileClose(sv,eh,lh);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sLobFileClose(%p,%p,%p)=%s\n",				\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,				\
 		oci_status_name(stat)),stat : stat
 /*Added by JPS for Jeffrey.Klein*/
 
-#define OCILobCreateTemporary_log_stat(sv,eh,lh,csi,csf,lt,ca,dur,stat) \
+#define OCILobCreateTemporary_log_stat(impdbh,sv,eh,lh,csi,csf,lt,ca,dur,stat) \
 	stat=OCILobCreateTemporary(sv,eh,lh,csi,csf,lt,ca,dur);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sLobCreateTemporary(%p,%p,%p,%lu,%lu,%lu,%lu,%lu)=%s\n",				\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,				\
 			ul_t(csi),ul_t(csf),ul_t(lt),ul_t(ca),ul_t(dur), \
 		oci_status_name(stat)),stat : stat
 /*end add*/
 
-#define OCILobFreeTemporary_log_stat(sv,eh,lh,stat) \
+#define OCILobFreeTemporary_log_stat(impxxh,sv,eh,lh,stat)  \
 	stat=OCILobFreeTemporary(sv,eh,lh);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobFreeTemporary(%p,%p,%p)=%s\n",				\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,				\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobIsTemporary_log_stat(ev,eh,lh,istemp,stat)							\
+#define OCILobIsTemporary_log_stat(impsth,ev,eh,lh,istemp,stat) \
 	stat=OCILobIsTemporary(ev,eh,lh,istemp);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sLobIsTemporary(%p,%p,%p,%p)=%s\n",				\
 		OciTp, (void*)ev,(void*)eh,(void*)lh,(void*)istemp,		\
 		oci_status_name(stat)),stat : stat
 
 /*Added by JPS for Jeffrey.Klein */
 
-#define OCILobLocatorAssign_log_stat(sv,eh,src,dest,stat) \
+#define OCILobLocatorAssign_log_stat(impdbh,sv,eh,src,dest,stat)    \
 		stat=OCILobLocatorAssign(sv,eh,src,dest); \
-		(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP, \
+		(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sLobLocatorAssign(%p,%p,%p,%p)=%s\n", \
 		OciTp,(void*)sv,(void*)eh,(void*)src,(void*)dest, \
 		oci_status_name(stat)),stat : stat
 
 /*end add*/
 
-#define OCILobRead_log_stat(sv,eh,lh,am,of,bp,bl,cx,cb,csi,csf,stat)	\
+#define OCILobRead_log_stat(impxxh,sv,eh,lh,am,of,bp,bl,cx,cb,csi,csf,stat) \
 	stat=OCILobRead(sv,eh,lh,am,of,bp,bl,cx,cb,csi,csf);		\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobRead(%p,%p,%p,%p,%lu,%p,%lu,%p,%p,%u,%u)=%s\n",		\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,pul_t(am),ul_t(of),	\
 		(void*)bp,ul_t(bl),(void*)cx,(void*)cb,(ub2)csi,(ub1)csf,	\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobTrim_log_stat(sv,eh,lh,l,stat)							\
+#define OCILobTrim_log_stat(impxxh,sv,eh,lh,l,stat) \
 	stat=OCILobTrim(sv,eh,lh,l);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobTrim(%p,%p,%p,%lu)=%s\n",				\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,ul_t(l),			\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobWrite_log_stat(sv,eh,lh,am,of,bp,bl,p1,cx,cb,csi,csf,stat) \
+#define OCILobWrite_log_stat(impxxh,sv,eh,lh,am,of,bp,bl,p1,cx,cb,csi,csf,stat) \
 	stat=OCILobWrite(sv,eh,lh,am,of,bp,bl,p1,cx,cb,csi,csf);		\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobWrite(%p,%p,%p,%p,%lu,%p,%lu,%u,%p,%p,%u,%u)=%s\n",	\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,pul_t(am),ul_t(of),	\
 		(void*)bp,ul_t(bl),(ub1)p1,					\
 		(void*)cx,(void*)cb,(ub2)csi,(ub1)csf,			\
 		oci_status_name(stat)),stat : stat
 
-#define OCILobWriteAppend_log_stat(sv,eh,lh,am,bp,bl,p1,cx,cb,csi,csf,stat) \
+#define OCILobWriteAppend_log_stat(impxxh,sv,eh,lh,am,bp,bl,p1,cx,cb,csi,csf,stat) \
 	stat=OCILobWriteAppend(sv,eh,lh,am,bp,bl,p1,cx,cb,csi,csf);		\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sLobWriteAppend(%p,%p,%p,%p,%p,%lu,%u,%p,%p,%u,%u)=%s\n",	\
 		OciTp, (void*)sv,(void*)eh,(void*)lh,pul_t(am),	\
 		(void*)bp,ul_t(bl),(ub1)p1,					\
 		(void*)cx,(void*)cb,(ub2)csi,(ub1)csf,			\
 		oci_status_name(stat)),stat : stat
 
-#define OCIParamGet_log_stat(hp,ht,eh,pp,ps,stat)						\
+#define OCIParamGet_log_stat(impsth,hp,ht,eh,pp,ps,stat)    \
 	stat=OCIParamGet(hp,ht,eh,pp,ps);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sParamGet(%p,%lu,%p,%p,%lu,%s)=%s\n",				\
 		OciTp, (void*)hp,ul_t((ht)),(void*)eh,(void*)pp,ul_t(ps),	\
 		oci_hdtype_name(ht),oci_status_name(stat)),stat : stat
@@ -517,78 +517,78 @@
 #define OCIServerAttach_log_stat(imp_dbh, dbname,md,stat)				 \
 	stat=OCIServerAttach( imp_dbh->srvhp, imp_dbh->errhp,		\
 		(text*)dbname, (sb4)strlen(dbname), md);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(imp_dbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(imp_dbh), \
 		"%sServerAttach(%p, %p, \"%s\", %lu, mode=%s,%lu)=%s\n",			\
 		OciTp, (void*)imp_dbh->srvhp,(void*)imp_dbh->errhp, dbname,	\
 		ul_t(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)			\
+#define OCIStmtExecute_log_stat(impsth,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,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%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),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);		\
-		 (DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,		\
+#define OCIStmtFetch_log_stat(impsth,sh,eh,nr,or,os,stat)       \
+    stat=OCIStmtFetch2(sh,eh,nr,or,os,OCI_DEFAULT);                     \
+    (DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 			"%sStmtFetch(%p,%p,%lu,%u,%d)=%s\n",					\
 			OciTp, (void*)sh,(void*)eh,ul_t(nr),(ub2)or,(ub2)os, \
 			oci_status_name(stat)),stat : stat
 
-#define OCIStmtPrepare_log_stat(sh,eh,s1,sl,l,m,stat)					\
+#define OCIStmtPrepare_log_stat(impsth,sh,eh,s1,sl,l,m,stat)    \
 	stat=OCIStmtPrepare(sh,eh,s1,sl,l,m);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impsth)) ? PerlIO_printf(DBD_OCI_TRACEFP(impsth), \
 		"%sStmtPrepare(%p,%p,'%s',%lu,%lu,%lu)=%s\n",			\
 		OciTp, (void*)sh,(void*)eh,s1,ul_t(sl),ul_t(l),ul_t(m),	\
 		oci_status_name(stat)),stat : stat
 
-#define OCIServerDetach_log_stat(sh,eh,md,stat)						\
+#define OCIServerDetach_log_stat(impdbh,sh,eh,md,stat)  \
 	stat=OCIServerDetach(sh,eh,md);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%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)					\
+#define OCISessionBegin_log_stat(impdbh,sh,eh,uh,cr,md,stat)    \
 	stat=OCISessionBegin(sh,eh,uh,cr,md);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%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)						\
+#define OCISessionEnd_log_stat(impdbh,sh,eh,ah,md,stat) \
 	stat=OCISessionEnd(sh,eh,ah,md);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%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)						 \
+#define OCITransCommit_log_stat(impxxh,sh,eh,md,stat)   \
 	stat=OCITransCommit(sh,eh,md);					\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impxxh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impxxh), \
 		"%sTransCommit(%p,%p,%lu)=%s\n",				\
 		OciTp, (void*)sh,(void*)eh,ul_t(md),				\
 		oci_status_name(stat)),stat : stat
 
-#define OCITransRollback_log_stat(sh,eh,md,stat)						\
+#define OCITransRollback_log_stat(impdbh,sh,eh,md,stat) \
 	stat=OCITransRollback(sh,eh,md);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%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
 
-#define OCIDBStartup_log_stat(svchp,errhp,admhp,mode,flags,stat)		\
+#define OCIDBStartup_log_stat(impdbh,svchp,errhp,admhp,mode,flags,stat) \
 	stat=OCIDBStartup(svchp,errhp,admhp,mode,flags);			\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sOCIDBStartup(%p,%p,%p,%u,%u)=%s\n",				\
 		OciTp, (void*)svchp,(void*)errhp,(void*)admhp,mode,flags,	\
 		oci_status_name(stat)),stat : stat
 
-#define OCIDBShutdown_log_stat(svchp,errhp,admhp,mode,stat)			\
+#define OCIDBShutdown_log_stat(impdbh,svchp,errhp,admhp,mode,stat)  \
 	stat=OCIDBShutdown(svchp,errhp,admhp,mode);				\
-	(DBD_OCI_TRACEON) ? PerlIO_printf(DBD_OCI_TRACEFP,			\
+	(DBD_OCI_TRACEON(impdbh)) ? PerlIO_printf(DBD_OCI_TRACEFP(impdbh), \
 		"%sOCIDBShutdown(%p,%p,%p,%u)=%s\n",				\
 		OciTp, (void*)svchp,(void*)errhp,(void*)admhp,mode,		\
 		oci_status_name(stat)),stat : stat



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About