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:31 -0400
commiteee219bc7e0656fb8afa9879bda799ab1d71b285 (patch)
treefe070c72477a293d174e69a07a06431810bc1067
parentb1f7e8a3704f0eccbaba653eec9b43805b77ccb8 (diff)
downloadsqlalchemy-eee219bc7e0656fb8afa9879bda799ab1d71b285.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 77e70c88a..0e5e788e0 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 3df12c0a7..c9e7d444b 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -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.
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index e9d0f3a7e..63e3c4bb9 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -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'
)