--- /dev/null
+.. change::
+ :tags: bug, mssql
+ :tickets: 4228
+
+ Fixed bug in MSSQL reflection where when two same-named tables in different
+ schemas had same-named primary key constraints, foreign key constraints
+ referring to one of the tables would have their columns doubled, causing
+ errors. Pull request courtesy Sean Dunn.
C.c.constraint_name == RR.c.constraint_name,
R.c.constraint_name ==
RR.c.unique_constraint_name,
+ R.c.constraint_schema ==
+ RR.c.unique_constraint_schema,
C.c.ordinal_position == R.c.ordinal_position
),
order_by=[RR.c.constraint_name, R.c.ordinal_position]
key="column_name"),
Column("CONSTRAINT_NAME", CoerceUnicode,
key="constraint_name"),
+ Column("CONSTRAINT_SCHEMA", CoerceUnicode,
+ key="constraint_schema"),
Column("ORDINAL_POSITION", Integer,
key="ordinal_position"),
schema="INFORMATION_SCHEMA")
assert isinstance(t1.c.id.type, Integer)
assert isinstance(t1.c.data.type, types.NullType)
+ @testing.provide_metadata
+ def test_cross_schema_fk_pk_name_overlaps(self):
+ # test for issue #4228
+ metadata = self.metadata
+
+ Table(
+ "subject", metadata,
+ Column("id", Integer),
+ PrimaryKeyConstraint("id", name="subj_pk"),
+ schema=testing.config.test_schema,
+ )
+
+ Table(
+ "referrer", metadata,
+ Column("id", Integer, primary_key=True),
+ Column(
+ 'sid',
+ ForeignKey(
+ "%s.subject.id" % testing.config.test_schema,
+ name='fk_subject')
+ ),
+ schema=testing.config.test_schema
+ )
+
+ Table(
+ "subject", metadata,
+ Column("id", Integer),
+ PrimaryKeyConstraint("id", name="subj_pk"),
+ schema=testing.config.test_schema_2
+ )
+
+ metadata.create_all()
+
+ insp = inspect(testing.db)
+ eq_(
+ insp.get_foreign_keys("referrer", testing.config.test_schema),
+ [{
+ 'name': 'fk_subject',
+ 'constrained_columns': ['sid'],
+ 'referred_schema': 'test_schema',
+ 'referred_table': 'subject',
+ 'referred_columns': ['id']}]
+ )
+
@testing.provide_metadata
def test_db_qualified_items(self):
metadata = self.metadata