[sr-dev] git:master: usrloc: option to control if the null fields should be in insert statement

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 15 00:05:00 CEST 2014


Module: sip-router
Branch: master
Commit: c1edef1f89894a9382ef424a43aefabe0fb10443
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c1edef1f89894a9382ef424a43aefabe0fb10443

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Mon Sep 15 00:01:36 2014 +0200

usrloc: option to control if the null fields should be in insert statement

- ammeds previous patch 1e84aeb91cf8e7a79a9ac9091ed993be944a667b that
  introduced skipping adding the null fields
- while it was more optimal for sql backends, for non-sql that doesn't
  have a schema auto-default could break the rows
- default is to skip the null fields

---

 modules/usrloc/README               |   16 ++++++++++++++++
 modules/usrloc/doc/usrloc_admin.xml |   22 ++++++++++++++++++++++
 modules/usrloc/ucontact.c           |   34 +++++++++++++++++++++++++++++++++-
 modules/usrloc/ul_mod.c             |    2 ++
 4 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/modules/usrloc/README b/modules/usrloc/README
index ed9df55..7275236 100644
--- a/modules/usrloc/README
+++ b/modules/usrloc/README
@@ -71,6 +71,7 @@ Bogdan-Andrei Iancu
               3.33. handle_lost_tcp (int)
               3.34. expires_type (int)
               3.35. db_raw_fetch_type (int)
+              3.36. db_insert_null (int)
 
         4. Functions
         5. MI Commands
@@ -163,6 +164,7 @@ Bogdan-Andrei Iancu
    1.33. Set handle_lost_tcp parameter
    1.34. Set expires_type parameter
    1.35. Set db_raw_fetch_type parameter
+   1.36. Set db_insert_null parameter
 
 Chapter 1. Admin Guide
 
@@ -214,6 +216,7 @@ Chapter 1. Admin Guide
         3.33. handle_lost_tcp (int)
         3.34. expires_type (int)
         3.35. db_raw_fetch_type (int)
+        3.36. db_insert_null (int)
 
    4. Functions
    5. MI Commands
@@ -337,6 +340,7 @@ Chapter 1. Admin Guide
    3.33. handle_lost_tcp (int)
    3.34. expires_type (int)
    3.35. db_raw_fetch_type (int)
+   3.36. db_insert_null (int)
 
 3.1. nat_bflag (integer)
 
@@ -818,6 +822,18 @@ modparam("usrloc", "expires_type", 1)
 modparam("usrloc", "db_raw_fetch_type", 1)
 ...
 
