Module: kamailio
Branch: master
Commit: 5612f7d6e500718e930754ee3055960b808db8c2
URL: 
https://github.com/kamailio/kamailio/commit/5612f7d6e500718e930754ee3055960b808db8c2

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: GitHub <nore...@github.com>
Date: 2017-02-13T20:33:56+01:00

Merge pull request #957 from zecke/db-mysql-datetime

db_mysql: Let the database convert the timestamp

---

Modified: src/modules/db_mysql/db_mysql.c
Modified: src/modules/db_mysql/db_mysql.h
Modified: src/modules/db_mysql/doc/db_mysql_admin.xml
Modified: src/modules/db_mysql/km_val.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/5612f7d6e500718e930754ee3055960b808db8c2.diff
Patch: 
https://github.com/kamailio/kamailio/commit/5612f7d6e500718e930754ee3055960b808db8c2.patch

---

diff --git a/src/modules/db_mysql/db_mysql.c b/src/modules/db_mysql/db_mysql.c
index 5ab3acb..a2ba563 100644
--- a/src/modules/db_mysql/db_mysql.c
+++ b/src/modules/db_mysql/db_mysql.c
@@ -41,6 +41,7 @@ unsigned int my_connect_to = 2; /* 2 s by default */
 unsigned int my_send_to = 0; /*  enabled only for mysql >= 5.25  */
 unsigned int my_recv_to = 0; /* enabled only for mysql >= 5.25 */
 unsigned int my_retries = 1;    /* Number of retries when command fails */
+unsigned int my_server_timezone = 0; /* Use FROM_UNIXTIME() for date 
conversion */
 
 unsigned long my_client_ver = 0;
 
@@ -91,6 +92,7 @@ static param_export_t params[] = {
        {"send_timeout",    PARAM_INT, &my_send_to},
        {"receive_timeout", PARAM_INT, &my_recv_to},
        {"retries",         PARAM_INT, &my_retries},
+       {"server_timezone", PARAM_INT, &my_server_timezone},
 
        {"timeout_interval", INT_PARAM, &db_mysql_timeout_interval},
        {"auto_reconnect",   INT_PARAM, &db_mysql_auto_reconnect},
diff --git a/src/modules/db_mysql/db_mysql.h b/src/modules/db_mysql/db_mysql.h
index 44eb985..f762a2c 100644
--- a/src/modules/db_mysql/db_mysql.h
+++ b/src/modules/db_mysql/db_mysql.h
@@ -44,6 +44,7 @@ extern unsigned int my_send_to;
 extern unsigned int my_recv_to;
 extern unsigned long my_client_ver;
 extern unsigned int my_retries;
+extern unsigned int my_server_timezone;
 
 /** @} */
 
diff --git a/src/modules/db_mysql/doc/db_mysql_admin.xml 
b/src/modules/db_mysql/doc/db_mysql_admin.xml
index b791c6a..e15b85a 100644
--- a/src/modules/db_mysql/doc/db_mysql_admin.xml
+++ b/src/modules/db_mysql/doc/db_mysql_admin.xml
@@ -74,6 +74,27 @@ modparam("db_mysql", "ping_interval", 600)
 </programlisting>
                </example>
        </section>
+       <section>
+               <title><varname>server_timezone</varname> (integer)</title>
+               <para>
+               Control if kamailio convers a time to string using the local 
timezone
+               or if MySQL will convert it using FROM_UNIXTIME. This option is 
useful
+               if kamailio and the database are configured for different 
timezones.
+               </para>
+               <para>
+               <emphasis>
+                       Default value is 0 (use local conversion)
+               </emphasis>
+               </para>
+               <example>
+               <title>Set <varname>server_timezone</varname> parameter</title>
+               <programlisting format="linespecific">
+...
+modparam("db_mysql", "server_timezone", 1)
+...
+</programlisting>
+               </example>
+       </section>
                <section>
                <title><varname>timeout_interval</varname> (integer)</title>
                <para>
diff --git a/src/modules/db_mysql/km_val.c b/src/modules/db_mysql/km_val.c
index fd93d9b..905daa5 100644
--- a/src/modules/db_mysql/km_val.c
+++ b/src/modules/db_mysql/km_val.c
@@ -29,6 +29,7 @@
 #include "../../lib/srdb1/db_ut.h"
 #include "km_val.h"
 #include "km_my_con.h"
+#include "db_mysql.h"
 
 
 /*!
@@ -46,6 +47,27 @@ int db_mysql_val2str(const db1_con_t* _c, const db_val_t* 
_v, char* _s, int* _le
        int l, tmp;
        char* old_s;
 
+       switch(VAL_TYPE(_v)) {
+       case DB1_DATETIME:
+               if (my_server_timezone) {
+                       /* Let MySQL handle timestamp to internal time 
representation */
+                       if (!_s || !_len || !*_len) {
+                               LM_ERR("Invalid parameter value\n");
+                               return -1;
+                       }
+                       l = snprintf(_s, *_len, "FROM_UNIXTIME(%d)", 
VAL_INT(_v));
+                       if (l < 0 || l >= *_len) {
+                               LM_ERR("Error in snprintf\n");
+                               return -1;
+                       }
+                       *_len  = l;
+                       return 0;
+               }
+               break;
+       default:
+               break;
+       };
+
        tmp = db_val2str(_c, _v, _s, _len);
        if (tmp < 1)
                return tmp;


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to