"""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"])