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;
`);