summaryrefslogtreecommitdiff
path: root/test/engine
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-08-28 17:25:44 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-08-28 17:26:11 -0400
commit573b542747103cd427db6770d29441dade4a278e (patch)
tree9669bf168a8e28bd1fd42f141ed5f3b279137ac6 /test/engine
parentbedfeee764dc2f3f9d6193a71c688dbdc025d218 (diff)
downloadsqlalchemy-573b542747103cd427db6770d29441dade4a278e.tar.gz
Fixed bug where using the ``column_reflect`` event to change the ``.key``
of the incoming :class:`.Column` would prevent primary key constraints, indexes, and foreign key constraints from being correctly reflected. Also in 0.8.3. [ticket:2811] Conflicts: doc/build/changelog/changelog_09.rst
Diffstat (limited to 'test/engine')
-rw-r--r--test/engine/test_reflection.py38
1 files changed, 34 insertions, 4 deletions
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py
index c490efff2..5aa1f7a3d 100644
--- a/test/engine/test_reflection.py
+++ b/test/engine/test_reflection.py
@@ -1426,6 +1426,12 @@ class ColumnEventsTest(fixtures.TestBase):
cls.metadata,
Column('x', sa.Integer, primary_key=True),
)
+ cls.related = Table(
+ 'related',
+ cls.metadata,
+ Column('q', sa.Integer, sa.ForeignKey('to_reflect.x'))
+ )
+ sa.Index("some_index", cls.to_reflect.c.x)
cls.metadata.create_all(testing.db)
@classmethod
@@ -1435,7 +1441,7 @@ class ColumnEventsTest(fixtures.TestBase):
def teardown(self):
events.SchemaEventTarget.dispatch._clear()
- def _do_test(self, col, update, assert_):
+ def _do_test(self, col, update, assert_, tablename="to_reflect"):
# load the actual Table class, not the test
# wrapper
from sqlalchemy.schema import Table
@@ -1445,22 +1451,46 @@ class ColumnEventsTest(fixtures.TestBase):
if column_info['name'] == col:
column_info.update(update)
- t = Table('to_reflect', m, autoload=True, listeners=[
+ t = Table(tablename, m, autoload=True, listeners=[
('column_reflect', column_reflect),
])
assert_(t)
m = MetaData(testing.db)
event.listen(Table, 'column_reflect', column_reflect)
- t2 = Table('to_reflect', m, autoload=True)
+ t2 = Table(tablename, m, autoload=True)
assert_(t2)
def test_override_key(self):
+ def assertions(table):
+ eq_(table.c.YXZ.name, "x")
+ eq_(set(table.primary_key), set([table.c.YXZ]))
+ idx = list(table.indexes)[0]
+ eq_(idx.columns, [table.c.YXZ])
+
self._do_test(
"x", {"key": "YXZ"},
- lambda table: eq_(table.c.YXZ.name, "x")
+ assertions
)
+ def test_override_key_fk(self):
+ m = MetaData(testing.db)
+ def column_reflect(insp, table, column_info):
+
+ if column_info['name'] == 'q':
+ column_info['key'] = 'qyz'
+ elif column_info['name'] == 'x':
+ column_info['key'] = 'xyz'
+
+ to_reflect = Table("to_reflect", m, autoload=True, listeners=[
+ ('column_reflect', column_reflect),
+ ])
+ related = Table("related", m, autoload=True, listeners=[
+ ('column_reflect', column_reflect),
+ ])
+
+ assert related.c.qyz.references(to_reflect.c.xyz)
+
def test_override_type(self):
def assert_(table):
assert isinstance(table.c.x.type, sa.String)