Module: sip-router Branch: master Commit: c4ee278460bdd9c12962d77ebafcab511a203e43 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c4ee2784...
Author: Peter Dunkley peter.dunkley@crocodile-rcs.com Committer: Peter Dunkley peter.dunkley@crocodile-rcs.com Date: Wed May 2 17:40:29 2012 +0100
modules/db_postgres: Fixed bug in insert/delete/update operations where success is returned when there are some errors
- Some PostgreSQL errors are only identified when the store_result() function is called. Even if store_result() returns < 0 (indicating an error has occurred) the insert/delete/update functions can still return success.
---
modules/db_postgres/km_dbase.c | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/modules/db_postgres/km_dbase.c b/modules/db_postgres/km_dbase.c index 101cc8e..b1ac34b 100644 --- a/modules/db_postgres/km_dbase.c +++ b/modules/db_postgres/km_dbase.c @@ -543,15 +543,19 @@ int db_postgres_insert(const db1_con_t* _h, const db_key_t* _k, const db_val_t* { db1_res_t* _r = NULL;
- int tmp = db_do_insert(_h, _k, _v, _n, db_postgres_val2str, db_postgres_submit_query); + int ret = db_do_insert(_h, _k, _v, _n, db_postgres_val2str, db_postgres_submit_query); // finish the async query, otherwise the next query will not complete - if (db_postgres_store_result(_h, &_r) != 0) + int tmp = db_postgres_store_result(_h, &_r); + + if (tmp < 0) { LM_WARN("unexpected result returned"); + ret = tmp; + } if (_r) db_free_result(_r);
- return tmp; + return ret; }
@@ -568,16 +572,19 @@ int db_postgres_delete(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _ const db_val_t* _v, const int _n) { db1_res_t* _r = NULL; - int tmp = db_do_delete(_h, _k, _o, _v, _n, db_postgres_val2str, + int ret = db_do_delete(_h, _k, _o, _v, _n, db_postgres_val2str, db_postgres_submit_query); + int tmp = db_postgres_store_result(_h, &_r);
- if (db_postgres_store_result(_h, &_r) != 0) + if (tmp < 0) { LM_WARN("unexpected result returned"); - + ret = tmp; + } + if (_r) db_free_result(_r);
- return tmp; + return ret; }
@@ -598,16 +605,19 @@ int db_postgres_update(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _ const int _un) { db1_res_t* _r = NULL; - int tmp = db_do_update(_h, _k, _o, _v, _uk, _uv, _n, _un, db_postgres_val2str, + int ret = db_do_update(_h, _k, _o, _v, _uk, _uv, _n, _un, db_postgres_val2str, db_postgres_submit_query); + int tmp = db_postgres_store_result(_h, &_r);
- if (db_postgres_store_result(_h, &_r) != 0) + if (tmp < 0) { LM_WARN("unexpected result returned"); + ret = tmp; + } if (_r) db_free_result(_r);
- return tmp; + return ret; }
/**