def test_change_deleted_column_type_to_boolean_type_custom(self): table_name = 'abc' table = Table(table_name, self.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(exception.ColumnError, utils.change_deleted_column_type_to_boolean, self.engine, table_name) fooColumn = Column('foo', CustomType()) utils.change_deleted_column_type_to_boolean(self.engine, table_name, foo=fooColumn) table = utils.get_table(self.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' 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, self.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(self.engine, table_name) utils.change_deleted_column_type_to_boolean(self.engine, table_name) insp = reflection.Inspector.from_engine(self.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): expected_types = {'mysql': mysql.TINYINT, 'ibm_db_sa': SmallInteger} table_name = 'abc' table = Table(table_name, self.meta, Column('id', Integer, primary_key=True), Column('deleted', Integer)) table.create() utils.change_deleted_column_type_to_boolean(self.engine, table_name) table = utils.get_table(self.engine, table_name) self.assertIsInstance(table.c.deleted.type, expected_types.get(self.engine.name, Boolean))
def test_change_deleted_column_type_to_boolean_with_fc(self): expected_types = {'mysql': mysql.TINYINT, 'ibm_db_sa': SmallInteger} table_name_1 = 'abc' table_name_2 = 'bcd' table_1 = Table(table_name_1, self.meta, Column('id', Integer, primary_key=True), Column('deleted', Integer)) table_1.create() table_2 = Table( table_name_2, self.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(self.engine, table_name_2) table = utils.get_table(self.engine, table_name_2) self.assertIsInstance(table.c.deleted.type, expected_types.get(self.engine.name, Boolean))
def test_change_deleted_column_type_to_boolean_with_fc(self): expected_types = {'mysql': mysql.TINYINT, 'ibm_db_sa': SmallInteger} table_name_1 = 'abc' table_name_2 = 'bcd' table_1 = Table(table_name_1, self.meta, Column('id', Integer, primary_key=True), Column('deleted', Integer)) table_1.create() table_2 = Table(table_name_2, self.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(self.engine, table_name_2) table = utils.get_table(self.engine, table_name_2) self.assertIsInstance(table.c.deleted.type, expected_types.get(self.engine.name, Boolean))