@@ -166,57 +166,73 @@ void update_changesets(Transaction_Manager &m) {
166166void 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