From 8ee50deac62f76277c4cf5677cd5475eb93da4f3 Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Fri, 29 Oct 2021 09:33:25 -0700 Subject: [PATCH] Drop constraint (#17275) --- .../b92d69a6643c_rename_csv_to_file.py | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/superset/migrations/versions/b92d69a6643c_rename_csv_to_file.py b/superset/migrations/versions/b92d69a6643c_rename_csv_to_file.py index dc02103337..1f94445ff4 100644 --- a/superset/migrations/versions/b92d69a6643c_rename_csv_to_file.py +++ b/superset/migrations/versions/b92d69a6643c_rename_csv_to_file.py @@ -28,15 +28,36 @@ down_revision = "32646df09c64" import sqlalchemy as sa from alembic import op +from sqlalchemy.engine.reflection import Inspector def upgrade(): - with op.batch_alter_table("dbs") as batch_op: - batch_op.alter_column( - "allow_csv_upload", - new_column_name="allow_file_upload", - existing_type=sa.Boolean(), - ) + try: + with op.batch_alter_table("dbs") as batch_op: + batch_op.alter_column( + "allow_csv_upload", + new_column_name="allow_file_upload", + existing_type=sa.Boolean(), + ) + except sa.exc.OperationalError: + # In MySQL 8.0 renaming the column rename fails because it has + # a constraint check; we can safely remove it in that case, see + # https://github.com/sqlalchemy/alembic/issues/699 + bind = op.get_bind() + inspector = Inspector.from_engine(bind) + check_constraints = inspector.get_check_constraints("dbs") + for check_constraint in check_constraints: + if "allow_csv_upload" in check_constraint["sqltext"]: + name = check_constraint["name"] + op.drop_constraint(name, table_name="dbs", type_="check") + + # try again + with op.batch_alter_table("dbs") as batch_op: + batch_op.alter_column( + "allow_csv_upload", + new_column_name="allow_file_upload", + existing_type=sa.Boolean(), + ) def downgrade():