Module: kamailio Branch: master Commit: 5d75450e2a05a029d51ab38c3ef6f36fef49a51b URL: https://github.com/kamailio/kamailio/commit/5d75450e2a05a029d51ab38c3ef6f36f...
Author: Ovidiu Sas osas@voipembedded.com Committer: Ovidiu Sas osas@voipembedded.com Date: 2017-04-21T12:34:01-04:00
db_oracle: fix raw sql queries
---
Modified: src/modules/db_oracle/dbase.c Modified: src/modules/db_oracle/res.c
---
Diff: https://github.com/kamailio/kamailio/commit/5d75450e2a05a029d51ab38c3ef6f36f... Patch: https://github.com/kamailio/kamailio/commit/5d75450e2a05a029d51ab38c3ef6f36f...
---
diff --git a/src/modules/db_oracle/dbase.c b/src/modules/db_oracle/dbase.c index eb400df..a4d54b9 100644 --- a/src/modules/db_oracle/dbase.c +++ b/src/modules/db_oracle/dbase.c @@ -216,7 +216,7 @@ static int db_oracle_submit_query(const db1_con_t* _h, const str* _s) (unsigned)hc); return -1; } - + if (!pqd->_rs) { /* * This method is at ~25% faster as set OCI_COMMIT_ON_SUCCESS @@ -373,8 +373,7 @@ int db_oracle_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) int len; const char *p;
- if (!_h || !_s || !_s->s) { -badparam: + if (!_h || !_r || !_s || !_s->s) { LM_ERR("invalid parameter value\n"); return -1; } @@ -387,7 +386,6 @@ int db_oracle_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) while (len && *p == ' ') ++p, --len; #define _S_DIFF(p, l, S) (l <= sizeof(S)-1 || strncasecmp(p, S, sizeof(S)-1)) if (!_S_DIFF(p, len, "select ")) { - if (!_r) goto badparam; cb._rs = &reshp; } else { if ( _S_DIFF(p, len, "insert ") @@ -398,10 +396,11 @@ int db_oracle_raw_query(const db1_con_t* _h, const str* _s, db1_res_t** _r) return -2; } #undef _S_DIFF - if (_r) goto badparam; cb._rs = NULL; }
+ CON_ORA(_h)->pqdata = &cb; + CON_ORA(_h)->bindpos = 0; len = db_do_raw_query(_h, _s, _r, db_oracle_submit_query, db_oracle_store_result); CON_ORA(_h)->pqdata = NULL; /* paranoid for next call */ return len; @@ -488,7 +487,7 @@ int db_oracle_update(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _o, { query_data_t cb; int rc; - + if (!_h || !CON_TABLE(_h)) { LM_ERR("invalid parameter value\n"); return -1; diff --git a/src/modules/db_oracle/res.c b/src/modules/db_oracle/res.c index 5511567..ca585fe 100644 --- a/src/modules/db_oracle/res.c +++ b/src/modules/db_oracle/res.c @@ -440,7 +440,6 @@ int db_oracle_store_result(const db1_con_t* _h, db1_res_t** _r) OCIStmt* hs;
if (!_h || !_r) { -badparam: LM_ERR("invalid parameter\n"); return -1; } @@ -448,15 +447,20 @@ int db_oracle_store_result(const db1_con_t* _h, db1_res_t** _r) con = CON_ORA(_h); { query_data_t *pcb = con->pqdata; -
- if (!pcb || !pcb->_rs) - goto badparam; - + if (!pcb) { + LM_ERR("invalid parameter\n"); + return -1; + } + if (!pcb->_rs) { + LM_DBG("no result\n"); + return 0; + } + hs = *pcb->_rs; pcb->_rs = NULL; /* paranoid for next call */ - } - + } + rc = -1; if (_r) *_r = NULL; /* unification for all errors */