def test_change_deleted_column_type_doesnt_drop_index(self): table_name = 'abc' for key, engine in self.engines.items(): meta = MetaData(bind=engine) indexes = { 'idx_a_deleted': ['a', 'deleted'], 'idx_b_deleted': ['b', 'deleted'], 'idx_a': ['a'] } index_instances = [Index(name, *columns) for name, columns in indexes.iteritems()] table = Table(table_name, meta, Column('id', Integer, primary_key=True), Column('a', String(255)), Column('b', String(255)), Column('deleted', Boolean), *index_instances) table.create() utils.change_deleted_column_type_to_id_type(engine, table_name) utils.change_deleted_column_type_to_boolean(engine, table_name) insp = reflection.Inspector.from_engine(engine) real_indexes = insp.get_indexes(table_name) self.assertEqual(len(real_indexes), 3) for index in real_indexes: name = index['name'] self.assertIn(name, indexes) self.assertEqual(set(index['column_names']), set(indexes[name]))
def test_change_deleted_column_type_to_boolean_type_custom(self): table_name = 'abc' engine = self.engines['sqlite'] meta = MetaData() meta.bind = engine table = Table(table_name, meta, Column('id', Integer, primary_key=True), Column('foo', CustomType), Column('deleted', Integer)) table.create() # reflection of custom types has been fixed upstream if SA_VERSION < (0, 9, 0): self.assertRaises(utils.ColumnError, utils.change_deleted_column_type_to_boolean, engine, table_name) fooColumn = Column('foo', CustomType()) utils.change_deleted_column_type_to_boolean(engine, table_name, foo=fooColumn) table = utils.get_table(engine, table_name) # NOTE(boris-42): There is no way to check has foo type CustomType. # but sqlalchemy will set it to NullType. This has # been fixed upstream in recent SA versions if SA_VERSION < (0, 9, 0): self.assertTrue(isinstance(table.c.foo.type, NullType)) self.assertTrue(isinstance(table.c.deleted.type, Boolean))
def test_change_deleted_column_type_does_not_drop_index(self): table_name = 'abc' for engine in self.engines.values(): meta = MetaData(bind=engine) indexes = { 'idx_a_deleted': ['a', 'deleted'], 'idx_b_deleted': ['b', 'deleted'], 'idx_a': ['a'] } index_instances = [Index(name, *columns) for name, columns in six.iteritems(indexes)] table = Table(table_name, meta, Column('id', Integer, primary_key=True), Column('a', String(255)), Column('b', String(255)), Column('deleted', Boolean), *index_instances) table.create() utils.change_deleted_column_type_to_id_type(engine, table_name) utils.change_deleted_column_type_to_boolean(engine, table_name) insp = reflection.Inspector.from_engine(engine) real_indexes = insp.get_indexes(table_name) self.assertEqual(len(real_indexes), 3) for index in real_indexes: name = index['name'] self.assertIn(name, indexes) self.assertEqual(set(index['column_names']), set(indexes[name]))
def test_change_deleted_column_type_doesnt_drop_index(self): table_name = "abc" for key, engine in self.engines.items(): meta = MetaData(bind=engine) indexes = {"idx_a_deleted": ["a", "deleted"], "idx_b_deleted": ["b", "deleted"], "idx_a": ["a"]} index_instances = [Index(name, *columns) for name, columns in indexes.iteritems()] table = Table( table_name, meta, Column("id", Integer, primary_key=True), Column("a", String(255)), Column("b", String(255)), Column("deleted", Boolean), *index_instances ) table.create() utils.change_deleted_column_type_to_id_type(engine, table_name) utils.change_deleted_column_type_to_boolean(engine, table_name) insp = reflection.Inspector.from_engine(engine) real_indexes = insp.get_indexes(table_name) self.assertEqual(len(real_indexes), 3) for index in real_indexes: name = index["name"] self.assertIn(name, indexes) self.assertEqual(set(index["column_names"]), set(indexes[name]))
def test_change_deleted_column_type_to_boolean(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("deleted", Integer)) table.create() utils.change_deleted_column_type_to_boolean(engine, table_name) table = utils.get_table(engine, table_name) expected_type = Boolean if key != "mysql" else mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
def test_change_deleted_column_type_to_boolean(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('deleted', Integer)) table.create() utils.change_deleted_column_type_to_boolean(engine, table_name) table = utils.get_table(engine, table_name) expected_type = Boolean if key != "mysql" else mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
def test_change_deleted_column_type_to_boolean_with_fc(self): table_name_1 = 'abc' table_name_2 = 'bcd' for key, engine in self.engines.items(): meta = MetaData() meta.bind = engine table_1 = Table(table_name_1, meta, Column('id', Integer, primary_key=True), Column('deleted', Integer)) table_1.create() table_2 = Table(table_name_2, meta, Column('id', Integer, primary_key=True), Column('foreign_id', Integer, ForeignKey('%s.id' % table_name_1)), Column('deleted', Integer)) table_2.create() utils.change_deleted_column_type_to_boolean(engine, table_name_2) table = utils.get_table(engine, table_name_2) expected_type = Boolean if key != "mysql" else mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
def test_change_deleted_column_type_to_boolean_type_custom(self): table_name = 'abc' engine = self.engines['sqlite'] meta = MetaData() meta.bind = engine table = Table(table_name, meta, Column('id', Integer, primary_key=True), Column('foo', CustomType), Column('deleted', Integer)) table.create() self.assertRaises(utils.ColumnError, utils.change_deleted_column_type_to_boolean, engine, table_name) fooColumn = Column('foo', CustomType()) utils.change_deleted_column_type_to_boolean(engine, table_name, foo=fooColumn) table = utils.get_table(engine, table_name) # NOTE(boris-42): There is no way to check has foo type CustomType. # but sqlalchemy will set it to NullType. self.assertTrue(isinstance(table.c.foo.type, NullType)) self.assertTrue(isinstance(table.c.deleted.type, Boolean))
def test_change_deleted_column_type_to_boolean_type_custom(self): table_name = 'abc' engine = self.engines['sqlite'] meta = MetaData() meta.bind = engine table = Table(table_name, meta, Column('id', Integer, primary_key=True), Column('foo', CustomType), Column('deleted', Integer)) table.create() self.assertRaises(exception.OpenstackException, utils.change_deleted_column_type_to_boolean, engine, table_name) fooColumn = Column('foo', CustomType()) utils.change_deleted_column_type_to_boolean(engine, table_name, foo=fooColumn) table = utils.get_table(engine, table_name) # NOTE(boris-42): There is no way to check has foo type CustomType. # but sqlalchemy will set it to NullType. self.assertTrue(isinstance(table.c.foo.type, NullType)) self.assertTrue(isinstance(table.c.deleted.type, Boolean))
def test_change_deleted_column_type_to_boolean_type_custom(self): table_name = "abc" engine = self.engines["sqlite"] meta = MetaData() meta.bind = engine table = Table( table_name, meta, Column("id", Integer, primary_key=True), Column("foo", CustomType), Column("deleted", Integer), ) table.create() self.assertRaises(utils.ColumnError, utils.change_deleted_column_type_to_boolean, engine, table_name) fooColumn = Column("foo", CustomType()) utils.change_deleted_column_type_to_boolean(engine, table_name, foo=fooColumn) table = utils.get_table(engine, table_name) # NOTE(boris-42): There is no way to check has foo type CustomType. # but sqlalchemy will set it to NullType. self.assertTrue(isinstance(table.c.foo.type, NullType)) self.assertTrue(isinstance(table.c.deleted.type, Boolean))