Add a massive set of changes for converting to use the ast_debug() macro.
[asterisk/asterisk.git] / res / res_config_pgsql.c
index 11dec3f..821f32c 100644 (file)
@@ -66,7 +66,7 @@ static int parse_config(void);
 static int pgsql_reconnect(const char *database);
 static int realtime_pgsql_status(int fd, int argc, char **argv);
 
-static char cli_realtime_pgsql_status_usage[] =
+static const char cli_realtime_pgsql_status_usage[] =
        "Usage: realtime pgsql status\n"
        "       Shows connection information for the Postgresql RealTime driver\n";
 
@@ -132,9 +132,8 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab
        if (!(result = PQexec(pgsqlConn, sql))) {
                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);
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+               ast_debug(1, "Postgresql RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn));
                ast_mutex_unlock(&pgsql_lock);
                return NULL;
        } else {
@@ -144,15 +143,15 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab
                        && result_status != PGRES_NONFATAL_ERROR) {
                        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);
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s (%s)\n",
-                                       PQresultErrorMessage(result), PQresStatus(result_status));
+                       ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+                       ast_debug(1, "Postgresql RealTime: Query Failed because: %s (%s)\n",
+                                               PQresultErrorMessage(result), PQresStatus(result_status));
                        ast_mutex_unlock(&pgsql_lock);
                        return NULL;
                }
        }
 
