)
metadata_indexes = set(metadata_table.indexes)
- # 1b. ... and from connection
- conn_uniques = []
- if conn_table is not None and hasattr(inspector, "get_unique_constraints"):
- try:
- conn_uniques = inspector.get_unique_constraints(tname,
- schema=schema)
- except (NotImplementedError, NoSuchTableError):
- pass
-
- conn_indexes = []
+ conn_uniques = conn_indexes = frozenset()
if conn_table is not None:
+ # 1b. ... and from connection, if the table exists
+ if hasattr(inspector, "get_unique_constraints"):
+ try:
+ conn_uniques = inspector.get_unique_constraints(
+ tname, schema=schema)
+ except NotImplementedError:
+ pass
try:
conn_indexes = inspector.get_indexes(tname, schema=schema)
- except NoSuchTableError:
+ except NotImplementedError:
pass
- # 2. convert conn-level objects from raw inspector records
- # into schema objects
- conn_uniques = set(_make_unique_constraint(uq_def, conn_table)
- for uq_def in conn_uniques)
- conn_indexes = set(_make_index(ix, conn_table) for ix in conn_indexes)
+ # 2. convert conn-level objects from raw inspector records
+ # into schema objects
+ conn_uniques = set(_make_unique_constraint(uq_def, conn_table)
+ for uq_def in conn_uniques)
+ conn_indexes = set(_make_index(ix, conn_table) for ix in conn_indexes)
# 3. give the dialect a chance to omit indexes and constraints that
# we know are either added implicitly by the DB or that the DB
eq_(diffs, [])
- def _fixture(self, m1, m2):
+ def _fixture(self, m1, m2, include_schemas=False):
self.metadata, model_metadata = m1, m2
self.metadata.create_all(self.bind)
autogenerate._produce_net_changes(connection, model_metadata, diffs,
autogen_context,
object_filters=_default_object_filters,
+ include_schemas=include_schemas
)
return diffs
def _get_bind(cls):
return db_for_dialect('postgresql')
+ def test_idx_added_schema(self):
+ m1 = MetaData()
+ m2 = MetaData()
+ Table('add_ix', m1, Column('x', String(50)), schema="test_schema")
+ Table('add_ix', m2, Column('x', String(50)),
+ Index('ix_1', 'x'), schema="test_schema")
+
+ diffs = self._fixture(m1, m2, include_schemas=True)
+ eq_(diffs[0][0], "add_index")
+ eq_(diffs[0][1].name, 'ix_1')
+
+ def test_idx_unchanged_schema(self):
+ m1 = MetaData()
+ m2 = MetaData()
+ Table('add_ix', m1, Column('x', String(50)), Index('ix_1', 'x'),
+ schema="test_schema")
+ Table('add_ix', m2, Column('x', String(50)),
+ Index('ix_1', 'x'), schema="test_schema")
+
+ diffs = self._fixture(m1, m2, include_schemas=True)
+ eq_(diffs, [])
+
+ def test_uq_added_schema(self):
+ m1 = MetaData()
+ m2 = MetaData()
+ Table('add_uq', m1, Column('x', String(50)), schema="test_schema")
+ Table('add_uq', m2, Column('x', String(50)),
+ UniqueConstraint('x', name='ix_1'), schema="test_schema")
+
+ diffs = self._fixture(m1, m2, include_schemas=True)
+ eq_(diffs[0][0], "add_constraint")
+ eq_(diffs[0][1].name, 'ix_1')
+
+ def test_uq_unchanged_schema(self):
+ m1 = MetaData()
+ m2 = MetaData()
+ Table('add_uq', m1, Column('x', String(50)),
+ UniqueConstraint('x', name='ix_1'),
+ schema="test_schema")
+ Table('add_uq', m2, Column('x', String(50)),
+ UniqueConstraint('x', name='ix_1'),
+ schema="test_schema")
+
+ diffs = self._fixture(m1, m2, include_schemas=True)
+ eq_(diffs, [])
+
+ def test_same_tname_two_schemas(self):
+ m1 = MetaData()
+ m2 = MetaData()
+
+ Table('add_ix', m1, Column('x', String(50)), Index('ix_1', 'x'))
+
+ Table('add_ix', m2, Column('x', String(50)), Index('ix_1', 'x'))
+ Table('add_ix', m2, Column('x', String(50)), schema="test_schema")
+
+ diffs = self._fixture(m1, m2, include_schemas=True)
+ eq_(diffs[0][0], "add_table")
+ eq_(len(diffs), 1)
class MySQLUniqueIndexTest(AutogenerateUniqueIndexTest):
reports_unnamed_constraints = True