Skip to content

Commit 2f27a3a

Browse files
authored
Merge pull request #1244 from joto/remove-legacy-dependency-tracking
Remove legacy calls from dependency manager
2 parents 694db77 + 43daa87 commit 2f27a3a

File tree

6 files changed

+110
-39
lines changed

6 files changed

+110
-39
lines changed

src/dependency-manager.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,6 @@ void full_dependency_manager_t::way_changed(osmid_t id)
2525
}
2626
}
2727

28-
void full_dependency_manager_t::relation_changed(osmid_t id)
29-
{
30-
for (auto const rel_id : m_object_store->get_rels_by_rel(id)) {
31-
m_rels_pending_tracker.mark(rel_id);
32-
}
33-
}
34-
35-
void full_dependency_manager_t::relation_deleted(osmid_t id)
36-
{
37-
for (auto const rel_id : m_object_store->get_ways_by_rel(id)) {
38-
m_ways_pending_tracker.mark(rel_id);
39-
}
40-
}
41-
4228
bool full_dependency_manager_t::has_pending() const noexcept
4329
{
4430
return !m_ways_pending_tracker.empty() || !m_rels_pending_tracker.empty();

src/dependency-manager.hpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,6 @@ class dependency_manager_t
4141
*/
4242
virtual void way_changed(osmid_t) {}
4343

44-
/**
45-
* Mark a relation as changed to trigger the propagation of this change to
46-
* other relations.
47-
*
48-
* This has to be called *after* the object was stored in the object store.
49-
*/
50-
virtual void relation_changed(osmid_t) {}
51-
52-
/**
53-
* Mark a relation as deleted to trigger the propagation of this change to
54-
* the way members.
55-
*/
56-
virtual void relation_deleted(osmid_t) {}
57-
5844
/// Are there pending objects that need to be processed?
5945
virtual bool has_pending() const noexcept { return false; }
6046

@@ -97,8 +83,6 @@ class full_dependency_manager_t : public dependency_manager_t
9783

9884
void node_changed(osmid_t id) override;
9985
void way_changed(osmid_t id) override;
100-
void relation_changed(osmid_t id) override;
101-
void relation_deleted(osmid_t id) override;
10286

10387
bool has_pending() const noexcept override;
10488

src/osmdata.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ void osmdata_t::relation_modify(osmium::Relation const &rel) const
124124
for (auto &out : m_outs) {
125125
out->relation_modify(rel);
126126
}
127-
128-
m_dependency_manager->relation_changed(rel.id());
129127
}
130128

131129
void osmdata_t::node_delete(osmid_t id) const
@@ -153,8 +151,6 @@ void osmdata_t::relation_delete(osmid_t id) const
153151
}
154152

155153
slim_middle().relation_delete(id);
156-
157-
m_dependency_manager->relation_deleted(id);
158154
}
159155

