summaryrefslogtreecommitdiff
path: root/test/sql/generative.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql/generative.py')
-rw-r--r--test/sql/generative.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/sql/generative.py b/test/sql/generative.py
index f6b849e8a..4edf334f6 100644
--- a/test/sql/generative.py
+++ b/test/sql/generative.py
@@ -458,6 +458,32 @@ class ClauseAdapterTest(TestBase, AssertsCompiledSQL):
assert str(e) == "a_1.id = a.xxx_id"
+ def test_recursive_equivalents(self):
+ m = MetaData()
+ a = Table('a', m, Column('x', Integer), Column('y', Integer))
+ b = Table('b', m, Column('x', Integer), Column('y', Integer))
+ c = Table('c', m, Column('x', Integer), Column('y', Integer))
+
+ # force a recursion overflow, by linking a.c.x<->c.c.x, and
+ # asking for a nonexistent col. corresponding_column should prevent
+ # endless depth.
+ adapt = sql_util.ClauseAdapter( b, equivalents= {a.c.x: set([ c.c.x]), c.c.x:set([a.c.x])})
+ assert adapt._corresponding_column(a.c.x, False) is None
+
+ def test_multilevel_equivalents(self):
+ m = MetaData()
+ a = Table('a', m, Column('x', Integer), Column('y', Integer))
+ b = Table('b', m, Column('x', Integer), Column('y', Integer))
+ c = Table('c', m, Column('x', Integer), Column('y', Integer))
+
+ alias = select([a]).select_from(a.join(b, a.c.x==b.c.x)).alias()
+
+ # two levels of indirection from c.x->b.x->a.x, requires recursive
+ # corresponding_column call
+ adapt = sql_util.ClauseAdapter(alias, equivalents= {b.c.x: set([ a.c.x]), c.c.x:set([b.c.x])})
+ assert adapt._corresponding_column(a.c.x, False) is alias.c.x
+ assert adapt._corresponding_column(c.c.x, False) is alias.c.x
+
def test_join_to_alias(self):
metadata = MetaData()
a = Table('a', metadata,