Author: byterock
Date: Tue May 6 17:52:01 2008
New Revision: 11205
Modified:
dbd-oracle/trunk/oci8.c
Log:
Possible fix for binary persistent lobs?
seem all I need it the size and it will get it all
Modified: dbd-oracle/trunk/oci8.c
==============================================================================
--- dbd-oracle/trunk/oci8.c (original)
+++ dbd-oracle/trunk/oci8.c Tue May 6 17:52:01 2008
@@ -2375,7 +2375,7 @@
imp_fbh_t *fbh = &imp_sth->fbh[i-1];
int ftype = fbh->ftype;
/* add space for STRING null term, or VAR len prefix */
- ub4 define_len = (ftype==94||ftype==95) ? fbh->disize+4 :
fbh->disize;
+ sb4 define_len = (ftype==94||ftype==95) ? fbh->disize+4 :
fbh->disize;
fb_ary_t *fb_ary;
fbh->fb_ary = fb_ary_alloc(define_len, 1);
fbh->fb_ary = fb_ary_alloc(define_len, imp_sth->rs_array_size);
@@ -2597,17 +2597,25 @@
}
} else {
-
- int datalen =
fb_ary->arlen[imp_sth->rs_array_idx];
- char *p = (char*)row_data;
- /* if ChopBlanks check for Oracle CHAR type
(blank padded) */
- if (ChopBlanks && fbh->dbtype == 96) {
- while(datalen && p[datalen - 1]==' ')
- --datalen;
- }
- sv_setpvn(sv, p, (STRLEN)datalen);
- if ((CSFORM_IMPLIES_UTF8(fbh->csform)) &&
(fbh->ftype != SQLT_BIN)){
- SvUTF8_on(sv);
+ if (fbh->ftype == SQLT_BIN){
+ char *p = (char*)row_data;
+ sb4 datalen = strlen(p);
+ if (datalen >= fbh->disize){
+ datalen = fbh->disize;
+ }
+ sv_setpvn(sv, p, datalen);
+ } else {
+ int datalen =
fb_ary->arlen[imp_sth->rs_array_idx];
+ char *p = (char*)row_data;
+ /* if ChopBlanks check for Oracle CHAR
type (blank padded) */
+ if (ChopBlanks && fbh->dbtype == 96) {
+ while(datalen && p[datalen - 1]=='
')
+ --datalen;
+ }
+ sv_setpvn(sv, p, (STRLEN)datalen);
+ if (CSFORM_IMPLIES_UTF8(fbh->csform) ){
+ SvUTF8_on(sv);
+ }
}
}