Merge "Add sqlalchemy migration utils.create_shadow_table method"
This commit is contained in:
@@ -19,6 +19,7 @@ from migrate.changeset import UniqueConstraint
|
|||||||
from sqlalchemy import Integer, DateTime, String
|
from sqlalchemy import Integer, DateTime, String
|
||||||
from sqlalchemy import MetaData, Table, Column
|
from sqlalchemy import MetaData, Table, Column
|
||||||
from sqlalchemy.exc import NoSuchTableError
|
from sqlalchemy.exc import NoSuchTableError
|
||||||
|
from sqlalchemy.exc import OperationalError
|
||||||
from sqlalchemy.exc import SAWarning
|
from sqlalchemy.exc import SAWarning
|
||||||
from sqlalchemy.sql import select
|
from sqlalchemy.sql import select
|
||||||
from sqlalchemy.types import UserDefinedType
|
from sqlalchemy.types import UserDefinedType
|
||||||
@@ -310,5 +311,83 @@ class TestMigrationUtils(test_migrations.BaseMigrationTestCase):
|
|||||||
Column('a', Integer),
|
Column('a', Integer),
|
||||||
Column('c', CustomType))
|
Column('c', CustomType))
|
||||||
shadow_table.create()
|
shadow_table.create()
|
||||||
|
|
||||||
self.assertTrue(utils.check_shadow_table(engine, table_name))
|
self.assertTrue(utils.check_shadow_table(engine, table_name))
|
||||||
|
|
||||||
|
def test_create_shadow_table_by_table_instance(self):
|
||||||
|
table_name = 'abc'
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
table = Table(table_name, meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('a', Integer),
|
||||||
|
Column('b', String(256)))
|
||||||
|
table.create()
|
||||||
|
utils.create_shadow_table(engine, table=table)
|
||||||
|
self.assertTrue(utils.check_shadow_table(engine, table_name))
|
||||||
|
|
||||||
|
def test_create_shadow_table_by_name(self):
|
||||||
|
table_name = 'abc'
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
|
||||||
|
table = Table(table_name, meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('a', Integer),
|
||||||
|
Column('b', String(256)))
|
||||||
|
table.create()
|
||||||
|
utils.create_shadow_table(engine, table_name=table_name)
|
||||||
|
self.assertTrue(utils.check_shadow_table(engine, table_name))
|
||||||
|
|
||||||
|
def test_create_shadow_table_not_supported_type(self):
|
||||||
|
table_name = 'abc'
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
|
||||||
|
table = Table(table_name, meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('a', CustomType))
|
||||||
|
table.create()
|
||||||
|
self.assertRaises(exception.NovaException,
|
||||||
|
utils.create_shadow_table,
|
||||||
|
engine, table_name=table_name)
|
||||||
|
|
||||||
|
utils.create_shadow_table(engine, table_name=table_name,
|
||||||
|
a=Column('a', CustomType()))
|
||||||
|
self.assertTrue(utils.check_shadow_table(engine, table_name))
|
||||||
|
|
||||||
|
def test_create_shadow_both_table_and_table_name_are_none(self):
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
self.assertRaises(exception.NovaException,
|
||||||
|
utils.create_shadow_table, engine)
|
||||||
|
|
||||||
|
def test_create_shadow_both_table_and_table_name_are_specified(self):
|
||||||
|
table_name = 'abc'
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
table = Table(table_name, meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('a', Integer))
|
||||||
|
table.create()
|
||||||
|
self.assertRaises(exception.NovaException,
|
||||||
|
utils.create_shadow_table,
|
||||||
|
engine, table=table, table_name=table_name)
|
||||||
|
|
||||||
|
def test_create_duplicate_shadow_table(self):
|
||||||
|
table_name = 'abc'
|
||||||
|
for key, engine in self.engines.items():
|
||||||
|
meta = MetaData()
|
||||||
|
meta.bind = engine
|
||||||
|
table = Table(table_name, meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('a', Integer))
|
||||||
|
table.create()
|
||||||
|
utils.create_shadow_table(engine, table_name=table_name)
|
||||||
|
self.assertRaises(OperationalError,
|
||||||
|
utils.create_shadow_table,
|
||||||
|
engine, table_name=table_name)
|
||||||
|
Reference in New Issue
Block a user