Files
ai-safety-platform/alembic/versions/0009_result_status_dimensions.py
baozaotumao2025 14722be770 first commit
2026-07-18 21:00:26 +08:00

63 lines
2.5 KiB
Python

"""separate result execution status and verdict
Revision ID: 0009
Revises: 0008
"""
from alembic import op
import sqlalchemy as sa
revision = "0009"
down_revision = "0008"
branch_labels = None
depends_on = None
def upgrade():
with op.batch_alter_table("test_runs") as batch:
batch.add_column(sa.Column("error_count", sa.Integer(), nullable=False, server_default="0"))
op.execute("UPDATE test_runs SET error_count = failed_count")
with op.batch_alter_table("test_runs") as batch:
batch.drop_column("failed_count")
with op.batch_alter_table("test_results") as batch:
batch.add_column(
sa.Column("execution_status", sa.String(32), nullable=False, server_default="completed")
)
batch.add_column(sa.Column("verdict", sa.String(32), nullable=True))
op.execute(
"UPDATE test_results SET "
"execution_status = CASE WHEN status = 'error' THEN 'error' ELSE 'completed' END, "
"verdict = CASE WHEN status IN "
"('pass', 'fail', 'needs_human_review', 'judge_format_error') THEN status ELSE NULL END"
)
with op.batch_alter_table("test_results") as batch:
batch.drop_index("ix_test_results_status")
batch.drop_column("status")
batch.create_index("ix_test_results_execution_status", ["execution_status"])
batch.create_index("ix_test_results_verdict", ["verdict"])
batch.create_unique_constraint(
"uq_test_results_run_execution", ["run_id", "execution_id"]
)
def downgrade():
with op.batch_alter_table("test_runs") as batch:
batch.add_column(sa.Column("failed_count", sa.Integer(), nullable=False, server_default="0"))
op.execute("UPDATE test_runs SET failed_count = error_count")
with op.batch_alter_table("test_runs") as batch:
batch.drop_column("error_count")
with op.batch_alter_table("test_results") as batch:
batch.add_column(sa.Column("status", sa.String(32), nullable=False, server_default="completed"))
op.execute(
"UPDATE test_results SET status = "
"CASE WHEN execution_status = 'error' THEN 'error' ELSE COALESCE(verdict, 'completed') END"
)
with op.batch_alter_table("test_results") as batch:
batch.drop_constraint("uq_test_results_run_execution", type_="unique")
batch.drop_index("ix_test_results_verdict")
batch.drop_index("ix_test_results_execution_status")
batch.drop_column("verdict")
batch.drop_column("execution_status")
batch.create_index("ix_test_results_status", ["status"])