From: Mike Bayer Date: Thu, 28 Jan 2010 21:13:38 +0000 (+0000) Subject: - allow exists(s.as_scalar()) to work X-Git-Tag: rel_0_6beta1~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d1916eb6c95bb570467189e64c33e39d82bbaf8f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - allow exists(s.as_scalar()) to work --- diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index bf3d16e695..5f17c223c5 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 d5ba8fa9e7..8390c73424 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={})