]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed a regression introduced by :ticket:`2818` where the EXISTS
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 30 Oct 2013 14:34:31 +0000 (10:34 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 30 Oct 2013 14:34:31 +0000 (10:34 -0400)
query being generated would produce a "columns being replaced"
warning for a statement with two same-named columns,
as the internal SELECT wouldn't have use_labels set.

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

index 77e70c88addb48bb6806a089fc03de3ef4ac5218..0e5e788e0d2959dc33bf7b73f100c72b2ac478e9 100644 (file)
 .. changelog::
     :version: 0.8.4
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2818
+        :versions: 0.9.0b2
+
+        Fixed a regression introduced by :ticket:`2818` where the EXISTS
+        query being generated would produce a "columns being replaced"
+        warning for a statement with two same-named columns,
+        as the internal SELECT wouldn't have use_labels set.
+
     .. change::
         :tags: bug, postgresql
         :tickets: 2855
index 3df12c0a7a0f2f05b99c16e43ab28e5f03cdbf2d..c9e7d444bbfa41c5c984094c94d46666681c773b 100644 (file)
@@ -2485,7 +2485,7 @@ class Query(object):
         .. versionadded:: 0.8.1
 
         """
-        return sql.exists(self.statement.with_only_columns(['1']))
+        return sql.exists(self.with_labels().statement.with_only_columns(['1']))
 
     def count(self):
         """Return a count of rows this Query would return.
index e9d0f3a7ede4681dc988538bfe8ca4ad990e4b32..63e3c4bb90ee44fb71e27e0d2051c70a448a4fe0 100644 (file)
@@ -1726,6 +1726,7 @@ class AggregateTest(QueryTest):
 
 
 class ExistsTest(QueryTest, AssertsCompiledSQL):
+    __dialect__ = 'default'
 
     def test_exists(self):
         User = self.classes.User
@@ -1735,16 +1736,27 @@ class ExistsTest(QueryTest, AssertsCompiledSQL):
         self.assert_compile(sess.query(q1.exists()),
             'SELECT EXISTS ('
                 'SELECT 1 FROM users'
-            ') AS anon_1',
-            dialect=default.DefaultDialect()
+            ') AS anon_1'
         )
 
         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',
-            dialect=default.DefaultDialect()
+            ') AS anon_1'
+        )
+
+    def test_exists_col_warning(self):
+        User = self.classes.User
+        Address = self.classes.Address
+        sess = create_session()
+
+        q1 = sess.query(User, Address).filter(User.id == Address.user_id)
+        self.assert_compile(sess.query(q1.exists()),
+            'SELECT EXISTS ('
+                'SELECT 1 FROM users, addresses '
+                'WHERE users.id = addresses.user_id'
+            ') AS anon_1'
         )