Author: byterock
Date: Thu Sep 18 13:53:42 2008
New Revision: 11822
Modified:
dbd-oracle/branches/utf8_ea/dbdimp.c
dbd-oracle/branches/utf8_ea/dbdimp.h
Log:
latest stuff tried to get rid of the croak
Modified: dbd-oracle/branches/utf8_ea/dbdimp.c
==============================================================================
--- dbd-oracle/branches/utf8_ea/dbdimp.c (original)
+++ dbd-oracle/branches/utf8_ea/dbdimp.c Thu Sep 18 13:53:42 2008
@@ -54,7 +54,7 @@
ub2 utf8_csid = 871;
ub2 al32utf8_csid = 873;
ub2 al16utf16_csid = 2000;
-ub2 we8mawin1252 = 178;
+ub2 we8mswin1252 = 178;
typedef struct sql_fbh_st sql_fbh_t;
struct sql_fbh_st {
@@ -531,18 +531,13 @@
#ifdef NEW_OCI_INIT /* XXX needs merging into use_proc_connection branch */
-
-PerlIO_printf(DBILOGFP," charsetid=%d)\n",charsetid);
-
- /* Get CLIENT char and nchar charset id values*/
+ /* Get CLIENT char and nchar charset id values */
OCINlsEnvironmentVariableGet_log_stat( &charsetid, 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;
}
-PerlIO_printf(DBILOGFP," charsetid=%d)\n",charsetid);
-PerlIO_printf(DBILOGFP," ncharsetid=%d)\n",ncharsetid);
OCINlsEnvironmentVariableGet_log_stat( &ncharsetid, 0,
OCI_NLS_NCHARSET_ID, 0, &rsize ,status );
if (status != OCI_SUCCESS) {
@@ -550,7 +545,6 @@
"OCINlsEnvironmentVariableGet(OCI_NLS_NCHARSET_ID) Check
NLS settings etc.");
return 0;
}
-PerlIO_printf(DBILOGFP," out ncharsetid=%d)\n",ncharsetid);
/*{
After using OCIEnvNlsCreate() to create the environment handle,
@@ -623,13 +617,7 @@
utf8_csid = OCINlsCharSetNameToId(imp_dbh->envhp,
(void*)"UTF8");
al32utf8_csid = OCINlsCharSetNameToId(imp_dbh->envhp,
(void*)"AL32UTF8");
al16utf16_csid = OCINlsCharSetNameToId(imp_dbh->envhp,
(void*)"AL16UTF16");
-
- PerlIO_printf(DBILOGFP," in we8mawin1252=%d)\n",ncharsetid);
-
- we8mawin1252 = OCINlsCharSetNameToId(imp_dbh->envhp,
(void*)"WE8MAWIN1252");
-
- PerlIO_printf(DBILOGFP," out we8mawin1252=%d)\n",ncharsetid);
-
+ we8mswin1252 = OCINlsCharSetNameToId(imp_dbh->envhp,
(void*)"we8mswin1252");
#else /* (the old init code) NEW_OCI_INIT */
/* this is now depricated and will be removed as we no longer support
<9.2 oracle*/
/* XXX recent oracle docs recommend using OCIEnvCreate() instead of
*/
@@ -711,17 +699,14 @@
if (DBIS->debug >= 3 || dbd_verbose >= 3) {
- ub1 is_utf8;
oratext charsetname[OCI_NLS_MAXBUFSZ];
oratext ncharsetname[OCI_NLS_MAXBUFSZ];
- OCIAttrGet_log_stat(imp_dbh->envhp, OCI_HTYPE_ENV, &is_utf8, 0 ,
- OCI_ATTR_ENV_CHARSET_ID,
imp_dbh->errhp, status);
OCINlsCharSetIdToName(imp_dbh->envhp,charsetname,
sizeof(charsetname),charsetid );
OCINlsCharSetIdToName(imp_dbh->envhp,ncharsetname,
sizeof(ncharsetname),ncharsetid );
PerlIO_printf(DBILOGFP," charset id=%d, name=%s, ncharset id=%d,
name=%s"
- " (csid: utf8=%d al32utf8=%d and this=%d)\n",
- charsetid,charsetname, ncharsetid,ncharsetname, utf8_csid,
al32utf8_csid,is_utf8);
+ " (csid: utf8=%d al32utf8=%d)\n",
+ charsetid,charsetname, ncharsetid,ncharsetname, utf8_csid,
al32utf8_csid);
}
@@ -3162,7 +3147,7 @@
else if (CSFORM_IMPLIES_UTF8(SQLCS_NCHAR))
csform = SQLCS_NCHAR; /* else leave csform == 0 */
- if (trace_level || dbd_verbose <= 1)
+ if (trace_level || dbd_verbose >= 1)
PerlIO_printf(DBILOGFP, "do_bind_array_exec() (2):
rebinding %s with UTF8 value %s", phs->name,
(csform == SQLCS_IMPLICIT) ? "so setting
csform=SQLCS_IMPLICIT" :
(csform == SQLCS_NCHAR) ? "so setting
csform=SQLCS_NCHAR" :
@@ -3185,25 +3170,19 @@
/* if app has specified a csid then use that, else use default */
- PerlIO_printf(DBILOGFP, "csid =%d\n",phs->csid);
- PerlIO_printf(DBILOGFP, "csid_orig =%d\n",phs->csid_orig);
csid = (phs->csid) ? phs->csid : phs->csid_orig;
-PerlIO_printf(DBILOGFP, "csid =%d\n",csid);
-PerlIO_printf(DBILOGFP, "we8mawin1252 =%d csid=%d\n",we8mawin1252,csid);
-
- PerlIO_printf(DBILOGFP, "CS_IS_UTF8_COMPATIBLE(csid)
=%d\n",CS_IS_UTF8_COMPATIBLE(csid));
/* if data is utf8 but charset isn't then switch to utf8 csid if
possible */
if ((utf8 & ARRAY_BIND_UTF8) && !CS_IS_UTF8(csid)) {
/* if the specified or default csid is not utf8 _compatible_
AND we have */
/* mixed utf8 and native (non-utf8) data, then it's a fatal
problem */
/* utf8 _compatible_ means, can be upgraded to utf8, ie. utf8 or
ascii */
- if ((utf8 & ARRAY_BIND_NATIVE) && !CS_IS_UTF8_COMPATIBLE(csid)) {
+ /* if ((utf8 & ARRAY_BIND_NATIVE) && !CS_IS_UTF8_COMPATIBLE(csid)) {
croak("Can't mix utf8 and non-utf8 in array bind");
- }
+ }*/
csid = utf8_csid; /* not al32utf8_csid here on purpose */
}
- PerlIO_printf(DBILOGFP, "csid after=%d\n",csid);
- if (trace_level >= 3 || dbd_verbose <= 3 )
+
+ if (trace_level >= 3 || dbd_verbose >= 3 )
PerlIO_printf(DBILOGFP, "do_bind_array_exec(): bind %s <==
[array of values] "
"(%s, %s, csid %d->%d->%d, ftype %d (%s), csform
%d->%d, maxlen %lu, maxdata_size %lu)\n",
phs->name,
@@ -3404,13 +3383,38 @@
phs[i]->maxlen = len;
/* update the utf8_flgs for this value */
+
+ /*PerlIO_printf(DBILOGFP, "\nn in sv=%s...\n",sv);*/
+
+
+
+
if (SvUTF8(sv)) {
+ /*STRLEN len2;
+ char* xx;
+ xx=SvPVutf8(
sv, len2);
+
PerlIO_printf(DBILOGFP, " 11xx=%s,len2=%d...\n",xx,len2);
+*/
utf8_flgs[i] |= ARRAY_BIND_UTF8;
}
else {
+ /*STRLEN len2;
+ char* xx;
+ bool is_utf8;
+ xx=SvPVutf8( sv, len2);
+ PerlIO_printf(DBILOGFP, "
xx=%s,len2=%d...\n",xx,len2);
+
+ is_utf8=is_utf8_string((U8*)sv,1);
+
+ PerlIO_printf(DBILOGFP,
"is_utf8=%d...\n",is_utf8);
+*/
+
utf8_flgs[i] |= ARRAY_BIND_NATIVE;
+
}
+
+
/* Do OCI bind calls on last iteration. */
if( ((unsigned int) j ) == exe_count - 1 ) {
if(!do_bind_array_exec(sth, imp_sth, phs[i], utf8_flgs[i]))
{
Modified: dbd-oracle/branches/utf8_ea/dbdimp.h
==============================================================================
--- dbd-oracle/branches/utf8_ea/dbdimp.h (original)
+++ dbd-oracle/branches/utf8_ea/dbdimp.h Thu Sep 18 13:53:42 2008
@@ -256,7 +256,7 @@
extern ub2 ncharsetid;
extern ub2 us7ascii_csid;
extern ub2 utf8_csid;
-extern ub2 we8mawin1252;
+extern ub2 we8mswin1252; /*default for windows */
extern ub2 al32utf8_csid;
extern ub2 al16utf16_csid;
@@ -264,7 +264,8 @@
( ( cs == utf8_csid ) || ( cs == al32utf8_csid ) )
#define CS_IS_UTF8_COMPATIBLE( cs ) \
- ( CS_IS_UTF8(cs) || (cs) == 873 )
+ ( CS_IS_UTF8(cs) || ( (cs) == us7ascii_csid ) || ( (cs) == we8mswin1252 ) )
+
#define CS_IS_UTF16( cs ) ( cs == al16utf16_csid )