deb-gnocchi/gnocchi/indexer/alembic/versions/34c517bcc2dd_shorter_foreig...

92 lines
3.1 KiB
Python

# Copyright 2016 OpenStack Foundation
#
# Licensed 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.
#
"""shorter_foreign_key
Revision ID: 34c517bcc2dd
Revises: ed9c6ddc5c35
Create Date: 2016-04-13 16:58:42.536431
"""
from alembic import op
import sqlalchemy
# revision identifiers, used by Alembic.
revision = '34c517bcc2dd'
down_revision = 'ed9c6ddc5c35'
branch_labels = None
depends_on = None
resource_type_helper = sqlalchemy.Table(
'resource_type',
sqlalchemy.MetaData(),
sqlalchemy.Column('tablename', sqlalchemy.String(18), nullable=False)
)
to_rename = [
('fk_metric_archive_policy_name_archive_policy_name',
'fk_metric_ap_name_ap_name',
'archive_policy', 'name',
'metric', 'archive_policy_name',
"RESTRICT"),
('fk_resource_history_resource_type_name',
'fk_rh_resource_type_name',
'resource_type', 'name', 'resource_history', 'type',
"RESTRICT"),
('fk_resource_history_id_resource_id',
'fk_rh_id_resource_id',
'resource', 'id', 'resource_history', 'id',
"CASCADE"),
('fk_archive_policy_rule_archive_policy_name_archive_policy_name',
'fk_apr_ap_name_ap_name',
'archive_policy', 'name', 'archive_policy_rule', 'archive_policy_name',
"RESTRICT")
]
def upgrade():
connection = op.get_bind()
insp = sqlalchemy.inspect(connection)
op.alter_column("resource_type", "tablename",
type_=sqlalchemy.String(35),
existing_type=sqlalchemy.String(18), nullable=False)
for rt in connection.execute(resource_type_helper.select()):
if rt.tablename == "generic":
continue
fk_names = [fk['name'] for fk in insp.get_foreign_keys("%s_history" %
rt.tablename)]
fk_old = ("fk_%s_history_resource_history_revision" %
rt.tablename)
if fk_old not in fk_names:
# The table have been created from scratch recently
fk_old = ("fk_%s_history_revision_resource_history_revision" %
rt.tablename)
fk_new = "fk_%s_h_revision_rh_revision" % rt.tablename
to_rename.append((fk_old, fk_new, 'resource_history', 'revision',
"%s_history" % rt.tablename, 'revision', 'CASCADE'))
for (fk_old, fk_new, src_table, src_col, dst_table, dst_col, ondelete
) in to_rename:
op.drop_constraint(fk_old, dst_table, type_="foreignkey")
op.create_foreign_key(fk_new, dst_table, src_table,
[dst_col], [src_col], ondelete=ondelete)