From e26b28224d7c1745a8a2892372e1f5a8862e792c Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 27 Jan 2013 11:23:59 -0500 Subject: [PATCH] Fixed bug where :meth:`.Table.tometadata` would fail if a :class:`.Column` had both a foreign key as well as an alternate ".key" name for the column. Also in 0.7.10. [ticket:2643] --- doc/build/changelog/changelog_07.rst | 8 ++++++++ doc/build/changelog/changelog_08.rst | 8 ++++++++ lib/sqlalchemy/schema.py | 2 +- test/sql/test_metadata.py | 12 ++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/doc/build/changelog/changelog_07.rst b/doc/build/changelog/changelog_07.rst index cb88cd9408..b1e2252a8b 100644 --- a/doc/build/changelog/changelog_07.rst +++ b/doc/build/changelog/changelog_07.rst @@ -8,6 +8,14 @@ :version: 0.7.10 :released: + .. change:: + :tags: sql, bug + :tickets: 2643 + + Fixed bug where :meth:`.Table.tometadata` would fail if a + :class:`.Column` had both a foreign key as well as an + alternate ".key" name for the column. + .. change:: :tags: mssql, bug :tickets: 2638 diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index e0303e2faf..b17a7e7d17 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -6,6 +6,14 @@ .. changelog:: :version: 0.8.0 + .. change:: + :tags: sql, bug + :tickets: 2643 + + Fixed bug where :meth:`.Table.tometadata` would fail if a + :class:`.Column` had both a foreign key as well as an + alternate ".key" name for the column. Also in 0.7.10. + .. change:: :tags: sql, bug :tickets: 2629 diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 3e8f4ea82a..b9ee55abf8 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -2280,7 +2280,7 @@ class ForeignKeyConstraint(Constraint): def copy(self, schema=None, **kw): fkc = ForeignKeyConstraint( - [x.parent.name for x in self._elements.values()], + [x.parent.key for x in self._elements.values()], [x._get_colspec(schema=schema) for x in self._elements.values()], name=self.name, onupdate=self.onupdate, diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 4627a96627..f8256bca7f 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -349,6 +349,18 @@ class MetaDataTest(fixtures.TestBase, ComparesTables): finally: meta.drop_all(testing.db) + def test_col_key_fk_parent_tometadata(self): + # test #2643 + m1 = MetaData() + a = Table('a', m1, Column('x', Integer)) + b = Table('b', m1, Column('x', Integer, ForeignKey('a.x'), key='y')) + assert b.c.y.references(a.c.x) + + m2 = MetaData() + b2 = b.tometadata(m2) + a2 = a.tometadata(m2) + assert b2.c.y.references(a2.c.x) + def test_pickle_metadata_sequence_restated(self): m1 = MetaData() Table('a', m1, -- 2.47.2