void snapshot_selection::write_ways(output_formatter &formatter) { // grab the ways, way nodes and tags // way nodes and tags are on a separate connections so that the // entire result set can be streamed from a single query. logger::message("Fetching ways"); element_info elem; nodes_t nodes; tags_t tags; pqxx::result ways = w.prepared("extract_ways").exec(); for (pqxx::result::const_iterator itr = ways.begin(); itr != ways.end(); ++itr) { extract_elem(*itr, elem); extract_nodes(w.prepared("extract_way_nds")(elem.id).exec(), nodes); extract_tags(w.prepared("extract_way_tags")(elem.id).exec(), tags); formatter.write_way(elem, nodes, tags); } }
void readonly_pgsql_selection::write_ways(output_formatter &formatter) { // grab the ways, way nodes and tags // way nodes and tags are on a separate connections so that the // entire result set can be streamed from a single query. logger::message("Fetching ways"); element_info elem; nodes_t nodes; tags_t tags; formatter.start_element_type(element_type_way); // fetch in chunks... set<osm_id_t>::iterator prev_itr = sel_ways.begin(); size_t chunk_i = 0; for (set<osm_id_t>::iterator n_itr = sel_ways.begin(); ; ++n_itr, ++chunk_i) { bool at_end = n_itr == sel_ways.end(); if ((chunk_i >= STRIDE) || ((chunk_i > 0) && at_end)) { stringstream query; query << "select w.id, w.visible, w.version, w.changeset_id, " "to_char(w.timestamp,'YYYY-MM-DD\"T\"HH24:MI:SS\"Z\"') as timestamp from " "current_ways w where w.id in ("; std::copy(prev_itr, n_itr, infix_ostream_iterator<osm_id_t>(query, ",")); query << ")"; pqxx::result ways = w.exec(query); for (pqxx::result::const_iterator itr = ways.begin(); itr != ways.end(); ++itr) { extract_elem(*itr, elem, cc); extract_nodes(w.prepared("extract_way_nds")(elem.id).exec(), nodes); extract_tags(w.prepared("extract_way_tags")(elem.id).exec(), tags); formatter.write_way(elem, nodes, tags); } chunk_i = 0; prev_itr = n_itr; } if (at_end) break; } formatter.end_element_type(element_type_way); }