void ows_layers_storage_fill(ows * o) { PGresult *res, *res_g; ows_layer_node *ln; bool filled; buffer *sql; int i, end; assert(o); assert(o->layers); sql = buffer_init(); buffer_add_str(sql, "SELECT DISTINCT f_table_schema, f_table_name FROM geometry_columns"); res = ows_psql_exec(o, sql->buf); buffer_empty(sql); buffer_add_str(sql, "SELECT DISTINCT f_table_schema, f_table_name FROM geography_columns"); res_g = ows_psql_exec(o, sql->buf); buffer_free(sql); for (ln = o->layers->first ; ln ; ln = ln->next) { filled = false; for (i = 0, end = PQntuples(res); i < end; i++) { if ( buffer_cmp(ln->layer->storage->schema, (char *) PQgetvalue(res, i, 0)) && buffer_cmp(ln->layer->storage->table, (char *) PQgetvalue(res, i, 1))) { ows_layer_storage_fill(o, ln->layer, true); filled = true; } } for (i = 0, end = PQntuples(res_g); i < end; i++) { if ( buffer_cmp(ln->layer->storage->schema, (char *) PQgetvalue(res_g, i, 0)) && buffer_cmp(ln->layer->storage->table, (char *) PQgetvalue(res_g, i, 1))) { ows_layer_storage_fill(o, ln->layer, false); filled = true; } } if (!filled) { if (ln->layer->storage) ows_layer_storage_free(ln->layer->storage); ln->layer->storage = NULL; } } PQclear(res); PQclear(res_g); }
/* * Free a layer */ void ows_layer_free(ows_layer * l) { assert(l); if (l->title) buffer_free(l->title); if (l->name) buffer_free(l->name); if (l->abstract) buffer_free(l->abstract); if (l->keywords) list_free(l->keywords); if (l->gml_ns) list_free(l->gml_ns); if (l->srid) list_free(l->srid); if (l->geobbox) ows_geobbox_free(l->geobbox); if (l->ns_uri) buffer_free(l->ns_uri); if (l->ns_prefix) buffer_free(l->ns_prefix); if (l->storage) ows_layer_storage_free(l->storage); if (l->exclude_items) list_free(l->exclude_items); free(l); l = NULL; }