From: Kevin P. Fleming Date: Wed, 2 May 2007 23:57:23 +0000 (+0000) Subject: improve static Realtime config loading from PostgreSQL: X-Git-Tag: 1.4.5~232 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=51d6dd84e6585c6f14866e877d0df86e89546445;p=thirdparty%2Fasterisk.git 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@62797 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 11dec3f404..e58cbda49e 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -444,7 +444,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; @@ -455,11 +457,11 @@ 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 "); - 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); @@ -468,7 +470,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"); ast_log(LOG_DEBUG, "Postgresql RealTime: Query: %s\n", sql); @@ -492,21 +494,10 @@ 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; 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);