boolean OCI_API OCI_IntervalFree2(OCI_Library *pOCILib, OCI_Interval *itv) { OCI_CHECK_PTR(pOCILib, OCI_IPC_INTERVAL, itv, FALSE); //OCI_CHECK_INTERVAL_ENABLED(pOCILib, itv->con, FALSE); #if OCI_VERSION_COMPILE >= OCI_9_0 OCI_CHECK_OBJECT_FETCHED(itv, FALSE); if (itv->hstate == OCI_OBJECT_ALLOCATED) { ub4 htype = 0; if (itv->type == OCI_INTERVAL_YM) htype = OCI_DTYPE_INTERVAL_YM; else if (itv->type == OCI_INTERVAL_DS) htype = OCI_DTYPE_INTERVAL_DS; OCI_DescriptorFree2(pOCILib, (dvoid *) itv->handle, htype); } if (itv->hstate != OCI_OBJECT_ALLOCATED_ARRAY) { OCI_FREE(itv); } #endif OCI_RESULT(pOCILib, TRUE); return TRUE; }
boolean OCI_API OCI_FileFree ( OCI_File *file ) { boolean res = TRUE; OCI_CHECK_PTR(OCI_IPC_FILE, file, FALSE); OCI_CHECK_OBJECT_FETCHED(file, FALSE); OCI_FREE(file->dir); OCI_FREE(file->name); if (file->hstate == OCI_OBJECT_ALLOCATED) { OCI_DescriptorFree((dvoid *) file->handle, (ub4) OCI_DTYPE_LOB); } if (file->hstate != OCI_OBJECT_ALLOCATED_ARRAY) { OCI_FREE(file); } OCI_RESULT(res); return res; }
boolean OCI_API OCI_DateFree(OCI_Library *pOCILib, OCI_Date *date) { OCI_CHECK_PTR(pOCILib, OCI_IPC_DATE, date, FALSE); OCI_CHECK_OBJECT_FETCHED(date, FALSE); if (date->allocated == TRUE) { OCI_FREE(date->handle); } if (date->hstate != OCI_OBJECT_ALLOCATED_ARRAY) { OCI_FREE(date); } OCI_RESULT(pOCILib, TRUE); return TRUE; }
boolean OCI_API OCI_ElemFree2(OCI_Library *pOCILib, OCI_Elem *elem, ExceptionSink* xsink) { assert(elem); //OCI_CHECK_PTRQ(pOCILib, OCI_IPC_ELEMENT, elem, FALSE, xsink); OCI_CHECK_OBJECT_FETCHED(elem, FALSE); /* if the element has sub-objects that have been fetched, we need to free these objects */ if (elem->obj != NULL) { OCI_Datatype * data = (OCI_Datatype *) elem->obj; if (data->hstate == OCI_OBJECT_FETCHED_CLEAN) data->hstate = OCI_OBJECT_FETCHED_DIRTY; switch (elem->typinf->cols[0].type) { case OCI_CDT_DATETIME: OCI_DateFree(pOCILib, (OCI_Date *) elem->obj); break; case OCI_CDT_LOB: OCI_LobFree(pOCILib, (OCI_Lob *) elem->obj, xsink); break; case OCI_CDT_FILE: assert(false); //OCI_FileFree(pOCILib, (OCI_File *) elem->obj); break; case OCI_CDT_OBJECT: OCI_ObjectFree2(pOCILib, (OCI_Object *) elem->obj, xsink); break; case OCI_CDT_COLLECTION: OCI_CollFree2(pOCILib, (OCI_Coll *) elem->obj, xsink); break; case OCI_CDT_TIMESTAMP: OCI_TimestampFree2(pOCILib, (OCI_Timestamp *) elem->obj); break; case OCI_CDT_INTERVAL: OCI_IntervalFree2(pOCILib, (OCI_Interval *) elem->obj); break; case OCI_CDT_REF: assert(false); //OCI_RefFree(pOCILib, (OCI_Ref *) elem->obj); break; } } if ((elem->hstate == OCI_OBJECT_ALLOCATED) && (elem->typinf->cols[0].type == OCI_CDT_NUMERIC)) { OCI_FREE(elem->handle); } OCI_FREE(elem->buf); OCI_FREE(elem); OCI_RESULT(pOCILib, TRUE); return TRUE; }