Skip to content

Commit 6dfc5b6

Browse files
committed
Fix enhanced changeset stats backfilling
1 parent 564e893 commit 6dfc5b6

File tree

1 file changed

+67
-51
lines changed

1 file changed

+67
-51
lines changed

test/test_apidb_importer.cpp

Lines changed: 67 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -166,57 +166,73 @@ void update_changesets(Transaction_Manager &m) {
166166
void update_changeset_enhanced_stats(Transaction_Manager &m) {
167167

168168
m.exec(R"(
169-
170-
WITH node_stat AS (
171-
select changeset_id,
172-
count(1) filter (where version=1) as num_created,
173-
count(1) filter (where version>1 and visible = true) as num_modified,
174-
count(1) filter (where version>1 and visible = false) as num_deleted
175-
from nodes
176-
group by changeset_id
177-
),
178-
way_stat AS (
179-
select changeset_id,
180-
count(1) filter (where version=1) as num_created,
181-
count(1) filter (where version>1 and visible = true) as num_modified,
182-
count(1) filter (where version>1 and visible = false) as num_deleted
183-
from ways
184-
group by changeset_id
185-
),
186-
rel_stat AS (
187-
select changeset_id,
188-
count(1) filter (where version=1) as num_created,
189-
count(1) filter (where version>1 and visible = true) as num_modified,
190-
count(1) filter (where version>1 and visible = false) as num_deleted
191-
from relations
192-
group by changeset_id
193-
),
194-
update_nodes AS (
195-
UPDATE changesets
196-
SET num_created_nodes = node_stat.num_created,
197-
num_modified_nodes = node_stat.num_modified,
198-
num_deleted_nodes = node_stat.num_deleted
199-
FROM node_stat
200-
WHERE changesets.id = node_stat.changeset_id
201-
),
202-
update_ways AS (
203-
UPDATE changesets
204-
SET num_created_ways = way_stat.num_created,
205-
num_modified_ways = way_stat.num_modified,
206-
num_deleted_ways = way_stat.num_deleted
207-
FROM way_stat
208-
WHERE changesets.id = way_stat.changeset_id
209-
),
210-
update_relations AS (
211-
UPDATE changesets
212-
SET num_created_relations = rel_stat.num_created,
213-
num_modified_relations = rel_stat.num_modified,
214-
num_deleted_relations = rel_stat.num_deleted
215-
FROM rel_stat
216-
WHERE changesets.id = rel_stat.changeset_id
217-
)
218-
SELECT TRUE;
219-
169+
WITH changes AS (
170+
SELECT
171+
nodes.changeset_id,
172+
CASE WHEN nodes.version = 1 THEN 1 ELSE 0 END AS num_created_nodes,
173+
CASE WHEN nodes.version > 1 AND nodes.visible THEN 1 ELSE 0 END AS num_modified_nodes,
174+
CASE WHEN nodes.version > 1 AND NOT nodes.visible THEN 1 ELSE 0 END AS num_deleted_nodes,
175+
0 AS num_created_ways,
176+
0 AS num_modified_ways,
177+
0 AS num_deleted_ways,
178+
0 AS num_created_relations,
179+
0 AS num_modified_relations,
180+
0 AS num_deleted_relations
181+
FROM nodes
182+
UNION ALL
183+
SELECT
184+
ways.changeset_id,
185+
0 AS num_created_nodes,
186+
0 AS num_modified_nodes,
187+
0 AS num_deleted_nodes,
188+
CASE WHEN ways.version = 1 THEN 1 ELSE 0 END AS num_created_ways,
189+
CASE WHEN ways.version > 1 AND ways.visible THEN 1 ELSE 0 END AS num_modified_ways,
190+
CASE WHEN ways.version > 1 AND NOT ways.visible THEN 1 ELSE 0 END AS num_deleted_ways,
191+
0 AS num_created_relations,
192+
0 AS num_modified_relations,
193+
0 AS num_deleted_relations
194+
FROM ways
195+
UNION ALL
196+
SELECT
197+
relations.changeset_id,
198+
0 AS num_created_nodes,
199+
0 AS num_modified_nodes,
200+
0 AS num_deleted_nodes,
201+
0 AS num_created_ways,
202+
0 AS num_modified_ways,
203+
0 AS num_deleted_ways,
204+
CASE WHEN relations.version = 1 THEN 1 ELSE 0 END AS num_created_relations,
205+
CASE WHEN relations.version > 1 AND relations.visible THEN 1 ELSE 0 END AS num_modified_relations,
206+
CASE WHEN relations.version > 1 AND NOT relations.visible THEN 1 ELSE 0 END AS num_deleted_relations
207+
FROM relations
208+
),
209+
total AS (
210+
SELECT
211+
changes.changeset_id,
212+
SUM(changes.num_created_nodes) AS num_created_nodes,
213+
SUM(changes.num_modified_nodes) AS num_modified_nodes,
214+
SUM(changes.num_deleted_nodes) AS num_deleted_nodes,
215+
SUM(changes.num_created_ways) AS num_created_ways,
216+
SUM(changes.num_modified_ways) AS num_modified_ways,
217+
SUM(changes.num_deleted_ways) AS num_deleted_ways,
218+
SUM(changes.num_created_relations) AS num_created_relations,
219+
SUM(changes.num_modified_relations) AS num_modified_relations,
220+
SUM(changes.num_deleted_relations) AS num_deleted_relations
221+
FROM changes
222+
GROUP BY changes.changeset_id
223+
)
224+
UPDATE changesets
225+
SET num_created_nodes = total.num_created_nodes,
226+
num_modified_nodes = total.num_modified_nodes,
227+
num_deleted_nodes = total.num_deleted_nodes,
228+
num_created_ways = total.num_created_ways,
229+
num_modified_ways = total.num_modified_ways,
230+
num_deleted_ways = total.num_deleted_ways,
231+
num_created_relations = total.num_created_relations,
232+
num_modified_relations = total.num_modified_relations,
233+
num_deleted_relations = total.num_deleted_relations
234+
FROM total
235+
WHERE changesets.id = total.changeset_id
220236
)");
221237
}
222238

0 commit comments

Comments
 (0)