From 85317aead6208cd6377167fc7fcc4f57491d97f9 Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Wed, 6 Nov 2013 13:04:39 -0800 Subject: Add DB2 10.5 Support This patch adds the initial support for DB2 10.5 to migrate. It includes: 1. The dialect implementation for DB2. 2. The dialect registration with the visitor. 3. Code to parse the engine name in version.py. 4. A new dependency on ibm_db_sa in test-requirements.txt. 5. A connection string in test_db.cfg for ibm_db_sa. Part of blueprint add-db2-support Co-authored-by: Sheng Bo Hou Co-authored-by: Thuy Christenson Co-authored-by: Rahul Priyadarshi Change-Id: I745ec615487b1b06c5d1a09ea316f376d66ee4c0 --- migrate/tests/changeset/test_changeset.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'migrate/tests/changeset/test_changeset.py') diff --git a/migrate/tests/changeset/test_changeset.py b/migrate/tests/changeset/test_changeset.py index bd7f034..8b4a6be 100644 --- a/migrate/tests/changeset/test_changeset.py +++ b/migrate/tests/changeset/test_changeset.py @@ -231,18 +231,18 @@ class TestAddDropColumn(fixture.DB): col.drop() - @fixture.usedb(not_supported='mysql') + @fixture.usedb(not_supported=['mysql']) def test_check(self): """Can create columns with check constraint""" - col = Column('data', + col = Column('foo', Integer, - sqlalchemy.schema.CheckConstraint('data > 4')) + sqlalchemy.schema.CheckConstraint('foo > 4')) col.create(self.table) # check if constraint was added (cannot test on objects) - self.table.insert(values={'data': 5}).execute() + self.table.insert(values={'foo': 5}).execute() try: - self.table.insert(values={'data': 3}).execute() + self.table.insert(values={'foo': 3}).execute() except (sqlalchemy.exc.IntegrityError, sqlalchemy.exc.ProgrammingError): pass @@ -272,10 +272,11 @@ class TestAddDropColumn(fixture.DB): col.drop(self.table) # TODO: remove already attached columns with uniques, pks, fks .. - @fixture.usedb(not_supported='postgresql') + @fixture.usedb(not_supported=['ibm_db_sa', 'postgresql']) def test_drop_column_of_composite_index(self): # NOTE(rpodolyaka): postgresql automatically drops a composite index # if one of its columns is dropped + # NOTE(mriedem): DB2 does the same. self.table_idx.c.b.drop() reflected = Table(self.table_idx.name, MetaData(), autoload=True, @@ -441,7 +442,7 @@ class TestAddDropColumn(fixture.DB): # check remaining foreign key is there self.assertEqual([['r1']], self._actual_foreign_keys()) - + @fixture.usedb() def test_drop_with_complex_foreign_keys(self): from sqlalchemy.schema import ForeignKeyConstraint @@ -449,11 +450,16 @@ class TestAddDropColumn(fixture.DB): self.table.drop() self.meta.clear() - + + # NOTE(mriedem): DB2 does not currently support unique constraints + # on nullable columns, so the columns that are used to create the + # foreign keys here need to be non-nullable for testing with DB2 + # to work. + # create FK's target reftable = Table('tmp_ref', self.meta, Column('id', Integer, primary_key=True), - Column('jd', Integer), + Column('jd', Integer, nullable=False), UniqueConstraint('id','jd') ) if self.engine.has_table(reftable.name): @@ -464,8 +470,8 @@ class TestAddDropColumn(fixture.DB): self.table = Table( self.table_name, self.meta, Column('id', Integer, primary_key=True), - Column('r1', Integer), - Column('r2', Integer), + Column('r1', Integer, nullable=False), + Column('r2', Integer, nullable=False), ForeignKeyConstraint(['r1','r2'], [reftable.c.id,reftable.c.jd], name='test_fk') -- cgit v1.2.1