Module: sip-router
Branch: master
Commit: bb30c83e4ed3594852c6251558b4c441bb5b6e19
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=bb30c83…
Author: Jason Penton <jason.penton(a)gmail.com>
Committer: Jason Penton <jason.penton(a)gmail.com>
Date: Thu Oct 9 17:02:57 2014 +0200
modules/db_mysql: added parameter to change affected rows value for UPDATE queries
- enabled will return the number of matched/foudn rows as opposed to the number of
updated rows
---
modules/db_mysql/doc/db_mysql_admin.xml | 19 +++++++++++++++++++
modules/db_mysql/km_db_mysql.c | 1 +
modules/db_mysql/km_db_mysql.h | 1 +
modules/db_mysql/km_my_con.c | 9 +++++++--
modules/db_mysql/mysql_mod.c | 1 +
5 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/modules/db_mysql/doc/db_mysql_admin.xml
b/modules/db_mysql/doc/db_mysql_admin.xml
index 738c464..fdc1a5c 100644
--- a/modules/db_mysql/doc/db_mysql_admin.xml
+++ b/modules/db_mysql/doc/db_mysql_admin.xml
@@ -141,6 +141,25 @@ modparam("db_mysql", "insert_delayed", 1)
</programlisting>
</example>
</section>
+ <section id="db_mysql.p.update_affected_found">
+ <title><varname>update_affected_found</varname>
(integer)</title>
+ <para>
+ If set to 1, all UPDATE SQL queries will return the number of matched rows instead of
the number of "updated" rows.
+ </para>
+ <para>
+ <emphasis>
+ Default value is 0 (1 - on / 0 - off).
+ </emphasis>
+ </para>
+ <example>
+ <title>Set <varname>update_affected_found</varname>
parameter</title>
+ <programlisting format="linespecific">
+...
+modparam("db_mysql", "update_affected_found", 1)
+...
+</programlisting>
+ </example>
+ </section>
</section>
<section>
<title>Functions</title>
diff --git a/modules/db_mysql/km_db_mysql.c b/modules/db_mysql/km_db_mysql.c
index ab39ff0..d360650 100644
--- a/modules/db_mysql/km_db_mysql.c
+++ b/modules/db_mysql/km_db_mysql.c
@@ -51,6 +51,7 @@
unsigned int db_mysql_timeout_interval = 2; /* Default is 6 seconds */
unsigned int db_mysql_auto_reconnect = 1; /* Default is enabled */
unsigned int db_mysql_insert_all_delayed = 0; /* Default is off */
+unsigned int db_mysql_update_affected_found = 0; /* Default is off */
/* MODULE_VERSION */
diff --git a/modules/db_mysql/km_db_mysql.h b/modules/db_mysql/km_db_mysql.h
index f817765..cb51b55 100644
--- a/modules/db_mysql/km_db_mysql.h
+++ b/modules/db_mysql/km_db_mysql.h
@@ -43,6 +43,7 @@
extern unsigned int db_mysql_timeout_interval;
extern unsigned int db_mysql_auto_reconnect;
extern unsigned int db_mysql_insert_all_delayed;
+extern unsigned int db_mysql_update_affected_found;
int db_mysql_bind_api(db_func_t *dbb);
diff --git a/modules/db_mysql/km_my_con.c b/modules/db_mysql/km_my_con.c
index 4d29c6c..d0338a4 100644
--- a/modules/db_mysql/km_my_con.c
+++ b/modules/db_mysql/km_my_con.c
@@ -44,6 +44,7 @@ struct my_con* db_mysql_new_connection(const struct db_id* id)
{
struct my_con* ptr;
char *host, *grp;
+ unsigned int connection_flag = 0;
if (!id) {
LM_ERR("invalid parameter value\n");
@@ -99,12 +100,16 @@ struct my_con* db_mysql_new_connection(const struct db_id* id)
mysql_options(ptr->con, MYSQL_OPT_READ_TIMEOUT, (const char
*)&db_mysql_timeout_interval);
mysql_options(ptr->con, MYSQL_OPT_WRITE_TIMEOUT, (const char
*)&db_mysql_timeout_interval);
+ if (db_mysql_update_affected_found) {
+ connection_flag |= CLIENT_FOUND_ROWS;
+ }
+
#if (MYSQL_VERSION_ID >= 40100)
if (!mysql_real_connect(ptr->con, host, id->username, id->password,
- id->database, id->port, 0, CLIENT_MULTI_STATEMENTS)) {
+ id->database, id->port, 0, connection_flag|CLIENT_MULTI_STATEMENTS)) {
#else
if (!mysql_real_connect(ptr->con, host, id->username, id->password,
- id->database, id->port, 0, 0)) {
+ id->database, id->port, 0, connection_flag)) {
#endif
LM_ERR("driver error: %s\n", mysql_error(ptr->con));
/* increase error counter */
diff --git a/modules/db_mysql/mysql_mod.c b/modules/db_mysql/mysql_mod.c
index 8d369c7..664f258 100644
--- a/modules/db_mysql/mysql_mod.c
+++ b/modules/db_mysql/mysql_mod.c
@@ -109,6 +109,7 @@ static param_export_t params[] = {
{"timeout_interval", INT_PARAM, &db_mysql_timeout_interval},
{"auto_reconnect", INT_PARAM, &db_mysql_auto_reconnect},
{"insert_delayed", INT_PARAM, &db_mysql_insert_all_delayed},
+ {"update_affected_found", INT_PARAM, &db_mysql_update_affected_found},
{0, 0, 0}
};