int main(int argc, char *argv[]) { OCIError *errhp = NULL; printf("stage4: Demonstrating OCI statement caching \n"); /* parse command line options */ parse_options(argc, argv); checkenv(envhp, OCIEnvCreate(&envhp, /* returned env handle */ OCI_THREADED, /* initialization modes */ NULL, NULL, NULL, NULL, /* callbacks, context */ (size_t) 0, /* extra memory size: optional */ (void **) NULL)); /* returned extra memory */ /* allocate error handle * note: for OCIHandleAlloc(), we always check error on environment handle */ checkenv(envhp, OCIHandleAlloc(envhp, /* environment handle */ (void **) &errhp, /* returned err handle */ OCI_HTYPE_ERROR,/*type of handle to allocate*/ (size_t) 0, /* extra memory size: optional */ (void **) NULL)); /* returned extra memory */ create_session_pool(envhp, errhp, &poolName, &poolNameLen); /* allocate auth handle * note: for OCIHandleAlloc(), we check error on environment handle */ checkenv(envhp, OCIHandleAlloc(envhp, (void **) &authp, OCI_HTYPE_AUTHINFO, (size_t) 0, (void **) NULL)); /* setup username and password */ checkerr(errhp, OCIAttrSet(authp, OCI_HTYPE_AUTHINFO, (void *) username, strlen((char *)username), OCI_ATTR_USERNAME, errhp)); checkerr(errhp, OCIAttrSet(authp, OCI_HTYPE_AUTHINFO, apppassword, strlen((char *) apppassword), OCI_ATTR_PASSWORD, errhp)); spawn_threads(envhp, errhp, &thread_function); /* Destroy the session pool */ OCISessionPoolDestroy(spoolhp, errhp, OCI_DEFAULT); /* clean up */ if (authp) OCIHandleFree(authp, OCI_HTYPE_AUTHINFO); if (spoolhp) OCIHandleFree(spoolhp, OCI_HTYPE_SPOOL); if (errhp) OCIHandleFree(errhp, OCI_HTYPE_ERROR); if (envhp) OCIHandleFree(envhp, OCI_HTYPE_ENV); return 0; }
bool oci_free_session_pool(void) { function_success = SUCCESS; if (spoolhp != NULL) { checkerr(errhp, OCISessionPoolDestroy(spoolhp, errhp, OCI_SPD_FORCE)); if(function_success != SUCCESS)return false; if(OCI_SUCCESS != OCIHandleFree(spoolhp, OCI_HTYPE_SPOOL)) return false; spoolhp = NULL; } return true; }
boolean OCI_PoolClose ( OCI_Pool *pool ) { boolean res = TRUE; OCI_CHECK_PTR(OCI_IPC_POOL, pool, FALSE); /* free all connections */ OCI_ListForEach(pool->cons, (POCI_LIST_FOR_EACH) OCI_ConnectionClose); OCI_ListClear(pool->cons); OCI_ListFree(pool->cons); pool->cons = NULL; if (OCI_LIB_THREADED) { OCI_MutexFree(pool->mutex); } #if OCI_VERSION_COMPILE >= OCI_9_0 if (OCILib.version_runtime >= OCI_9_0) { /* close pool handle */ if (pool->handle != NULL) { if (pool->htype == OCI_HTYPE_CPOOL) { OCI_CALL0 ( res, pool->err, OCIConnectionPoolDestroy(pool->handle, pool->err, (ub4) OCI_DEFAULT) ) } #if OCI_VERSION_COMPILE >= OCI_9_2 else { OCI_CALL0 ( res, pool->err, OCISessionPoolDestroy(pool->handle, pool->err, (ub4) OCI_SPD_FORCE) ) } #endif OCI_HandleFree((void *) pool->handle, (ub4) pool->htype); } #if OCI_VERSION_COMPILE >= OCI_9_2 /* close authentification handle */ if (pool->authp != NULL) { OCI_HandleFree((void *) pool->authp, (ub4) OCI_HTYPE_AUTHINFO); } #endif /* close error handle */ if (pool->err != NULL) { OCI_HandleFree((void *) pool->err, (ub4) OCI_HTYPE_ERROR); } } #endif pool->err = NULL; pool->handle = NULL; pool->authp = NULL; /* free strings */ OCI_FREE(pool->name); OCI_FREE(pool->db); OCI_FREE(pool->user); OCI_FREE(pool->pwd); return res; }