Subject: | binding large XMLTYPE fails on 64-bit perl |
64-bit perl on HPUX fails test "execute for large XML" in 32xmltyp.t
DBI_TRACE=6:
OCIDescriptorAlloc(800000010056a168,800003ffbfff1e28,OCI_DTYPE_LOB,0,0)
OCILobCreateTemporary(800000010058df48,800000010058e018,80000001005d39c0,0,0,2,0,10)=SUCCESS
OCILobWriteAppend(800000010058df48,800000010058e018,80000001005d39c0,800003ffbfff1e18,800000010081ca18,567854,0,0,0,1,1)=ERROR
OCIErrorGet(800000010058e018,1,"<NULL>",800003ffbfff24a8,"ORA-24801:
illegal parameter value in OCI lob function
",1024,2)=SUCCESS
OCILobWriteAppend requires a pointer to ub4; in this build of perl,
STRLEN is 8 bits.
Patch attached.
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY USE_ITHREADS USE_64_BIT_INT
USE_64_BIT_ALL USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
Built under hpux
Subject: | xml-64bit.patch |
Index: dbdimp.c
===================================================================
--- dbdimp.c (revision 11777)
+++ dbdimp.c (working copy)
@@ -1039,6 +1039,7 @@
dTHR;
OCIXMLType *xml = NULL;
STRLEN len;
+ ub4 buflen;
sword status;
ub1 src_type;
dvoid* src_ptr = NULL;
@@ -1074,8 +1075,9 @@
}
csid = (SvUTF8(source) && !CS_IS_UTF8(csid)) ? utf8_csid : CSFORM_IMPLIED_CSID(csform);
+ buflen = len;
OCILobWriteAppend_log_stat(imp_dbh->svchp, imp_dbh->errhp, src_ptr,
- &len, bufp, (ub4)len, OCI_ONE_PIECE,
+ &buflen, bufp, (ub4)len, OCI_ONE_PIECE,
NULL, NULL,
csid, csform, status);