On Tue, 2007-11-06 at 09:40 +0100, Markus Hoenicka wrote:
Hi,
I'll be happy to apply any patch that adds the missing error checks.
Unfortunately I won't be able to verify that it works as I don't have
access to Oracle. I'd appreciate if anyone else with an Oracle
installation could test-drive the patches, just to make sure.
Let me know when you have a working patch.
This one actually worked for me, for my limited needs.
Some additional cleanup would be useful though. (it logs a lot of things to
stderr for instance).
diff --git a/drivers/oracle/dbd_oracle.c b/drivers/oracle/dbd_oracle.c
index 2796cd6..b034a2f 100755
--- a/drivers/oracle/dbd_oracle.c
+++ b/drivers/oracle/dbd_oracle.c
@@ -95,12 +95,13 @@ int dbd_connect(dbi_conn_t *conn)
const char *username = dbi_conn_get_option(conn, username);
const char *password = dbi_conn_get_option(conn, password);
const char *sid = dbi_conn_get_option(conn, dbname);
+ sword status;
if(! sid ) sid = getenv(ORACLE_SID);
/* OCI Environment Allocation */
- if(OCIEnvCreate ((OCIEnv **) (Oconn-env), OCI_OBJECT, (dvoid *)0, 0,
0, 0, (size_t)0, (dvoid **)0)) {
+ if(OCIEnvCreate ((OCIEnv **) (Oconn-env), OCI_DEFAULT, (dvoid *)0, 0,
0, 0, (size_t)0, (dvoid **)0)) {
_dbd_internal_error_handler(conn, Connect::Unable to
initialize environment, 0);
return -2;
}
@@ -119,8 +120,9 @@ int dbd_connect(dbi_conn_t *conn)
_dbd_internal_error_handler(conn, Connect::Unable to allocate
SERVICE handlers., 0);
return -2;
}
- if( OCILogon(Oconn-env, Oconn-err, (Oconn-svc), (CONST OraText*)
username,
-strlen(username),(CONST OraText*) password,
strlen(password), sid, strlen(sid))) {
+ if( (status = OCILogon(Oconn-env, Oconn-err, (Oconn-svc), (CONST
OraText*) username,
+strlen(username),(CONST OraText*) password,
strlen(password), sid, strlen(sid {
+ _checkerr(Oconn-err, status);
_dbd_internal_error_handler(conn, Connect::Unable to login to
the database., 0);
return -2;
}
@@ -290,17 +292,22 @@ dbi_result_t *dbd_query_null(dbi_conn_t *conn, const char
unsigned *statement, s
if( OCIStmtPrepare(stmt, Oconn-err, (char *) statement,
(ub4) st_length, (ub4) OCI_NTV_SYNTAX, (ub4)
OCI_DEFAULT)) {
+OCIHandleFree(stmt, OCI_HTYPE_STMT);
return NULL;
}
OCIAttrGet(stmt, OCI_HTYPE_STMT, (dvoid *) stmttype,
(ub4 *) 0, (ub4) OCI_ATTR_STMT_TYPE, Oconn-err);
- OCIStmtExecute(Oconn-svc, stmt, Oconn-err,
+ status = OCIStmtExecute(Oconn-svc, stmt, Oconn-err,
(ub4) (stmttype == OCI_STMT_SELECT ? 0 : 1),
(ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *)
NULL,
MY_OCI_STMT_SCROLLABLE_READONLY);
+ if( status != OCI_SUCCESS) {
+OCIHandleFree(stmt, OCI_HTYPE_STMT);
+ return NULL;
+ }
if( stmttype == OCI_STMT_SELECT) {
@@ -355,7 +362,6 @@ dbi_result_t *dbd_query_null(dbi_conn_t *conn, const char
unsigned *statement, s
OCIAttrGet(param, (ub4) OCI_DTYPE_PARAM,
otype,(ub4 *) 0, (ub4) OCI_ATTR_DATA_TYPE,
(OCIError *) Oconn-err );
-fprintf(stderr, ***%s()-%d\n, __func__, otype);
OCIAttrGet((dvoid*) param, (ub4) OCI_DTYPE_PARAM,
(dvoid**) col_name,(ub4 *) col_name_len, (ub4)
OCI_ATTR_NAME,
--
Bazsi
-
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now http://get.splunk.com/
___
Libdbi-drivers-devel mailing list
Libdbi-drivers-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libdbi-drivers-devel