+3.36. db_insert_null (int)
+
+   If set to 1, the insert operation to database will add null values in
+   the sql statement.
+
+   Default value is "0" (don't add null fields in insert statement).
+
+   Example 1.36. Set db_insert_null parameter
+...
+modparam("usrloc", "db_insert_null", 1)
+...
+
 4. Functions
 
    There are no exported functions that could be used in scripts.
diff --git a/modules/usrloc/doc/usrloc_admin.xml b/modules/usrloc/doc/usrloc_admin.xml
index 6520b49..ce2f693 100644
--- a/modules/usrloc/doc/usrloc_admin.xml
+++ b/modules/usrloc/doc/usrloc_admin.xml
@@ -945,6 +945,28 @@ modparam("usrloc", "db_raw_fetch_type", 1)
 		</example>
 	</section>
 
+	<section id="usrloc.p.db_insert_null">
+		<title><varname>db_insert_null</varname> (int)</title>
+		<para>
+			If set to 1, the insert operation to database will add null values
+			in the sql statement.
+		</para>
+		<para>
+		<emphasis>
+			Default value is <quote>0</quote> (don't add null fields in insert
+			statement).
+		</emphasis>
+		</para>
+		<example>
+		<title>Set <varname>db_insert_null</varname> parameter</title>
+		<programlisting format="linespecific">
+...
+modparam("usrloc", "db_insert_null", 1)
+...
+</programlisting>
+		</example>
+	</section>
+
 	</section>
 
 	<section>
diff --git a/modules/usrloc/ucontact.c b/modules/usrloc/ucontact.c
index e16cee3..5360e3d 100644
--- a/modules/usrloc/ucontact.c
+++ b/modules/usrloc/ucontact.c
@@ -48,6 +48,8 @@
 #include "ucontact.h"
 #include "usrloc.h"
 
+extern int ul_db_insert_null;
+
 static int ul_xavp_contact_clone = 1;
 
 void ul_set_xavp_contact_clone(int v)
@@ -531,13 +533,18 @@ int db_insert_ucontact(ucontact_t* _c)
 
 	nr_cols = 9;
 
-	if (_c->received.s ) {
+	if (_c->received.s) {
 		keys[nr_cols] = &received_col;
 		vals[nr_cols].type = DB1_STR;
 		vals[nr_cols].nul = 0;
 		vals[nr_cols].val.str_val.s = _c->received.s;
 		vals[nr_cols].val.str_val.len = _c->received.len;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &received_col;
+		vals[nr_cols].type = DB1_STR;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 	
 	if (_c->path.s) {
@@ -547,6 +554,11 @@ int db_insert_ucontact(ucontact_t* _c)
 		vals[nr_cols].val.str_val.s = _c->path.s;
 		vals[nr_cols].val.str_val.len = _c->path.len;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &path_col;
+		vals[nr_cols].type = DB1_STR;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 
 	if (_c->sock) {
@@ -555,6 +567,11 @@ int db_insert_ucontact(ucontact_t* _c)
 		vals[nr_cols].val.str_val = _c->sock->sock_str;
 		vals[nr_cols].nul = 0;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &sock_col;
+		vals[nr_cols].type = DB1_STR;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 
 	if (_c->methods != 0xFFFFFFFF) {
@@ -563,6 +580,11 @@ int db_insert_ucontact(ucontact_t* _c)
 		vals[nr_cols].val.bitmap_val = _c->methods;
 		vals[nr_cols].nul = 0;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &methods_col;
+		vals[nr_cols].type = DB1_BITMAP;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 
 	keys[nr_cols] = &last_mod_col;
@@ -578,6 +600,11 @@ int db_insert_ucontact(ucontact_t* _c)
 		vals[nr_cols].nul = 0;
 		vals[nr_cols].val.str_val = _c->ruid;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &ruid_col;
+		vals[nr_cols].type = DB1_STR;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 
 	if(_c->instance.len>0)
@@ -587,6 +614,11 @@ int db_insert_ucontact(ucontact_t* _c)
 		vals[nr_cols].nul = 0;
 		vals[nr_cols].val.str_val = _c->instance;
 		nr_cols++;
+	} else if(ul_db_insert_null!=0) {
+		keys[nr_cols] = &instance_col;
+		vals[nr_cols].type = DB1_STR;
+		vals[nr_cols].nul = 1;
+		nr_cols++;
 	}
 
 	keys[nr_cols] = &reg_id_col;
diff --git a/modules/usrloc/ul_mod.c b/modules/usrloc/ul_mod.c
index a8a0b91..e307273 100644
--- a/modules/usrloc/ul_mod.c
+++ b/modules/usrloc/ul_mod.c
@@ -167,6 +167,7 @@ int handle_lost_tcp = 0;				/*!< By default do not remove contacts before expira
 
 int ul_fetch_rows = 2000;				/*!< number of rows to fetch from result */
 int ul_hash_size = 9;
+int ul_db_insert_null = 0;
 
 /* flags */
 unsigned int nat_bflag = (unsigned int)-1;
@@ -226,6 +227,7 @@ static param_export_t params[] = {
 	{"db_ops_ruid",         INT_PARAM, &ul_db_ops_ruid},
 	{"expires_type",        PARAM_INT, &ul_expires_type},
 	{"db_raw_fetch_type",   PARAM_INT, &ul_db_raw_fetch_type},
+	{"db_insert_null",      PARAM_INT, &ul_db_insert_null},
 	{0, 0, 0}
 };
 




More information about the sr-dev mailing list