Module: sip-router Branch: master Commit: bb30c83e4ed3594852c6251558b4c441bb5b6e19 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=bb30c83e...
Author: Jason Penton jason.penton@gmail.com Committer: Jason Penton jason.penton@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} };