Module: sip-router Branch: master Commit: 2bd922dba30ae6c49242089e906254fe7d0f660f URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2bd922db...
Author: Peter Dunkley peter.dunkley@crocodile-rcs.com Committer: Peter Dunkley peter.dunkley@crocodile-rcs.com Date: Mon Mar 12 21:31:51 2012 +0000
modules/db_postgres: Added affect_rows() API to db_postgres
---
modules/db_postgres/km_db_postgres.c | 1 + modules/db_postgres/km_dbase.c | 19 +++++++++++++++++++ modules/db_postgres/km_dbase.h | 4 ++++ modules/db_postgres/km_pg_con.h | 3 ++- 4 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/modules/db_postgres/km_db_postgres.c b/modules/db_postgres/km_db_postgres.c index 9b0bd8b..5914e5f 100644 --- a/modules/db_postgres/km_db_postgres.c +++ b/modules/db_postgres/km_db_postgres.c @@ -93,6 +93,7 @@ int db_postgres_bind_api(db_func_t *dbb) dbb->insert = db_postgres_insert; dbb->delete = db_postgres_delete; dbb->update = db_postgres_update; + dbb->affected_rows = db_postgres_affected_rows;
return 0; } diff --git a/modules/db_postgres/km_dbase.c b/modules/db_postgres/km_dbase.c index c01d37a..a7b9546 100644 --- a/modules/db_postgres/km_dbase.c +++ b/modules/db_postgres/km_dbase.c @@ -69,6 +69,7 @@
#include <string.h> #include <stdio.h> +#include <stdlib.h> #include "../../dprint.h" #include "../../mem/mem.h" #include "../../lib/srdb1/db.h" @@ -425,11 +426,14 @@ int db_postgres_store_result(const db1_con_t* _con, db1_res_t** _r) LM_DBG("%p PQresultStatus(%s) PQgetResult(%p)\n", _con, PQresStatus(pqresult), CON_RESULT(_con));
+ CON_AFFECTED(_con) = 0; + switch(pqresult) { case PGRES_COMMAND_OK: /* Successful completion of a command returning no data * (such as INSERT or UPDATE). */ rc = 0; + CON_AFFECTED(_con) = atoi(PQcmdTuples(CON_RESULT(_con))); break;
case PGRES_TUPLES_OK: @@ -444,6 +448,7 @@ int db_postgres_store_result(const db1_con_t* _con, db1_res_t** _r) break; } rc = 0; + CON_AFFECTED(_con) = atoi(PQcmdTuples(CON_RESULT(_con))); break; /* query failed */ case PGRES_FATAL_ERROR: @@ -557,6 +562,20 @@ int db_postgres_update(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _ return tmp; }
+/** + * Returns the affected rows of the last query. + * \param _h database handle + * \return returns the affected rows as integer or -1 on error. + */ +int db_postgres_affected_rows(const db1_con_t* _h) +{ + if (!_h) { + LM_ERR("invalid parameter value\n"); + return -1; + } + return CON_AFFECTED(_h); +} +
/*! * Store name of table that will be used by subsequent database functions diff --git a/modules/db_postgres/km_dbase.h b/modules/db_postgres/km_dbase.h index 0e8a20b..7c15e8d 100644 --- a/modules/db_postgres/km_dbase.h +++ b/modules/db_postgres/km_dbase.h @@ -102,6 +102,10 @@ int db_postgres_update(const db1_con_t* _h, const db_key_t* _k, const db_op_t* _ */ int db_postgres_fetch_result(const db1_con_t* _h, db1_res_t** _r, const int nrows);
+/* + * number of rows affected by the last DB query/statement + */ +int db_postgres_affected_rows(const db1_con_t* _h);
/* * Store name of table that will be used by diff --git a/modules/db_postgres/km_pg_con.h b/modules/db_postgres/km_pg_con.h index 798a4af..b0f92c6 100644 --- a/modules/db_postgres/km_pg_con.h +++ b/modules/db_postgres/km_pg_con.h @@ -53,7 +53,7 @@ struct pg_con { PGresult *res; /*!< this is the current result */ char** row; /*!< Actual row in the result */ time_t timestamp; /*!< Timestamp of last query */ - + int affected_rows; /*!< Number of rows affected by the last statement */ };
#define CON_SQLURL(db_con) (((struct pg_con*)((db_con)->tail))->sqlurl) @@ -63,6 +63,7 @@ struct pg_con { #define CON_ROW(db_con) (((struct pg_con*)((db_con)->tail))->row) #define CON_TIMESTAMP(db_con) (((struct pg_con*)((db_con)->tail))->timestamp) #define CON_ID(db_con) (((struct pg_con*)((db_con)->tail))->id) +#define CON_AFFECTED(db_con) (((struct pg_con*)((db_con)->tail))->affected_rows)
/* * Create a new connection structure,