]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed bug where :meth:`.Table.tometadata` would fail if a
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Jan 2013 16:24:45 +0000 (11:24 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Jan 2013 16:24:45 +0000 (11:24 -0500)
:class:`.Column` had both a foreign key as well as an
alternate ".key" name for the column.
[ticket:2643]

doc/build/changelog/changelog_07.rst
lib/sqlalchemy/schema.py
test/sql/test_metadata.py

index cf802353aaeaaf652e1818aa90fd913a07be71c6..363e4cbee8dd1f49f96bcefc3d3e176e96a518db 100644 (file)
@@ -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
index 8192a44232331a90bd8a7c5034a86f7060785d18..154fb5f74655ca542ba1beea0d7f10880f52a329 100644 (file)
@@ -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,
index 781d4a3da8f700e029b4ee923bf137c16284ba3c..2545008933deb67289520cd0968edc01c449cae7 100644 (file)
@@ -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,