-       ast_log(LOG_DEBUG, "1Postgresql RealTime: Result=%p Query: %s\n", result, sql);
+       ast_debug(1, "1Postgresql RealTime: Result=%p Query: %s\n", result, sql);
 
        if ((num_rows = PQntuples(result)) > 0) {
                int i = 0;
@@ -160,7 +159,7 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab
                int numFields = PQnfields(result);
                char **fieldnames = NULL;
 
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Found %d rows.\n", num_rows);
+               ast_debug(1, "Postgresql RealTime: Found %d rows.\n", num_rows);
 
                if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) {
                        ast_mutex_unlock(&pgsql_lock);
@@ -174,7 +173,7 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab
                                stringp = PQgetvalue(result, rowIndex, i);
                                while (stringp) {
                                        chunk = strsep(&stringp, ";");
-                                       if (chunk && !ast_strlen_zero(ast_strip(chunk))) {
+                                       if (!ast_strlen_zero(ast_strip(chunk))) {
                                                if (prev) {
                                                        prev->next = ast_variable_new(fieldnames[i], chunk);
                                                        if (prev->next) {
@@ -187,7 +186,7 @@ static struct ast_variable *realtime_pgsql(const char *database, const char *tab
                                }
                        }
                }
-               free(fieldnames);
+               ast_free(fieldnames);
        } else {
                ast_log(LOG_WARNING,
                                "Postgresql RealTime: Could not find any rows in table %s.\n", table);
@@ -278,9 +277,8 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
        if (!(result = PQexec(pgsqlConn, sql))) {
                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);
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+               ast_debug(1, "Postgresql RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn));
                ast_mutex_unlock(&pgsql_lock);
                return NULL;
        } else {
@@ -290,15 +288,15 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
                        && result_status != PGRES_NONFATAL_ERROR) {
                        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);
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s (%s)\n",
-                                       PQresultErrorMessage(result), PQresStatus(result_status));
+                       ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+                       ast_debug(1, "Postgresql RealTime: Query Failed because: %s (%s)\n",
+                                               PQresultErrorMessage(result), PQresStatus(result_status));
                        ast_mutex_unlock(&pgsql_lock);
                        return NULL;
                }
        }
 
-       ast_log(LOG_DEBUG, "2Postgresql RealTime: Result=%p Query: %s\n", result, sql);
+       ast_debug(1, "2Postgresql RealTime: Result=%p Query: %s\n", result, sql);
 
        if ((num_rows = PQntuples(result)) > 0) {
                int numFields = PQnfields(result);
@@ -306,7 +304,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
                int rowIndex = 0;
                char **fieldnames = NULL;
 
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Found %d rows.\n", num_rows);
+               ast_debug(1, "Postgresql RealTime: Found %d rows.\n", num_rows);
 
                if (!(fieldnames = ast_calloc(1, numFields * sizeof(char *)))) {
                        ast_mutex_unlock(&pgsql_lock);
@@ -324,7 +322,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
                                stringp = PQgetvalue(result, rowIndex, i);
                                while (stringp) {
                                        chunk = strsep(&stringp, ";");
-                                       if (chunk && !ast_strlen_zero(ast_strip(chunk))) {
+                                       if (!ast_strlen_zero(ast_strip(chunk))) {
                                                if (initfield && !strcmp(initfield, fieldnames[i])) {
                                                        ast_category_rename(cat, chunk);
                                                }
@@ -335,7 +333,7 @@ static struct ast_config *realtime_multi_pgsql(const char *database, const char
                        }
                        ast_category_append(cfg, cat);
                }
-               free(fieldnames);
+               ast_free(fieldnames);
        } else {
                ast_log(LOG_WARNING,
                                "Postgresql RealTime: Could not find any rows in table %s.\n", table);
@@ -386,7 +384,7 @@ static int update_pgsql(const char *database, const char *table, const char *key
        snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " WHERE %s = '%s'", keyfield,
                         lookup);
 
-       ast_log(LOG_DEBUG, "Postgresql RealTime: Update SQL: %s\n", sql);
+       ast_debug(1, "Postgresql RealTime: Update SQL: %s\n", sql);
 
        /* We now have our complete statement; Lets connect to the server and execute it. */
        ast_mutex_lock(&pgsql_lock);
@@ -398,9 +396,8 @@ static int update_pgsql(const char *database, const char *table, const char *key
        if (!(result = PQexec(pgsqlConn, sql))) {
                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);
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+               ast_debug(1, "Postgresql RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn));
                ast_mutex_unlock(&pgsql_lock);
                return -1;
        } else {
@@ -410,9 +407,9 @@ static int update_pgsql(const char *database, const char *table, const char *key
                        && result_status != PGRES_NONFATAL_ERROR) {
                        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);
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s (%s)\n",
-                                       PQresultErrorMessage(result), PQresStatus(result_status));
+                       ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+                       ast_debug(1, "Postgresql RealTime: Query Failed because: %s (%s)\n",
+                                               PQresultErrorMessage(result), PQresStatus(result_status));
                        ast_mutex_unlock(&pgsql_lock);
                        return -1;
                }
@@ -421,8 +418,7 @@ static int update_pgsql(const char *database, const char *table, const char *key
        numrows = atoi(PQcmdTuples(result));
        ast_mutex_unlock(&pgsql_lock);
 
-       ast_log(LOG_DEBUG, "Postgresql RealTime: Updated %d rows on table: %s\n", numrows,
-                       table);
+       ast_debug(1, "Postgresql RealTime: Updated %d rows on table: %s\n", numrows, table);
 
        /* From http://dev.pgsql.com/doc/pgsql/en/pgsql-affected-rows.html
         * An integer greater than zero indicates the number of rows affected
@@ -444,7 +440,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 +453,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_debug(1, "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,12 +466,11 @@ 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);
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+               ast_debug(1, "Postgresql RealTime: Query Failed because: %s\n", PQerrorMessage(pgsqlConn));
                ast_mutex_unlock(&pgsql_lock);
                return NULL;
        } else {
@@ -483,29 +480,18 @@ static struct ast_config *config_pgsql(const char *database, const char *table,
                        && result_status != PGRES_NONFATAL_ERROR) {
                        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);
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Query Failed because: %s (%s)\n",
-                                       PQresultErrorMessage(result), PQresStatus(result_status));
+                       ast_debug(1, "Postgresql RealTime: Query: %s\n", sql);
+                       ast_debug(1, "Postgresql RealTime: Query Failed because: %s (%s)\n",
+                                               PQresultErrorMessage(result), PQresStatus(result_status));
                        ast_mutex_unlock(&pgsql_lock);
                        return NULL;
                }
        }
 
        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);
+               ast_debug(1, "Postgresql RealTime: Found %ld rows.\n", num_rows);
 
                for (rowIndex = 0; rowIndex < num_rows; rowIndex++) {
                        char *field_category = PQgetvalue(result, rowIndex, 0);
@@ -561,8 +547,7 @@ static int load_module(void)
        if (!pgsql_reconnect(NULL)) {
                ast_log(LOG_WARNING,
                                "Postgresql RealTime: Couldn't establish connection. Check debug.\n");
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Cannot Connect: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Cannot Connect: %s\n", PQerrorMessage(pgsqlConn));
        }
 
        ast_config_engine_register(&pgsql_engine);
@@ -613,8 +598,7 @@ static int reload(void)
        if (!pgsql_reconnect(NULL)) {
                ast_log(LOG_WARNING,
                                "Postgresql RealTime: Couldn't establish connection. Check debug.\n");
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Cannot Connect: %s\n",
-                               PQerrorMessage(pgsqlConn));
+               ast_debug(1, "Postgresql RealTime: Cannot Connect: %s\n", PQerrorMessage(pgsqlConn));
        }
 
        ast_verbose(VERBOSE_PREFIX_2 "Postgresql RealTime reloaded.\n");
@@ -685,15 +669,17 @@ static int parse_config(void)
        }
        ast_config_destroy(config);
 
-       if (dbhost) {
-               ast_log(LOG_DEBUG, "Postgresql RealTime Host: %s\n", dbhost);
-               ast_log(LOG_DEBUG, "Postgresql RealTime Port: %i\n", dbport);
-       } else {
-               ast_log(LOG_DEBUG, "Postgresql RealTime Socket: %s\n", dbsock);
+       if (option_debug) {
+               if (dbhost) {
+                       ast_debug(1, "Postgresql RealTime Host: %s\n", dbhost);
+                       ast_debug(1, "Postgresql RealTime Port: %i\n", dbport);
+               } else {
+                       ast_debug(1, "Postgresql RealTime Socket: %s\n", dbsock);
+               }
+               ast_debug(1, "Postgresql RealTime User: %s\n", dbuser);
+               ast_debug(1, "Postgresql RealTime Password: %s\n", dbpass);
+               ast_debug(1, "Postgresql RealTime DBName: %s\n", dbname);
        }
-       ast_log(LOG_DEBUG, "Postgresql RealTime User: %s\n", dbuser);
-       ast_log(LOG_DEBUG, "Postgresql RealTime Password: %s\n", dbpass);
-       ast_log(LOG_DEBUG, "Postgresql RealTime DBName: %s\n", dbname);
 
        return 1;
 }
@@ -723,26 +709,25 @@ static int pgsql_reconnect(const char *database)
                
                sprintf(connInfo, "host=%s port=%d dbname=%s user=%s password=%s",
                                        dbhost, dbport, my_database, dbuser, dbpass);
-               ast_log(LOG_DEBUG, "%u connInfo=%s\n", size, connInfo);
+               ast_debug(1, "%u connInfo=%s\n", size, connInfo);
                pgsqlConn = PQconnectdb(connInfo);
-               ast_log(LOG_DEBUG, "%u connInfo=%s\n", size, connInfo);
-               free(connInfo);
+               ast_debug(1, "%u connInfo=%s\n", size, connInfo);
+               ast_free(connInfo);
                connInfo = NULL;
-               ast_log(LOG_DEBUG, "pgsqlConn=%p\n", pgsqlConn);
+               ast_debug(1, "pgsqlConn=%p\n", pgsqlConn);
                if (pgsqlConn && PQstatus(pgsqlConn) == CONNECTION_OK) {
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Successfully connected to database.\n");
+                       ast_debug(1, "Postgresql RealTime: Successfully connected to database.\n");
                        connect_time = time(NULL);
                        return 1;
                } else {
                        ast_log(LOG_ERROR,
                                        "Postgresql RealTime: Failed to connect database server %s on %s. Check debug for more info.\n",
                                        dbname, dbhost);
-                       ast_log(LOG_DEBUG, "Postgresql RealTime: Cannot Connect: %s\n",
-                                       PQresultErrorMessage(NULL));
+                       ast_debug(1, "Postgresql RealTime: Cannot Connect: %s\n", PQresultErrorMessage(NULL));
                        return 0;
                }
        } else {
-               ast_log(LOG_DEBUG, "Postgresql RealTime: Everything is fine.\n");
+               ast_debug(1, "Postgresql RealTime: Everything is fine.\n");
                return 1;
        }
 }