summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-08-15 14:27:12 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-08-15 14:27:12 -0400
commitd768ec2c266ec462a8ff0b782516c494c451f2db (patch)
tree72874a7fff8c8886da86bbe1fff4d519b9009d2d
parentb0411e80df13d347104a60c512aeb18b6479bb12 (diff)
downloadsqlalchemy-d768ec2c266ec462a8ff0b782516c494c451f2db.tar.gz
- 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
-rw-r--r--lib/sqlalchemy/sql/schema.py3
-rw-r--r--test/sql/test_metadata.py14
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index 8099dca75..c8e815d24 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 ff2755ab1..4a484dbac 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,