Skip to content

Commit 6de72f3

Browse files
committed
Simplify and fix code getting relation members
This changes the way we are getting node members of relations. We now always get the locations of those nodes directly in the middle code instead of only getting the nodes themselves and adding the locations through an extra call from the output. This also fixes a problem where node locations for untagged nodes were not retrieved from the RAM middle. The node_get() code does that correctly, while the old code didn't.
1 parent 9ef933a commit 6de72f3

File tree

3 files changed

+7
-32
lines changed

3 files changed

+7
-32
lines changed

src/middle-pgsql.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -839,9 +839,9 @@ middle_query_pgsql_t::rel_members_get(osmium::Relation const &rel,
839839
for (auto const &member : rel.members()) {
840840
if (member.type() == osmium::item_type::node &&
841841
(types & osmium::osm_entity_bits::node)) {
842-
osmium::builder::NodeBuilder builder{*buffer};
843-
builder.set_id(member.ref());
844-
++members_found;
842+
if (node_get(member.ref(), buffer)) {
843+
++members_found;
844+
}
845845
} else if (member.type() == osmium::item_type::way &&
846846
(types & osmium::osm_entity_bits::way) && res) {
847847
// Match the list of ways coming from postgres in a different order

src/middle-ram.cpp

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -334,26 +334,14 @@ middle_ram_t::rel_members_get(osmium::Relation const &rel,
334334
for (auto const &member : rel.members()) {
335335
auto const member_entity_type =
336336
osmium::osm_entity_bits::from_item_type(member.type());
337+
337338
if ((member_entity_type & types) == 0) {
338339
continue;
339340
}
340341

341342
switch (member.type()) {
342343
case osmium::item_type::node:
343-
if (m_store_options.nodes) {
344-
auto const offset =
345-
m_object_index.nodes().get(member.ref());
346-
if (offset != ordered_index_t::not_found_value()) {
347-
buffer->add_item(m_object_buffer.get<osmium::Node>(offset));
348-
buffer->commit();
349-
++count;
350-
}
351-
} else {
352-
{
353-
osmium::builder::NodeBuilder builder{*buffer};
354-
builder.set_id(member.ref());
355-
}
356-
buffer->commit();
344+
if (node_get(member.ref(), buffer)) {
357345
++count;
358346
}
359347
break;
@@ -379,15 +367,8 @@ middle_ram_t::rel_members_get(osmium::Relation const &rel,
379367
}
380368
break;
381369
default: // osmium::item_type::relation
382-
if (m_store_options.relations) {
383-
auto const offset =
384-
m_object_index.relations().get(member.ref());
385-
if (offset != ordered_index_t::not_found_value()) {
386-
buffer->add_item(
387-
m_object_buffer.get<osmium::Relation>(offset));
388-
buffer->commit();
389-
++count;
390-
}
370+
if (relation_get(member.ref(), buffer)) {
371+
++count;
391372
}
392373
}
393374
}

src/output-flex.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -687,12 +687,6 @@ bool output_flex_t::relation_cache_t::add_members(middle_query_t const &middle)
687687
return false;
688688
}
689689

690-
for (auto &node : m_members_buffer.select<osmium::Node>()) {
691-
if (!node.location().valid()) {
692-
node.set_location(middle.get_node_location(node.id()));
693-
}
694-
}
695-
696690
for (auto &way : m_members_buffer.select<osmium::Way>()) {
697691
get_nodes(middle, &way);
698692
}

0 commit comments

Comments
 (0)