Merge "remove dump tables from previous migrations"
This commit is contained in:
commit
dc72b33397
|
@ -17,8 +17,6 @@ from migrate import ForeignKeyConstraint
|
||||||
from sqlalchemy import MetaData, Table
|
from sqlalchemy import MetaData, Table
|
||||||
from sqlalchemy.sql.expression import select
|
from sqlalchemy.sql.expression import select
|
||||||
|
|
||||||
from ceilometer.openstack.common.db.sqlalchemy import utils
|
|
||||||
|
|
||||||
TABLES = ['resource', 'sourceassoc', 'user',
|
TABLES = ['resource', 'sourceassoc', 'user',
|
||||||
'project', 'meter', 'source', 'alarm']
|
'project', 'meter', 'source', 'alarm']
|
||||||
|
|
||||||
|
@ -46,19 +44,11 @@ def upgrade(migrate_engine):
|
||||||
for table_name in TABLES)
|
for table_name in TABLES)
|
||||||
for table_name, indexes in INDEXES.items():
|
for table_name, indexes in INDEXES.items():
|
||||||
table = load_tables[table_name]
|
table = load_tables[table_name]
|
||||||
|
|
||||||
# Save data that conflicted with FK.
|
|
||||||
columns = [column.copy() for column in table.columns]
|
|
||||||
table_dump = Table('dump_' + table_name, meta, *columns)
|
|
||||||
table_dump.create()
|
|
||||||
for column, ref_table_name, ref_column_name in indexes:
|
for column, ref_table_name, ref_column_name in indexes:
|
||||||
ref_table = load_tables[ref_table_name]
|
ref_table = load_tables[ref_table_name]
|
||||||
subq = select([getattr(ref_table.c, ref_column_name)])
|
subq = select([getattr(ref_table.c, ref_column_name)])
|
||||||
sql = utils.InsertFromSelect(table_dump, table.select().where(
|
|
||||||
~ getattr(table.c, column).in_(subq)))
|
|
||||||
sql_del = table.delete().where(
|
sql_del = table.delete().where(
|
||||||
~ getattr(table.c, column).in_(subq))
|
~ getattr(table.c, column).in_(subq))
|
||||||
migrate_engine.execute(sql)
|
|
||||||
migrate_engine.execute(sql_del)
|
migrate_engine.execute(sql_del)
|
||||||
|
|
||||||
params = {'columns': [table.c[column]],
|
params = {'columns': [table.c[column]],
|
||||||
|
@ -86,10 +76,3 @@ def downgrade(migrate_engine):
|
||||||
with migrate_engine.begin():
|
with migrate_engine.begin():
|
||||||
fkey = ForeignKeyConstraint(**params)
|
fkey = ForeignKeyConstraint(**params)
|
||||||
fkey.drop()
|
fkey.drop()
|
||||||
with migrate_engine.begin():
|
|
||||||
# Restore data that had been dropped.
|
|
||||||
table_dump_name = 'dump_' + table_name
|
|
||||||
table_dump = Table(table_dump_name, meta, autoload=True)
|
|
||||||
sql = utils.InsertFromSelect(table, table_dump.select())
|
|
||||||
migrate_engine.execute(sql)
|
|
||||||
table_dump.drop()
|
|
||||||
|
|
|
@ -20,8 +20,6 @@ from migrate import ForeignKeyConstraint
|
||||||
from sqlalchemy import MetaData, Table
|
from sqlalchemy import MetaData, Table
|
||||||
from sqlalchemy.sql.expression import select
|
from sqlalchemy.sql.expression import select
|
||||||
|
|
||||||
from ceilometer.openstack.common.db.sqlalchemy import utils
|
|
||||||
|
|
||||||
TABLES = ['user', 'project', 'alarm']
|
TABLES = ['user', 'project', 'alarm']
|
||||||
|
|
||||||
INDEXES = {
|
INDEXES = {
|
||||||
|
@ -56,18 +54,11 @@ def downgrade(migrate_engine):
|
||||||
for table_name in TABLES)
|
for table_name in TABLES)
|
||||||
for table_name, indexes in INDEXES.items():
|
for table_name, indexes in INDEXES.items():
|
||||||
table = load_tables[table_name]
|
table = load_tables[table_name]
|
||||||
# Save data that conflicted with FK.
|
|
||||||
columns = [column.copy() for column in table.columns]
|
|
||||||
table_dump = Table('dump027_' + table_name, meta, *columns)
|
|
||||||
table_dump.create()
|
|
||||||
for column, ref_table_name, ref_column_name in indexes:
|
for column, ref_table_name, ref_column_name in indexes:
|
||||||
ref_table = load_tables[ref_table_name]
|
ref_table = load_tables[ref_table_name]
|
||||||
subq = select([getattr(ref_table.c, ref_column_name)])
|
subq = select([getattr(ref_table.c, ref_column_name)])
|
||||||
sql = utils.InsertFromSelect(table_dump, table.select().where(
|
|
||||||
~ getattr(table.c, column).in_(subq)))
|
|
||||||
sql_del = table.delete().where(
|
sql_del = table.delete().where(
|
||||||
~ getattr(table.c, column).in_(subq))
|
~ getattr(table.c, column).in_(subq))
|
||||||
migrate_engine.execute(sql)
|
|
||||||
migrate_engine.execute(sql_del)
|
migrate_engine.execute(sql_del)
|
||||||
|
|
||||||
params = {'columns': [table.c[column]],
|
params = {'columns': [table.c[column]],
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
TABLES_012 = ['resource', 'sourceassoc', 'user',
|
||||||
|
'project', 'meter', 'source', 'alarm']
|
||||||
|
TABLES_027 = ['user', 'project', 'alarm']
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade(migrate_engine):
|
||||||
|
meta = sa.MetaData(bind=migrate_engine)
|
||||||
|
for table_name in TABLES_027:
|
||||||
|
try:
|
||||||
|
sa.Table('dump027_' + table_name, meta, autoload=True)\
|
||||||
|
.drop(checkfirst=True)
|
||||||
|
except sa.exc.NoSuchTableError:
|
||||||
|
pass
|
||||||
|
for table_name in TABLES_012:
|
||||||
|
try:
|
||||||
|
sa.Table('dump_' + table_name, meta, autoload=True)\
|
||||||
|
.drop(checkfirst=True)
|
||||||
|
except sa.exc.NoSuchTableError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade(migrate_engine):
|
||||||
|
pass
|
Loading…
Reference in New Issue