From: Mike Bayer Date: Sun, 27 Jan 2013 16:24:45 +0000 (-0500) Subject: Fixed bug where :meth:`.Table.tometadata` would fail if a X-Git-Tag: rel_0_7_10~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=027eda4a34352ff8525119d841f06c73236e9723;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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. [ticket:2643] --- diff --git a/doc/build/changelog/changelog_07.rst b/doc/build/changelog/changelog_07.rst index cf802353aa..363e4cbee8 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: engine, bug :tickets: 2604 diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 8192a44232..154fb5f746 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -2145,7 +2145,7 @@ class ForeignKeyConstraint(Constraint): def copy(self, **kw): fkc = ForeignKeyConstraint( - [x.parent.name for x in self._elements.values()], + [x.parent.key for x in self._elements.values()], [x._get_colspec(**kw) 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 781d4a3da8..2545008933 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,