| # 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. |
| """empty message |
| |
| Revision ID: f231d82b9b26 |
| Revises: e68c4473c581 |
| Create Date: 2018-03-20 19:47:54.991259 |
| |
| """ |
| import sqlalchemy as sa |
| from alembic import op |
| |
| from superset.utils.core import generic_find_uq_constraint_name |
| |
| # revision identifiers, used by Alembic. |
| revision = "f231d82b9b26" |
| down_revision = "e68c4473c581" |
| |
| conv = {"uq": "uq_%(table_name)s_%(column_0_name)s"} |
| |
| names = {"columns": "column_name", "metrics": "metric_name"} |
| |
| |
| def upgrade(): |
| |
| # Reduce the size of the metric_name column for constraint viability. |
| with op.batch_alter_table("metrics", naming_convention=conv) as batch_op: |
| batch_op.alter_column( |
| "metric_name", |
| existing_type=sa.String(length=512), |
| type_=sa.String(length=255), |
| existing_nullable=True, |
| ) |
| |
| # Add the missing uniqueness constraints. |
| for table, column in names.items(): |
| with op.batch_alter_table(table, naming_convention=conv) as batch_op: |
| batch_op.create_unique_constraint( |
| "uq_{}_{}".format(table, column), [column, "datasource_id"] |
| ) |
| |
| |
| def downgrade(): |
| |
| bind = op.get_bind() |
| insp = sa.engine.reflection.Inspector.from_engine(bind) |
| |
| # Restore the size of the metric_name column. |
| with op.batch_alter_table("metrics", naming_convention=conv) as batch_op: |
| batch_op.alter_column( |
| "metric_name", |
| existing_type=sa.String(length=255), |
| type_=sa.String(length=512), |
| existing_nullable=True, |
| ) |
| |
| # Remove the previous missing uniqueness constraints. |
| for table, column in names.items(): |
| with op.batch_alter_table(table, naming_convention=conv) as batch_op: |
| batch_op.drop_constraint( |
| generic_find_uq_constraint_name(table, {column, "datasource_id"}, insp) |
| or "uq_{}_{}".format(table, column), |
| type_="unique", |
| ) |