63 lines
2.5 KiB
Python
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"])
|