summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-01-28 21:13:38 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-01-28 21:13:38 +0000
commitd1916eb6c95bb570467189e64c33e39d82bbaf8f (patch)
treec53208c3b64f5017842d67eef0ab5060d607837c
parent0ca4107c3ed9caff2f6584e4b7215294a6409790 (diff)
downloadsqlalchemy-d1916eb6c95bb570467189e64c33e39d82bbaf8f.tar.gz
- allow exists(s.as_scalar()) to work
-rw-r--r--lib/sqlalchemy/sql/expression.py2
-rw-r--r--test/sql/test_select.py10
2 files changed, 11 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index bf3d16e69..5f17c223c 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -2680,7 +2680,7 @@ class _Exists(_UnaryExpression):
_from_objects = []
def __init__(self, *args, **kwargs):
- if args and isinstance(args[0], _SelectBaseMixin):
+ if args and isinstance(args[0], (_SelectBaseMixin, _ScalarSelect)):
s = args[0]
else:
if not args:
diff --git a/test/sql/test_select.py b/test/sql/test_select.py
index d5ba8fa9e..8390c7342 100644
--- a/test/sql/test_select.py
+++ b/test/sql/test_select.py
@@ -279,6 +279,16 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A
self.assert_compile(s, "SELECT t.a WHERE t.a = t2.d")
def test_exists(self):
+ s = select([table1.c.myid]).where(table1.c.myid==5)
+
+ self.assert_compile(exists(s),
+ "EXISTS (SELECT mytable.myid FROM mytable WHERE mytable.myid = :myid_1)"
+ )
+
+ self.assert_compile(exists(s.as_scalar()),
+ "EXISTS (SELECT mytable.myid FROM mytable WHERE mytable.myid = :myid_1)"
+ )
+
self.assert_compile(exists([table1.c.myid], table1.c.myid==5).select(), "SELECT EXISTS (SELECT mytable.myid FROM mytable WHERE mytable.myid = :myid_1)", params={'mytable_myid':5})
self.assert_compile(select([table1, exists([1], from_obj=table2)]), "SELECT mytable.myid, mytable.name, mytable.description, EXISTS (SELECT 1 FROM myothertable) FROM mytable", params={})