Author: byterock
Date: Tue Dec 11 04:49:51 2007
New Revision: 10407
Modified:
dbd-oracle/trunk/oci8.c
dbd-oracle/trunk/ocitrace.h
Log:
working non leaking version
Modified: dbd-oracle/trunk/oci8.c
==============================================================================
--- dbd-oracle/trunk/oci8.c (original)
+++ dbd-oracle/trunk/oci8.c Tue Dec 11 04:49:51 2007
@@ -1398,16 +1398,20 @@
for (pos = 0; pos < obj->field_count; pos++){
fld = &obj->fields[pos]; /*get the field */
-status=OCIObjectGetInd(fbh->imp_sth->envhp,fbh->imp_sth->errhp,value,&obj->obj_ind);
-PerlIO_printf(DBILOGFP, "OCIObjectGetInd=%d\n",status);
+
status=OCIObjectGetInd(fbh->imp_sth->envhp,fbh->imp_sth->errhp,value,&obj->obj_ind);
+
+ if (status != OCI_SUCCESS) {
+ oci_error(sth, fbh->imp_sth->errhp,
status, "OCIObjectGetInd");
+ return 0;
+ }
+
status = OCIObjectGetAttr(fbh->imp_sth->envhp,
fbh->imp_sth->errhp, value,
obj->obj_ind, obj->tdo,
&fld->type_name, &fld->type_namel, 1,
(ub4 *)0, 0, &attr_null_status, &attr_null_struct,
&attr_value, &attr_tdo);
-PerlIO_printf(DBILOGFP, "attr_null_status=%d\n",attr_null_status);
- if (status != OCI_SUCCESS) {
+ if (status != OCI_SUCCESS) {
oci_error(sth, fbh->imp_sth->errhp,
status, "OCIObjectGetAttr");
return 0;
}
@@ -1429,14 +1433,8 @@
}
}
}
-
- /* status = OCIObjectFree(fbh->imp_sth->envhp, fbh->imp_sth->errhp,
value,
- OCI_OBJECTFREE_NONULL);
- if (status != OCI_SUCCESS) {
- oci_error(sth, fbh->imp_sth->errhp, status,
"OCIObjectFree");
- return 0;
- }*/
break;
+
case OCI_TYPECODE_REF : /* embedded ADT */
croak("panic: OCI_TYPECODE_REF objets () are not
supported ");
break;
@@ -1456,7 +1454,7 @@
/*not really an error just no
data
oci_error(sth,
fbh->imp_sth->errhp, status, "OCIIterCreate");*/
status = OCI_SUCCESS;
- av_push(list, &sv_undef);
+ av_push(list, &sv_undef);
return 0;
}
@@ -1466,7 +1464,6 @@
{
if (*names_null==OCI_IND_NULL){
-
av_push(list, &sv_undef);
} else {
if
(obj->element_typecode == OCI_TYPECODE_OBJECT){
@@ -1478,12 +1475,12 @@
}
}
}
- status=OCIIterDelete( fbh->imp_sth->envhp,
-
fbh->imp_sth->errhp, &itr );
+
+ OCIIterDelete_log_stat( fbh->imp_sth->envhp,
+
fbh->imp_sth->errhp, &itr,status );
+
if (status != OCI_SUCCESS) {
- /*not really an error just no
data*/
oci_error(sth,
fbh->imp_sth->errhp, status, "OCIIterDelete");
- status = OCI_SUCCESS;
return 0;
}
break;
@@ -1719,7 +1716,7 @@
}
/*we will need a reff to the TDO for the pin operation*/
- OCIObjectPin_log_stat(imp_sth->envhp,imp_sth->errhp,
obj->obj_ref,(dvoid **)&obj->obj_instance,status);
+ OCIObjectPin_log_stat(imp_sth->envhp,imp_sth->errhp,
obj->obj_ref,(dvoid **)&obj->obj_type,status);
if (status != OCI_SUCCESS) {
Modified: dbd-oracle/trunk/ocitrace.h
==============================================================================
--- dbd-oracle/trunk/ocitrace.h (original)
+++ dbd-oracle/trunk/ocitrace.h Tue Dec 11 04:49:51 2007
@@ -80,6 +80,14 @@
: stat
+#define OCIIterDelete_log_stat(envhp,errhp,itr,stat)\
+ stat = OCIIterDelete(envhp,errhp,itr );\
+ (DBD_OCI_TRACEON) \
+ ? PerlIO_printf(DBD_OCI_TRACEFP,\
+ "%OCIIterDelete_log_stat(%p,%p,%d)=%s\n",\
+ OciTp, (void*)envhp,
(void*)errhp,itr,oci_status_name(stat)),stat \
+ : stat
+
#define OCIIterCreate_log_stat(envhp,errhp,coll,itr,stat)\
stat = OCIIterCreate(envhp,errhp,coll,itr);\