26 lines
813 B
JavaScript
Executable File
26 lines
813 B
JavaScript
Executable File
exports.up = async (knex) => knex.raw(`
|
|
CREATE MATERIALIZED VIEW entities_stats
|
|
AS
|
|
WITH RECURSIVE relations AS (
|
|
SELECT entities.id, entities.parent_id, count(releases.id) AS releases_count, count(releases.id) AS total_count
|
|
FROM entities
|
|
LEFT JOIN releases ON releases.entity_id = entities.id
|
|
GROUP BY entities.id
|
|
|
|
UNION ALL
|
|
|
|
SELECT entities.id AS entity_id, count(releases.id) AS releases_count, count(releases.id) + relations.total_count AS total_count
|
|
FROM entities
|
|
INNER JOIN relations ON relations.id = entities.parent_id
|
|
LEFT JOIN releases ON releases.entity_id = entities.id
|
|
GROUP BY entities.id
|
|
)
|
|
|
|
SELECT relations.id AS entity_id, relations.releases_count
|
|
FROM relations;
|
|
`);
|
|
|
|
exports.down = async (knex) => knex.raw(`
|
|
DROP MATERIALIZED VIEW entities_stats;
|
|
`);
|