123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "orasel.h"
- //-----------------------------------------------------------------------------
- void open_sess(con_t* con)
- {
- sword status;
- if ( OCIEnvCreate(&con->envhp, OCI_DEFAULT | OCI_NEW_LENGTH_SEMANTICS,
- NULL, NULL, NULL, NULL, 0, NULL) != OCI_SUCCESS
- || OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&con->errhp,
- OCI_HTYPE_ERROR, 0, NULL) != OCI_SUCCESS
- || OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&con->srvhp,
- OCI_HTYPE_SERVER, 0, NULL) != OCI_SUCCESS
- || OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&con->svchp,
- OCI_HTYPE_SVCCTX, 0, NULL) != OCI_SUCCESS
- || OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&con->authp,
- OCI_HTYPE_SESSION, 0, NULL) != OCI_SUCCESS
- || OCIHandleAlloc(con->envhp, (dvoid**)(dvoid*)&con->stmthp,
- OCI_HTYPE_STMT, 0, NULL) != OCI_SUCCESS)
- {
- errxit("no oracle memory left");
- }
- status = OCIAttrSet(con->svchp, OCI_HTYPE_SVCCTX, con->srvhp, 0,
- OCI_ATTR_SERVER, con->errhp);
- if (status != OCI_SUCCESS) goto connect_err;
- status = OCIAttrSet(con->authp, OCI_HTYPE_SESSION,
- (text*)con->username->s, con->username->len,
- OCI_ATTR_USERNAME, con->errhp);
- if (status != OCI_SUCCESS) goto connect_err;
- status = OCIAttrSet(con->authp, OCI_HTYPE_SESSION,
- (text*)con->password->s, con->password->len,
- OCI_ATTR_PASSWORD, con->errhp);
- if (status != OCI_SUCCESS) goto connect_err;
- status = OCIAttrSet(con->svchp, OCI_HTYPE_SVCCTX, con->authp, 0,
- OCI_ATTR_SESSION, con->errhp);
- if (status != OCI_SUCCESS) goto connect_err;
- status = OCIServerAttach(con->srvhp, con->errhp, (OraText*)con->uri->s,
- con->uri->len, 0);
- if (status != OCI_SUCCESS) goto connect_err;
- status = OCISessionBegin(con->svchp, con->errhp, con->authp,
- OCI_CRED_RDBMS, OCI_DEFAULT);
- if (status != OCI_SUCCESS) {
- connect_err:
- oraxit(status, con);
- }
- }
- //-----------------------------------------------------------------------------
- void send_req(con_t* con, const Str* req)
- {
- sword status;
- status = OCIStmtPrepare(con->stmthp, con->errhp, (text*)req->s, req->len,
- OCI_NTV_SYNTAX, OCI_DEFAULT);
- if (status != OCI_SUCCESS) goto request_err;
- status = OCIStmtExecute(con->svchp, con->stmthp, con->errhp, 0, 0, NULL,
- NULL, OCI_STMT_SCROLLABLE_READONLY);
- if (status != OCI_SUCCESS) {
- request_err:
- fprintf(stderr, "%.*s\n", req->len, req->s);
- oraxit(status, con);
- }
- }
- //-----------------------------------------------------------------------------
|