OCI_File * OCI_FileInit ( OCI_Connection *con, OCI_File *file, OCILobLocator *handle, ub4 type ) { OCI_CALL_DECLARE_CONTEXT(TRUE) OCI_CALL_CONTEXT_SET_FROM_CONN(con) OCI_ALLOCATE_DATA(OCI_IPC_FILE, file, 1); if (OCI_STATUS) { file->type = type; file->con = con; file->handle = handle; file->offset = 1; /* reset file info */ if (file->dir) { file->dir[0] = 0; } if (file->name) { file->name[0] = 0; } if (!file->handle) { /* allocate handle for non fetched file (local file object) */ file->hstate = OCI_OBJECT_ALLOCATED; OCI_STATUS = OCI_DescriptorAlloc((dvoid *)file->con->env, (dvoid **)(void *)&file->handle, (ub4)OCI_DTYPE_LOB); } else if (OCI_OBJECT_ALLOCATED_ARRAY != file->hstate) { file->hstate = OCI_OBJECT_FETCHED_CLEAN; } } /* check for failure */ if (!OCI_STATUS && file) { OCI_FileFree(file); file = NULL; } return file; }
OCI_Msg * OCI_API OCI_MsgCreate ( OCI_TypeInfo *typinf ) { OCI_Msg *msg = NULL; OCI_CALL_ENTER(OCI_Msg*, NULL) OCI_CALL_CHECK_PTR(OCI_IPC_TYPE_INFO, typinf) OCI_CALL_CONTEXT_SET_FROM_CONN(typinf->con) /* allocate message structure */ msg = (OCI_Msg *) OCI_MemAlloc(OCI_IPC_MSG, sizeof(*msg), (size_t) 1, TRUE); OCI_STATUS = (NULL != msg); if (OCI_STATUS) { msg->typinf = typinf; msg->ind = OCI_IND_NULL; /* allocate message properties descriptor */ OCI_STATUS = OCI_DescriptorAlloc((dvoid *)msg->typinf->con->env, (dvoid **)&msg->proph, OCI_DTYPE_AQMSG_PROPERTIES); if (OCI_STATUS) { /* allocate internal OCI_Object handle if payload is not RAW */ if (OCI_UNKNOWN != msg->typinf->typecode) { msg->obj = OCI_ObjectCreate(typinf->con, typinf); OCI_STATUS = (NULL != msg->obj); } } } /* check for failure */ if (OCI_STATUS) { OCI_RETVAL = msg; } else if (msg) { OCI_MsgFree(msg); msg = NULL; } OCI_CALL_EXIT() }
OCI_Iter * OCI_API OCI_IterCreate ( OCI_Coll *coll ) { OCI_Iter *iter = NULL; OCI_CALL_ENTER(OCI_Iter*, iter); OCI_CALL_CHECK_PTR(OCI_IPC_COLLECTION, coll) OCI_CALL_CONTEXT_SET_FROM_CONN(coll->con) /* allocate iterator structure */ OCI_ALLOCATE_DATA(OCI_IPC_ITERATOR, iter, 1) if (OCI_STATUS) { iter->coll = coll; iter->eoc = FALSE; iter->boc = TRUE; iter->dirty = TRUE; /* create iterator */ OCI_EXEC(OCIIterCreate(iter->coll->con->env, iter->coll->con->err, coll->handle, &iter->handle)) /* create data element */ if (OCI_STATUS) { iter->elem = OCI_ElemInit(coll->con, iter->elem, NULL, (OCIInd *)NULL, coll->typinf); OCI_STATUS = (NULL != iter->elem); } } /* check for success */ if (OCI_STATUS) { OCI_RETVAL = iter; } else if (iter) { OCI_IterFree(iter); } OCI_CALL_EXIT() }