diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a0801792a..109a08042 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -768,6 +768,20 @@ https://github.com/apache/incubator-superset/pull/3013 [Example commit](https://github.com/apache/incubator-superset/pull/5745/commits/6220966e2a0a0cf3e6d87925491f8920fe8a3458) +1. Test the migration's `down` method + + ```bash + superset db downgrade + ``` + + The output should look like this: + + ``` + INFO [alembic.runtime.migration] Context impl SQLiteImpl. + INFO [alembic.runtime.migration] Will assume transactional DDL. + INFO [alembic.runtime.migration] Running downgrade 40a0a483dd12 -> 1a1d627ebd8e, add_metadata_column_to_annotation_model.py + ``` + ### Merging DB migrations When two DB migrations collide, you'll get an error message like this one: diff --git a/superset/migrations/versions/c2acd2cf3df2_alter_type_of_dbs_encrypted_extra.py b/superset/migrations/versions/c2acd2cf3df2_alter_type_of_dbs_encrypted_extra.py new file mode 100644 index 000000000..8fe263148 --- /dev/null +++ b/superset/migrations/versions/c2acd2cf3df2_alter_type_of_dbs_encrypted_extra.py @@ -0,0 +1,64 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""alter type of dbs encrypted_extra + + +Revision ID: c2acd2cf3df2 +Revises: cca2f5d568c8 +Create Date: 2019-11-01 09:18:36.953603 + +""" + +import sqlalchemy as sa +from alembic import op +from sqlalchemy_utils import EncryptedType + +# revision identifiers, used by Alembic. +revision = "c2acd2cf3df2" +down_revision = "cca2f5d568c8" + + +def upgrade(): + with op.batch_alter_table("dbs") as batch_op: + try: + # Postgres migration + batch_op.alter_column( + "encrypted_extra", + existing_type=sa.Text(), + type_=EncryptedType(sa.Text()), + postgresql_using="encrypted_extra::bytea", + existing_nullable=True, + ) + except TypeError: + # non-Postgres migration + batch_op.alter_column( + "dbs", + "encrypted_extra", + existing_type=sa.Text(), + type_=EncryptedType(sa.Text()), + existing_nullable=True, + ) + + +def downgrade(): + with op.batch_alter_table("dbs") as batch_op: + batch_op.alter_column( + "encrypted_extra", + existing_type=EncryptedType(sa.Text()), + type_=sa.Text(), + existing_nullable=True, + )