int output_gazetteer_t::relation_delete(osmid_t id) { /* Make sure we are in slim mode */ require_slim_mode(); /* Delete all references to this relation */ delete_place('R', id); return 0; }
void output_gazetteer_t::delete_unused_classes(char osm_type, osmid_t osm_id) { char tmp2[2]; tmp2[0] = osm_type; tmp2[1] = '\0'; char const *paramValues[2]; paramValues[0] = tmp2; paramValues[1] = (single_fmt % osm_id).str().c_str(); PGresult *res = pgsql_execPrepared(ConnectionDelete, "get_classes", 2, paramValues, PGRES_TUPLES_OK); int sz = PQntuples(res); if (sz > 0 && !places.has_data()) { PQclear(res); /* unconditional delete of all places */ delete_place(osm_type, osm_id); } else { std::string clslist; for (int i = 0; i < sz; i++) { std::string cls(PQgetvalue(res, i, 0)); if (!places.has_place(cls)) { clslist.reserve(clslist.length() + cls.length() + 3); if (!clslist.empty()) clslist += ','; clslist += '\''; clslist += cls; clslist += '\''; } } PQclear(res); if (!clslist.empty()) { /* Stop any active copy */ stop_copy(); /* Delete all places for this object */ pgsql_exec(Connection, PGRES_COMMAND_OK, "DELETE FROM place WHERE osm_type = '%c' AND osm_id = %" PRIdOSMID " and class = any(ARRAY[%s])", osm_type, osm_id, clslist.c_str()); } } }