-static c_psql_query_t *queries = NULL;
-static int queries_num = 0;
-
-static c_psql_database_t *databases = NULL;
-static int databases_num = 0;
-
-static c_psql_result_t *c_psql_result_new (c_psql_query_t *query)
-{
- c_psql_result_t *res;
-
- ++query->results_num;
- if (NULL == (query->results = (c_psql_result_t *)realloc (query->results,
- query->results_num * sizeof (*query->results)))) {
- log_err ("Out of memory.");
- exit (5);
- }
- res = query->results + query->results_num - 1;
-
- res->type = NULL;
-
- res->instance_prefix = NULL;
- res->instances_str = NULL;
- res->instances = NULL;
- res->instances_num = 0;
-
- res->values_str = NULL;
- res->values = NULL;
- res->ds_types = NULL;
- res->values_num = 0;
- return res;
-} /* c_psql_result_new */
-
-static void c_psql_result_delete (c_psql_result_t *res)
-{
- int i;
-
- sfree (res->type);
-
- sfree (res->instance_prefix);
-
- for (i = 0; i < res->instances_num; ++i)
- sfree (res->instances_str[i]);
- sfree (res->instances_str);
- sfree (res->instances);
- res->instances_num = 0;
-
- for (i = 0; (NULL != res->values_str) && (i < res->values_num); ++i)
- sfree (res->values_str[i]);
- sfree (res->values_str);
- sfree (res->values);
- sfree (res->ds_types);
- res->values_num = 0;
-} /* c_psql_result_delete */
-
-static c_psql_query_t *c_psql_query_new (const char *name)
-{
- c_psql_query_t *query;
-
- ++queries_num;
- if (NULL == (queries = (c_psql_query_t *)realloc (queries,
- queries_num * sizeof (*queries)))) {
- log_err ("Out of memory.");
- exit (5);
- }
- query = queries + queries_num - 1;
-
- query->name = sstrdup (name);
- query->stmt = NULL;
-
- query->params = NULL;
- query->params_num = 0;
-
- query->results = NULL;
- query->results_num = 0;
-
- query->min_pg_version = 0;
- query->max_pg_version = INT_MAX;
- return query;
-} /* c_psql_query_new */
-
-static int c_psql_query_init (c_psql_query_t *query)
-{
- int i;
-
- /* Get the data set definitions for each query definition. */
- for (i = 0; i < query->results_num; ++i) {
- c_psql_result_t *res = query->results + i;
- const data_set_t *ds;
-
- int j;
-
- ds = plugin_get_ds (res->type);
- if (NULL == ds) {
- log_err ("Result: Unknown type \"%s\".", res->type);
- return -1;
- }
-
- if (res->values_num != ds->ds_num) {
- log_err ("Result: Invalid type \"%s\" - "
- "expected %i data source%s, got %i.",
- res->type, res->values_num,
- (1 == res->values_num) ? "" : "s",
- ds->ds_num);
- return -1;
- }
-
- for (j = 0; j < res->values_num; ++j)
- res->ds_types[j] = ds->ds[j].type;
- }
- return 0;
-} /* c_psql_query_init */
-
-static void c_psql_query_delete (c_psql_query_t *query)
-{
- int i;
-
- sfree (query->name);
- sfree (query->stmt);
-
- sfree (query->params);
- query->params_num = 0;
-
- for (i = 0; i < query->results_num; ++i)
- c_psql_result_delete (query->results + i);
- sfree (query->results);
- query->results_num = 0;
- return;
-} /* c_psql_query_delete */
-
-static c_psql_query_t *c_psql_query_get (const char *name, int server_version)
-{
- int i;
-
- for (i = 0; i < queries_num; ++i)
- if (0 == strcasecmp (name, queries[i].name)
- && ((-1 == server_version)
- || ((queries[i].min_pg_version <= server_version)
- && (server_version <= queries[i].max_pg_version))))
- return queries + i;
- return NULL;
-} /* c_psql_query_get */