void snapshot_selection::write_relations(output_formatter &formatter) { logger::message("Fetching relations"); element_info elem; members_t members; tags_t tags; pqxx::result relations = w.prepared("extract_relations").exec(); for (pqxx::result::const_iterator itr = relations.begin(); itr != relations.end(); ++itr) { extract_elem(*itr, elem); extract_members(w.prepared("extract_relation_members")(elem.id).exec(), members); extract_tags(w.prepared("extract_relation_tags")(elem.id).exec(), tags); formatter.write_relation(elem, members, tags); } }
void readonly_pgsql_selection::write_relations(output_formatter &formatter) { logger::message("Fetching relations"); element_info elem; members_t members; tags_t tags; formatter.start_element_type(element_type_relation); // fetch in chunks... set<osm_id_t>::iterator prev_itr = sel_relations.begin(); size_t chunk_i = 0; for (set<osm_id_t>::iterator n_itr = sel_relations.begin(); ; ++n_itr, ++chunk_i) { bool at_end = n_itr == sel_relations.end(); if ((chunk_i >= STRIDE) || ((chunk_i > 0) && at_end)) { stringstream query; query << "select r.id, r.visible, r.version, r.changeset_id, " "to_char(r.timestamp,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') as timestamp from " "current_relations r where r.id in ("; std::copy(prev_itr, n_itr, infix_ostream_iterator<osm_id_t>(query, ",")); query << ")"; pqxx::result relations = w.exec(query); for (pqxx::result::const_iterator itr = relations.begin(); itr != relations.end(); ++itr) { extract_elem(*itr, elem, cc); extract_members(w.prepared("extract_relation_members")(elem.id).exec(), members); extract_tags(w.prepared("extract_relation_tags")(elem.id).exec(), tags); formatter.write_relation(elem, members, tags); } chunk_i = 0; prev_itr = n_itr; } if (at_end) break; } formatter.end_element_type(element_type_relation); }