[asterisk-commits] kpfleming: branch 1.4 r62797 - /branches/1.4/res/res_config_pgsql.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Wed May 2 16:57:24 MST 2007


Author: kpfleming
Date: Wed May  2 18:57:23 2007
New Revision: 62797

URL: http://svn.digium.com/view/asterisk?view=rev&rev=62797
Log:
improve static Realtime config loading from PostgreSQL:
	don't request sorting on fields that are pointless to sort on
	use ast_build_string() instead of snprintf()
	don't request the list of fieldnames that resulted from the query when we both knew what they were before we ran the query _AND_ we aren't going to do anything with them anyway

(patch by me, inspired by blitzrage's bug report about res_config_odbc)

Modified:
    branches/1.4/res/res_config_pgsql.c

Modified: branches/1.4/res/res_config_pgsql.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/res/res_config_pgsql.c?view=diff&rev=62797&r1=62796&r2=62797
==============================================================================
--- branches/1.4/res/res_config_pgsql.c (original)
+++ branches/1.4/res/res_config_pgsql.c Wed May  2 18:57:23 2007
@@ -444,7 +444,9 @@
 	long num_rows;
 	struct ast_variable *new_v;
 	struct ast_category *cur_cat = NULL;
-	char sql[250] = "";
+	char sqlbuf[1024] = "";
+	char *sql;
+	size_t sqlleft = sizeof(sqlbuf);
 	char last[80] = "";
 	int last_cat_metric = 0;
 
@@ -455,11 +457,11 @@
 		return NULL;
 	}
 
-	snprintf(sql, sizeof(sql),
-			 "SELECT category, var_name, var_val, cat_metric FROM %s WHERE filename='%s' and commented=0 ORDER BY filename, cat_metric desc, var_metric asc, category, var_name, var_val, id",
-			 table, file);
-
-	ast_log(LOG_DEBUG, "Postgresql RealTime: Static SQL: %s\n", sql);
+	ast_build_string(&sql, &sqlleft, "SELECT category, var_name, var_val, cat_metric FROM %s ", table);
+	ast_build_string(&sql, &sqlleft, "WHERE filename='%s' and commented=0", file);
+	ast_build_string(&sql, &sqlleft, "ORDER BY cat_metric DESC, var_metric ASC, category, var_name ");
+
+	ast_log(LOG_DEBUG, "Postgresql RealTime: Static SQL: %s\n", sqlbuf);
 
 	/* We now have our complete statement; Lets connect to the server and execute it. */
 	ast_mutex_lock(&pgsql_lock);
@@ -468,7 +470,7 @@
 		return NULL;
 	}
 
-	if (!(result = PQexec(pgsqlConn, sql))) {
+	if (!(result = PQexec(pgsqlConn, sqlbuf))) {
 		ast_log(LOG_WARNING,
 				"Postgresql RealTime: Failed to query database. Check debug for more info.\n");
 		ast_log(LOG_DEBUG, "Postgresql RealTime: Query: %s\n", sql);
@@ -492,20 +494,9 @@
 	}
 
 	if ((num_rows = PQntuples(result)) > 0) {
-		int numFields = PQnfields(result);
-		int i = 0;
 		int rowIndex = 0;
-		char **fieldnames = NULL;
 
 		ast_log(LOG_DEBUG, "Postgresql RealTime: Found %ld rows.\n", num_rows);
-
-		if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) {
-			ast_mutex_unlock(&pgsql_lock);
-			PQclear(result);
-			return NULL;
-		}
-		for (i = 0; i < numFields; i++)
-			fieldnames[i] = PQfname(result, i);
 
 		for (rowIndex = 0; rowIndex < num_rows; rowIndex++) {
 			char *field_category = PQgetvalue(result, rowIndex, 0);



More information about the asterisk-commits mailing list