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/[email protected]/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
[email protected] 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;