160156
void osmdata_t::start() const
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
2+
local tables = {}
3+
4+
tables.highways = osm2pgsql.define_table{
5+
name = 'osm2pgsql_test_highways',
6+
ids = { type = 'way', id_column = 'way_id' },
7+
columns = {
8+
{ column = 'tags', type = 'hstore' },
9+
{ column = 'refs', type = 'text' },
10+
{ column = 'geom', type = 'linestring' },
11+
}
12+
}
13+
14+
tables.routes = osm2pgsql.define_table{
15+
name = 'osm2pgsql_test_routes',
16+
ids = { type = 'relation', id_column = 'rel_id' },
17+
columns = {
18+
{ column = 'tags', type = 'hstore' },
19+
{ column = 'members', type = 'text' },
20+
{ column = 'geom', type = 'multilinestring' },
21+
}
22+
}
23+
24+
local w2r = {}
25+
26+
function osm2pgsql.process_way(object)
27+
if osm2pgsql.stage == 1 then
28+
return
29+
end
30+
31+
local row = {
32+
tags = object.tags,
33+
geom = { create = 'line' }
34+
}
35+
36+
local d = w2r[object.id]
37+
if d then
38+
local refs = {}
39+
for rel_id, rel_ref in pairs(d) do
40+
refs[#refs + 1] = rel_ref
41+
end
42+
table.sort(refs)
43+
44+
row.refs = table.concat(refs, ',')
45+
end
46+
47+
tables.highways:add_row(row)
48+
end
49+
50+
function osm2pgsql.select_relation_members(relation)
51+
if relation.tags.type == 'route' then
52+
return { ways = osm2pgsql.way_member_ids(relation) }
53+
end
54+
end
55+
56+
function osm2pgsql.process_relation(object)
57+
if object.tags.type ~= 'route' then
58+
return
59+
end
60+
61+
local mlist = {}
62+
for _, member in ipairs(object.members) do
63+
if member.type == 'w' then
64+
if not w2r[member.ref] then
65+
w2r[member.ref] = {}
66+
end
67+
w2r[member.ref][object.id] = object.tags.ref
68+
mlist[#mlist + 1] = member.ref
69+
end
70+
end
71+
72+
tables.routes:add_row({
73+
tags = object.tags,
74+
members = table.concat(mlist, ','),
75+
geom = { create = 'line' }
76+
})
77+
end
78+

tests/test-output-flex-stage2.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,3 +523,35 @@ TEST_CASE("relation data on ways: change relation (three rels)")
523523
CHECK(1 == conn.get_count("osm2pgsql_test_routes", "members = '21,22'"));
524524
CHECK(1 == conn.get_count("osm2pgsql_test_routes", "members = '22'"));
525525
}
526+
527+
TEST_CASE("relation data on ways: delete relation")
528+
{
529+
options_t options = testing::opt_t()
530+
.slim()
531+
.flex("test_output_flex_stage2_alt.lua")
532+
.srs(PROJ_LATLONG);
533+
534+
// create database with a way and two relations on it
535+
REQUIRE_NOTHROW(db.run_import(options,
536+
"n10 v1 dV x10.0 y10.0\n"
537+
"n11 v1 dV x10.0 y10.2\n"
538+
"n12 v1 dV x10.2 y10.2\n"
539+
"w20 v1 dV Thighway=primary Nn10,n11,n12\n"
540+
"r30 v1 dV Ttype=route,ref=Y11 Mw20@\n"
541+
"r31 v1 dV Ttype=something Mw20@\n"));
542+
543+
auto conn = db.db().connect();
544+
545+
CHECK(1 == conn.get_count("osm2pgsql_test_highways"));
546+
CHECK(1 == conn.get_count("osm2pgsql_test_routes"));
547+
CHECK(1 == conn.get_count("osm2pgsql_test_highways", "refs = 'Y11'"));
548+
549+
options.append = true;
550+
551+
// delete the non-route relation
552+
REQUIRE_NOTHROW(db.run_import(options, "r31 v2 dD\n"));
553+
554+
CHECK(1 == conn.get_count("osm2pgsql_test_highways"));
555+
CHECK(1 == conn.get_count("osm2pgsql_test_routes"));
556+
CHECK(1 == conn.get_count("osm2pgsql_test_highways", "refs = 'Y11'"));
557+
}

tests/test-parse-osmium.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ struct counting_output_t : public output_null_t
9595
struct counts_t {
9696
std::size_t nodes_changed = 0;
9797
std::size_t ways_changed = 0;
98-
std::size_t relations_changed = 0;
9998
};
10099

101100
/**
@@ -111,7 +110,6 @@ class counting_dependency_manager_t : public dependency_manager_t
111110

112111
void node_changed(osmid_t) override { ++m_counts->nodes_changed; }
113112
void way_changed(osmid_t) override { ++m_counts->ways_changed; }
114-
void relation_changed(osmid_t) override { ++m_counts->relations_changed; }
115113

116114
private:
117115
std::shared_ptr<counts_t> m_counts;
@@ -155,7 +153,6 @@ TEST_CASE("parse xml file")
155153

156154
REQUIRE(counts->nodes_changed == 0);
157155
REQUIRE(counts->ways_changed == 0);
158-
REQUIRE(counts->relations_changed == 0);
159156
}
160157

161158
TEST_CASE("parse diff file")
@@ -193,7 +190,6 @@ TEST_CASE("parse diff file")
193190

194191
REQUIRE(counts->nodes_changed == 1176);
195192
REQUIRE(counts->ways_changed == 161);
196-
REQUIRE(counts->relations_changed == 11);
197193
}
198194

199195
TEST_CASE("parse xml file with extra args")
@@ -235,5 +231,4 @@ TEST_CASE("parse xml file with extra args")
235231

236232
REQUIRE(counts->nodes_changed == 0);
237233
REQUIRE(counts->ways_changed == 0);
238-
REQUIRE(counts->relations_changed == 0);
239234
}

0 commit comments

Comments
 (0)