]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- don't add the parent attach event within _on_table_attach
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 15 Aug 2014 18:27:12 +0000 (14:27 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 15 Aug 2014 18:27:12 +0000 (14:27 -0400)
if we already have a table; this prevents reentrant calls and
we aren't supporting columns/etc being moved around between different parents

lib/sqlalchemy/sql/schema.py
test/sql/test_metadata.py

index 8099dca75948cebedf4ca8a5f5f8c401167df35c..c8e815d24473e67d7da4cafe27ca2ac4cc98402d 100644 (file)
@@ -1269,7 +1269,8 @@ class Column(SchemaItem, ColumnClause):
     def _on_table_attach(self, fn):
         if self.table is not None:
             fn(self, self.table)
-        event.listen(self, 'after_parent_attach', fn)
+        else:
+            event.listen(self, 'after_parent_attach', fn)
 
     def copy(self, **kw):
         """Create a copy of this ``Column``, unitialized.
index ff2755ab1dd5b2e4d43496b3b30d587cd9884e36..4a484dbac8b190fe1099562375409a806f3ee312 100644 (file)
@@ -349,6 +349,20 @@ class MetaDataTest(fixtures.TestBase, ComparesTables):
         assert t.c.x.default is s2
         assert m1._sequences['x_seq'] is s2
 
+
+    def test_sequence_attach_to_table(self):
+        m1 = MetaData()
+        s1 = Sequence("s")
+        t = Table('a', m1, Column('x', Integer, s1))
+        assert s1.metadata is m1
+
+    def test_sequence_attach_to_existing_table(self):
+        m1 = MetaData()
+        s1 = Sequence("s")
+        t = Table('a', m1, Column('x', Integer))
+        t.c.x._init_items(s1)
+        assert s1.metadata is m1
+
     def test_pickle_metadata_sequence_implicit(self):
         m1 = MetaData()
         Table('a', m1,