boolean OCI_BindFree ( OCI_Bind *bnd ) { boolean res = TRUE; OCI_CHECK(NULL == bnd, FALSE) if (OCI_BAM_INTERNAL == bnd->stmt->bind_alloc_mode) { if (bnd->is_array) { res = OCI_ArrayFreeFromHandles(bnd->input); } else { switch (bnd->type) { case OCI_CDT_NUMERIC: case OCI_CDT_TEXT: { OCI_MemFree(bnd->input); if (bnd->alloc) { OCI_FREE(bnd->buffer.data) } break; } default: { OCI_FreeObjectFromType(bnd->input, bnd->type); } } } } else { if (bnd->alloc)
boolean OCI_ArrayClose ( OCI_Array *arr ) { unsigned int i; OCI_CHECK(NULL == arr, FALSE) if ( (OCI_CDT_NUMERIC != arr->elem_type ) && (OCI_CDT_TEXT != arr->elem_type ) && (OCI_CDT_RAW != arr->elem_type ) ) { /* Cleanup OCILIB Objects */ for (i = 0; i < arr->nb_elem; i++) { OCI_FreeObjectFromType(arr->tab_obj[i], arr->elem_type); } } /* free OCI descriptors */ if (OCI_UNKNOWN != arr->handle_type) { OCI_DescriptorArrayFree ( (dvoid **) arr->mem_handle, (ub4 ) arr->handle_type, (ub4 ) arr->nb_elem ); } OCI_FREE(arr->mem_handle) OCI_FREE(arr->mem_struct) OCI_FREE(arr->tab_obj) return TRUE; }