"""
stack = []
def visit(element):
- if element.__visit_name__ == 'binary' and \
+ if isinstance(element, (expression.FromClause,
+ expression._ScalarSelect)):
+ # we dont want to dig into correlated subqueries,
+ # those are just column elements by themselves
+ yield element
+ elif element.__visit_name__ == 'binary' and \
operators.is_comparison(element.operator):
stack.insert(0, element)
for l in visit(element.left):
]
)
+ def test_subquery(self):
+ a, b, c = column("a"), column("b"), column("c")
+ subq = select([c]).where(c == a).as_scalar()
+ expr = and_(a == b, b == subq)
+ self._assert_traversal(
+ expr,
+ [
+ (operators.eq, a, b),
+ (operators.eq, b, subq),
+ ]
+ )
+
class ClauseTest(fixtures.TestBase, AssertsCompiledSQL):
"""test copy-in-place behavior of various ClauseElements."""