From: Mike Bayer Date: Fri, 15 Aug 2014 18:27:12 +0000 (-0400) Subject: - don't add the parent attach event within _on_table_attach X-Git-Tag: rel_1_0_0b1~224 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d768ec2c266ec462a8ff0b782516c494c451f2db;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - don't add the parent attach event within _on_table_attach if we already have a table; this prevents reentrant calls and we aren't supporting columns/etc being moved around between different parents --- diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 8099dca759..c8e815d244 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -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. diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index ff2755ab1d..4a484dbac8 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -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,