Files

39 lines
1.4 KiB
SQL
Raw Permalink Normal View History

-- +goose Up
-- An alias can describe one language while belonging to a snapshot requested
-- in another language. Track the request scope separately so replacing a
-- complete snapshot removes every alias that snapshot previously supplied.
-- NULL is reserved for rows that predate request-scope tracking; every new
-- writer supplies either a normalized language or '' for a provider-wide
-- snapshot.
ALTER TABLE media_item_aliases
ADD COLUMN snapshot_language text;
DROP INDEX idx_media_item_aliases_unique;
CREATE UNIQUE INDEX idx_media_item_aliases_unique
ON media_item_aliases (
content_id,
normalized_title,
language,
kind,
provider,
snapshot_language
);
-- +goose Down
-- Multiple request scopes may contain the same public alias. Keep one before
-- restoring the original uniqueness definition.
DELETE FROM media_item_aliases duplicate
USING media_item_aliases keeper
WHERE duplicate.id > keeper.id
AND duplicate.content_id = keeper.content_id
AND duplicate.normalized_title = keeper.normalized_title
AND duplicate.language = keeper.language
AND duplicate.kind = keeper.kind
AND duplicate.provider = keeper.provider;
DROP INDEX idx_media_item_aliases_unique;
ALTER TABLE media_item_aliases
DROP COLUMN snapshot_language;
CREATE UNIQUE INDEX idx_media_item_aliases_unique
ON media_item_aliases (content_id, normalized_title, language, kind, provider);