]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed Query.exists() method for the case, when query doesn't have any filters applied.
authorVladimir Magamedov <vladimir@magamedov.com>
Wed, 4 Sep 2013 08:43:40 +0000 (11:43 +0300)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 4 Sep 2013 15:46:28 +0000 (11:46 -0400)
Conflicts:
doc/build/changelog/changelog_09.rst

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/orm/query.py
test/orm/test_query.py

index 34fa58e0cd888609be19c275992f351f97126555..cfdd26ad597944d95322b5b4bf96b9faefed5063 100644 (file)
@@ -6,6 +6,13 @@
 .. changelog::
     :version: 0.8.3
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2818
+
+        Fixed bug where :meth:`.Query.exists` failed to work correctly
+        without any WHERE criterion.  Courtesy Vladimir Magamedov.
+
     .. change::
         :tags: bug, sql
         :tickets: 2811
index 8f835cd30e66de4619958a362707ca6e5e2034b3..499bdeb4d7fb672e60e33d103d11c52d68fe0849 100644 (file)
@@ -2492,7 +2492,7 @@ class Query(object):
         .. versionadded:: 0.8.1
 
         """
-        return sql.exists(self.with_entities('1').statement)
+        return sql.exists(self.statement.with_only_columns(['1']))
 
     def count(self):
         """Return a count of rows this Query would return.
index 5b3d9f28ab9e30f68fcc750f706f40660ee4ad79..30d32db9620287776deffad0d92059d0030cf725 100644 (file)
@@ -1737,8 +1737,17 @@ class ExistsTest(QueryTest, AssertsCompiledSQL):
     def test_exists(self):
         User = self.classes.User
         sess = create_session()
-        q1 = sess.query(User).filter(User.name == 'fred')
+
+        q1 = sess.query(User)
         self.assert_compile(sess.query(q1.exists()),
+            'SELECT EXISTS ('
+                'SELECT 1 FROM users'
+            ') AS anon_1',
+            dialect=default.DefaultDialect()
+        )
+
+        q2 = sess.query(User).filter(User.name == 'fred')
+        self.assert_compile(sess.query(q2.exists()),
             'SELECT EXISTS ('
                 'SELECT 1 FROM users WHERE users.name = :name_1'
             ') AS anon_1',