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_with_fc(self): 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) if self.engine.name != "mysql": expected_type = Boolean else: expected_type = mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
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_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_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_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_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(self): 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) if self.engine.name != "mysql": expected_type = Boolean else: expected_type = mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
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(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(self): 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) if self.engine.name != "mysql": expected_type = Boolean else: expected_type = mysql.TINYINT self.assertTrue(isinstance(table.c.deleted.type, expected_type))
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))
def test_change_deleted_column_type_to_boolean_with_fc(self): 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) if self.engine.name != "mysql": expected_type = Boolean else: expected_type = 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_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))