فهرست منبع

modules_k/sqlops: eleminate string copy in sql_exec_xquery()

xavp api will make a copy in shmem, no need to make a private copy first.

Thanks to Juha heinanen and Daniel-Constantin Mierla for finding this
inefficiency.
Alex Hermann 12 سال پیش
والد
کامیت
1109a4ff6c
1فایلهای تغییر یافته به همراه6 افزوده شده و 29 حذف شده
  1. 6 29
      modules_k/sqlops/sql_api.c

+ 6 - 29
modules_k/sqlops/sql_api.c

@@ -450,22 +450,22 @@ int sql_exec_xquery(struct sip_msg *msg, sql_con_t *con, str *query,
 				{
 					case DB1_STRING:
 						val.type = SR_XTYPE_STR;
-						sv.s=
+						val.v.s.s=
 							(char*)RES_ROWS(db_res)[i].values[j].val.string_val;
-						sv.len=strlen(sv.s);
+						val.v.s.len=strlen(val.v.s.s);
 					break;
 					case DB1_STR:
 						val.type = SR_XTYPE_STR;
-						sv.len=
+						val.v.s.len=
 							RES_ROWS(db_res)[i].values[j].val.str_val.len;
-						sv.s=
+						val.v.s.s=
 							(char*)RES_ROWS(db_res)[i].values[j].val.str_val.s;
 					break;
 					case DB1_BLOB:
 						val.type = SR_XTYPE_STR;
-						sv.len=
+						val.v.s.len=
 							RES_ROWS(db_res)[i].values[j].val.blob_val.len;
-						sv.s=
+						val.v.s.s=
 							(char*)RES_ROWS(db_res)[i].values[j].val.blob_val.s;
 					break;
 					case DB1_INT:
@@ -491,28 +491,10 @@ int sql_exec_xquery(struct sip_msg *msg, sql_con_t *con, str *query,
 					default:
 						val.type = SR_XTYPE_NULL;
 				}
-				if(val.type == SR_XTYPE_STR)
-				{
-					if(sv.len==0)
-					{
-						val.v.s = _sql_empty_str;
-					} else {
-						val.v.s.s = (char*)pkg_malloc(sv.len*sizeof(char));
-						if(val.v.s.s == NULL)
-						{
-							LM_ERR("no more memory\n");
-							goto error;
-						}
-						memcpy(val.v.s.s, sv.s, sv.len);
-						val.v.s.len = sv.len;
-					}
-				}
 			}
 			/* Add column to current row, under the column's name */
 			LM_DBG("Adding column: %.*s\n", RES_NAMES(db_res)[j]->len, RES_NAMES(db_res)[j]->s);
 			xavp_add_value(RES_NAMES(db_res)[j], &val, &row);
-			if (val.type == SR_XTYPE_STR && val.v.s.len > 0)
-				pkg_free(val.v.s.s);
 		}
 		/* Add row to result xavp */
 		val.type = SR_XTYPE_XAVP;
@@ -523,11 +505,6 @@ int sql_exec_xquery(struct sip_msg *msg, sql_con_t *con, str *query,
 
 	con->dbf.free_result(con->dbh, db_res);
 	return 1;
-
-error:
-	con->dbf.free_result(con->dbh, db_res);
-	return -1;
-
 }
 
 int sql_do_xquery(struct sip_msg *msg, sql_con_t *con, pv_elem_t *query,