Re: DBD-Oracle on AIX

[email protected] (Charles Jardine)
Newsgroups perl.dbi.users
Message-ID <[email protected]>
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
sparc_patch (text/plain, 892 B)
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*/
sparc_patch2 (text/plain, 1.8 KB)
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;
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.