Example #1
0
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);
}
Example #2
0
/*
 * 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;
}