On 17/05/10 23:05, John R Pierce wrote: > I've built DBD-Oracle-1.24 along with Perl 5.12.0 and DBI-1.611 for IBM > AIX 6.1 TL05 (oslevel = 6100-05-01), with Oracle 10.2.0.4, using IBM XL > C v11.1 + the latest PTF. > > to build DBD-Oracle, i had to hack the makefile slightly to remove a > bogus -q32 from the LD commands, this per the README.aix.txt notes, > otherwise my build is pretty much bog stock. Since I used cc_r to > compile perl (per the Perl readmes for AIX) I also used this variant of > the compiler for DBD-Oracle... > > Its failing just one test t/58object.t ... make test output is > below... I don't know how to resolve this. The description of > ORA-24334 is darn cryptic.
There are problems with the support for objects on big endian platforms. http://www.mail-archive.com/dbi-users@perl.org/msg32902.html is a previous report for Sparc Solaris. The patches in the mail archive are mangled, much like your test output. I have attached two patches from that thread. I expect that sparc_patch will fix your immediate problem, allowing t/58object.t to get further, and report another test failure. sparc_patch2 may fix this second problem. I would like to know either way. I have no big endian hardware on which to test these patches. -- Charles Jardine - Computing Service, University of Cambridge c...@cam.ac.uk Tel: +44 1223 334506, Fax: +44 1223 334679
diff -r -u DBD-Oracle-1.24/dbdimp.h DBD-Oracle-1.24.patched/dbdimp.h --- DBD-Oracle-1.24/dbdimp.h 2010-01-18 13:32:54.000000000 +0000 +++ DBD-Oracle-1.24.patched/dbdimp.h 2010-04-19 15:17:18.871847234 +0100 @@ -158,7 +158,7 @@ OCIType *obj_type; /*if an embeded object this is the OCIType returned by a OCIObjectPin*/ ub1 is_final_type; /*object's OCI_ATTR_IS_FINAL_TYPE*/ fbh_obj_t *fields; /*one object for each field/property*/ - int field_count; /*The number of fields Not really needed but nice to have*/ + ub2 field_count; /*The number of fields Not really needed but nice to have*/ fbh_obj_t *next_subtype; /*There is strored information about subtypes for inteherited objects*/ AV *value; /*The value to send back to Perl This way there are no memory leaks*/ SV *full_type_name; /*Perl value of full type name = schema_name "." type_name*/
diff -r -u DBD-Oracle-1.24/oci8.c DBD-Oracle-1.24.patched/oci8.c --- DBD-Oracle-1.24/oci8.c 2010-01-28 15:27:54.000000000 +0000 +++ DBD-Oracle-1.24.patched/oci8.c 2010-04-23 11:34:34.013185166 +0100 @@ -2034,6 +2034,7 @@ text str_buf[200]; double dnum; size_t str_len; + ub4 ub4_str_len; OCIRaw *raw = (OCIRaw *) 0; OCIString *vs = (OCIString *) 0; ub1 *temp = (ub1 *)0; @@ -2057,7 +2058,7 @@ fbh->imp_sth->errhp, attr_value, str_buf, - 200, + (size_t)200, &str_len, status); str_buf[str_len+1] = '\0'; @@ -2069,9 +2070,9 @@ case OCI_TYPECODE_TIMESTAMP : - str_len = 200; + ub4_str_len = 200; OCIDateTimeToText_log_stat(fbh->imp_sth->envhp, - fbh->imp_sth->errhp,attr_value,&str_len,str_buf,status); + 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"; @@ -2093,19 +2094,19 @@ sprintf(s_tz_min,":%02d", tz_minute); strcat((signed char*)str_buf, s_tz_hour); strcat((signed char*)str_buf, s_tz_min); - str_buf[str_len+7] = '\0'; + str_buf[ub4_str_len+7] = '\0'; } else { - str_buf[str_len+1] = '\0'; + str_buf[ub4_str_len+1] = '\0'; } av_push(list, newSVpv( (char *) str_buf,0)); break; case OCI_TYPECODE_DATE : /* fixed length string*/ - str_len = 200; - OCIDateToText_log_stat(fbh->imp_sth->errhp, (CONST OCIDate *) attr_value,&str_len,str_buf,status); - str_buf[str_len+1] = '\0'; + ub4_str_len = 200; + OCIDateToText_log_stat(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;