Merged revisions 62797,62807 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r62797 | kpfleming | 2007-05-02 19:57:23 -0400 (Wed, 02 May 2007) | 7 lines

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)

................
r62807 | kpfleming | 2007-05-02 20:02:57 -0400 (Wed, 02 May 2007) | 15 lines

Merged revisions 62796 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r62796 | kpfleming | 2007-05-02 19:53:46 -0400 (Wed, 02 May 2007) | 7 lines

increase reliability and efficiency of static Realtime config loading via ODBC:
	don't request fields we aren't going to use
	don't request sorting on fields that are pointless to sort on
	explicitly request the fields we want, because we can't expect the database to always return them in the order they were created
	
(reported by blitzrage in person (!), patch by me)

........

................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@62824 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin P. Fleming
2007-05-03 00:10:38 +00:00
parent cef98155ef
commit a2c8e8a4a7
2 changed files with 20 additions and 33 deletions

View File

@@ -462,7 +462,9 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
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;
@@ -473,12 +475,12 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
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_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 ");
if (option_debug)
ast_log(LOG_DEBUG, "Postgresql RealTime: Static SQL: %s\n", sql);
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);
@@ -487,7 +489,7 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
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");
if (option_debug) {
@@ -515,22 +517,11 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
}
if ((num_rows = PQntuples(result)) > 0) {
int numFields = PQnfields(result);
int i = 0;
int rowIndex = 0;
char **fieldnames = NULL;
if (option_debug)
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);
char *field_var_name = PQgetvalue(result, rowIndex, 1);