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

Reply via email to