From d768ec2c266ec462a8ff0b782516c494c451f2db Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 15 Aug 2014 14:27:12 -0400 Subject: [PATCH] - 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 --- lib/sqlalchemy/sql/schema.py | 3 ++- test/sql/test_metadata.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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, -- 2.47.3