exports.up = async (knex) => knex.raw(` CREATE FUNCTION entities_scene_tags(entity entities, selectable_tags text[]) RETURNS SETOF tags AS $$ SELECT tags.* FROM releases LEFT JOIN releases_tags ON releases_tags.release_id = releases.id LEFT JOIN tags ON tags.id = releases_tags.tag_id WHERE releases.entity_id = entity.id AND CASE WHEN array_length(selectable_tags, 1) IS NOT NULL THEN tags.slug = ANY(selectable_tags) ELSE true END GROUP BY tags.id ORDER BY tags.name; $$ LANGUAGE SQL STABLE; `); exports.down = async (knex) => knex.raw(` DROP FUNCTION IF EXISTS entities_scene_tags; `);