"""Indeks do szukania zrodla eporner po adresie miniatury (app/dead_sources.py). Proxy miniatur dostaje od CDN-u eporner 404 i zna tylko adres obrazka; zeby sprawdzic i oznaczyc film, trzeba znalezc jego zrodlo. Miniatura ma inny identyfikator niz strona filmu, wiec bez indeksu to przeszukanie 4 mln wierszy przy kazdym pustym kafelku. Hash i czesciowy (tylko eporner): wyszukujemy wylacznie po rownosci, a eporner to ~350 tys. wierszy, wiec indeks ma kilkanascie MB. CONCURRENTLY w autocommit_block, jak w 0035, 0038, 0039, 0041 i 0043. Revision ID: 0044_playback_eporner_thumb_idx Revises: 0043_scene_tags_tag_sort_idx Create Date: 2026-09-19 """ from __future__ import annotations from alembic import op revision = "0044_playback_eporner_thumb_idx" down_revision: str | None = "0043_scene_tags_tag_sort_idx" branch_labels = None depends_on = None def upgrade() -> None: with op.get_context().autocommit_block(): op.execute( "CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_playback_sources_eporner_thumb " "ON playback_sources USING hash (thumbnail_url) " "WHERE origin = 'tube:epornercom'" ) def downgrade() -> None: with op.get_context().autocommit_block(): op.execute("DROP INDEX CONCURRENTLY IF EXISTS ix_playback_sources_eporner_thumb")