summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-10-30 10:34:31 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-10-30 10:34:57 -0400
commit2576b5cdfb09fd1fb28e083e0a41f7596c6a1100 (patch)
tree1bada72a7a576cc548b99a7eac33c44335c72c5e
parentac73cb304ae4ae221e99f9308ff69a2f566b4602 (diff)
downloadsqlalchemy-2576b5cdfb09fd1fb28e083e0a41f7596c6a1100.tar.gz
- 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.
-rw-r--r--doc/build/changelog/changelog_08.rst10
-rw-r--r--lib/sqlalchemy/orm/query.py2
-rw-r--r--test/orm/test_query.py20
3 files changed, 27 insertions, 5 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index c859f8260..cce687af3 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -11,6 +11,16 @@
: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
:versions: 0.9.0b2
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 499bdeb4d..28388b969 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -2492,7 +2492,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.
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index 30d32db96..6c1d97173 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -1733,6 +1733,7 @@ class AggregateTest(QueryTest):
class ExistsTest(QueryTest, AssertsCompiledSQL):
+ __dialect__ = 'default'
def test_exists(self):
User = self.classes.User
@@ -1742,16 +1743,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'
)