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

[email protected]
Newsgroups perl.dbd.oracle.changes
Message-ID <[email protected]>
Author: byterock
Date: Thu Jul  2 12:22:51 2009
New Revision: 12994

Modified:
   dbd-oracle/trunk/oci8.c

Log:
fix for ctcpan 46438

Modified: dbd-oracle/trunk/oci8.c
==============================================================================
--- dbd-oracle/trunk/oci8.c	(original)
+++ dbd-oracle/trunk/oci8.c	Thu Jul  2 12:22:51 2009
@@ -424,22 +424,36 @@
 int
 oci_error_err(SV *h, OCIError *errhp, sword status, char *what, sb4 force_err)
 {
+
 	dTHX;
 	D_imp_xxh(h);
 	sb4 errcode;
-	SV *errstr = sv_newmortal();
-	errcode = oci_error_get(errhp, status, what, errstr, DBIS->debug);
+	SV *errstr_sv = sv_newmortal();
+	SV *errcode_sv = sv_newmortal();
+	errcode = oci_error_get(errhp, status, what, errstr_sv, DBIS->debug);
+	if (CSFORM_IMPLIES_UTF8(SQLCS_IMPLICIT)) {
+	#ifdef sv_utf8_decode
+	PerlIO_printf(DBILOGFP, "codition  1\n");
+	sv_utf8_decode(errstr_sv);
+	#else
+	PerlIO_printf(DBILOGFP, "codition  2\n");
+	SvUTF8_on(errstr_sv);
+	#endif
+	}
 
-	/* DBIc_ERR *must* be SvTRUE (for RaiseError etc), some	*/
-	/* errors, like OCI_INVALID_HANDLE, don't set errcode.	*/
+	/* DBIc_ERR *must* be SvTRUE (for RaiseError etc), some */
+	/* errors, like OCI_INVALID_HANDLE, don't set errcode. */
 	if (force_err)
 	errcode = force_err;
 	if (status == OCI_SUCCESS_WITH_INFO)
-	errcode = 0;	/* record as a "warning" for DBI>=1.43 */
+	errcode = 0; /* record as a "warning" for DBI>=1.43 */
 	else if (errcode == 0)
 	errcode = (status != 0) ? status : -10000;
-	DBIh_SET_ERR_CHAR(h, imp_xxh, Nullch, errcode, SvPV_nolen(errstr), Nullch, Nullch);
-	return 0;	/* always returns 0 */
+
+	sv_setiv(errcode_sv, errcode);
+	DBIh_SET_ERR_SV(h, imp_xxh, errcode_sv, errstr_sv, Nullsv, Nullsv);
+	return 0; /* always returns 0 */
+
 }
 
 
@@ -2294,10 +2308,10 @@
 	else if (SvOK(imp_drh->ora_cache)){
 		imp_sth->cache_rows = SvIV(imp_drh->ora_cache);
 	}
-	
-	
+
+
 	if (imp_sth->is_child  || imp_sth->ret_lobs){ /*ref cursors and sp only one row is allowed*/
-	
+
 	       cache_rows  =1;
 		   cache_mem  =0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.