diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-05-02 23:57:23 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-05-02 23:57:23 +0000 |
commit | f9d75a502ad378393ce5edee0d779b52364b3d0e (patch) | |
tree | dc50a18d1d51963d484004729a2bac9f6b59811b /res/res_config_pgsql.c | |
parent | 97d4c0ac592fc6d98992525800ced123e5b2d0a5 (diff) |
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: http://svn.digium.com/svn/asterisk/branches/1.4@62797 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_config_pgsql.c')
-rw-r--r-- | res/res_config_pgsql.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 11dec3f40..e58cbda49 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); |