"""Add ocr_quality_score column and drop unique filehash index Revision ID: 007_add_ocr_quality_drop_filehash_unique Revises: 006_add_detail_column Create Date: 2026-03-01 """ import logging from typing import Union import sqlalchemy as sa from alembic import op logger = logging.getLogger(__name__) # revision identifiers, used by Alembic. revision: str = "007_add_ocr_quality_drop_filehash_unique" down_revision: Union[str, None] = "006_add_detail_column" depends_on: Union[str, None] = None def upgrade() -> None: """Add ocr_quality_score column and drop unique constraint on filehash.""" # Add ocr_quality_score column for AI-assessed text quality (0-100) op.add_column("files", sa.Column("ocr_quality_score", sa.Integer(), nullable=True)) # Drop unique index on filehash to allow duplicate file records. # The filehash column retains a non-unique index for lookups. try: op.drop_index("ix_files_filehash", table_name="files") except sa.exc.OperationalError as exc: logger.debug("Could not drop ix_files_filehash (may not exist): %s", exc) try: op.create_index("ix_files_filehash", "files", ["filehash"], unique=False) except sa.exc.OperationalError as exc: logger.debug("Could not create ix_files_filehash (may already exist): %s", exc) def downgrade() -> None: """Remove ocr_quality_score column and restore unique filehash index.""" op.drop_column("files", "ocr_quality_score")