]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
improve static Realtime config loading from PostgreSQL:
authorKevin P. Fleming <kpfleming@digium.com>
Wed, 2 May 2007 23:57:23 +0000 (23:57 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Wed, 2 May 2007 23:57:23 +0000 (23:57 +0000)
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

res/res_config_pgsql.c

index 11dec3f40459dc21bd3845425e8d6120ca085689..e58cbda49e0de912c83bc327bf72573881f4d112 100644 (file)
@@ -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);