"""Indeks pod liste scen studia i licznik "+N" ulubionych studiow. Oba sortuja po dacie premiery albo, gdy jej nie ma, dniu trafienia do katalogu (to samo wyrazenie co ix_scenes_effective_date_desc z 0033), w obrebie jednego studia. Bez tego Postgres czytal WSZYSTKIE sceny studia (Brazzers ma ich dziesiatki tysiecy), sprawdzal kazdej playback i sortowal, a licznik dla 209 ulubionych studiow trwal 10-25 s. Z tym indeksem idzie po kolei i konczy po 200 widocznych scenach na studio. CONCURRENTLY w autocommit_block, jak w 0035. Nieudany CONCURRENTLY zostawia indeks INVALID; wtedy DROP INDEX i ponownie. Revision ID: 0038_scenes_studio_effdate_idx Revises: 0037_clip_feed Create Date: 2026-09-15 """ from __future__ import annotations from alembic import op revision = "0038_scenes_studio_effdate_idx" down_revision: str | None = "0037_clip_feed" branch_labels = None depends_on = None def upgrade() -> None: with op.get_context().autocommit_block(): op.execute( "CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_scenes_studio_effective_date_desc " "ON scenes (studio_id, COALESCE(release_date, (created_at AT TIME ZONE 'UTC')::date) DESC, " "created_at DESC, id DESC) WHERE studio_id IS NOT NULL" ) def downgrade() -> None: with op.get_context().autocommit_block(): op.execute("DROP INDEX CONCURRENTLY IF EXISTS ix_scenes_studio_effective_date_desc")