Exemplo n.º 1
0
    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]))
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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]))
Exemplo n.º 4
0
    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]))
Exemplo n.º 5
0
    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))
Exemplo n.º 6
0
    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))
Exemplo n.º 7
0
    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))
Exemplo n.º 8
0
    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))
Exemplo n.º 9
0
    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))
Exemplo n.º 10
0
    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))
Exemplo n.º 11
0
    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))
Exemplo n.º 12
0
    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))
Exemplo n.º 13
0
    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))
Exemplo n.º 14
0
    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))
Exemplo n.º 15
0
    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))
Exemplo n.º 16
0
    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))
Exemplo n.º 17
0
    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))