diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-22 19:55:00 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-22 19:55:00 -0400 |
commit | 39a8e2ed375ed66c67a6fe24805ae0503f296e07 (patch) | |
tree | 2f4922e754f3dcc5f8fa628044ed6257eedc344b | |
parent | b00e15b50f83b4d939a15162fe53863bc15be4f0 (diff) | |
download | sqlalchemy-39a8e2ed375ed66c67a6fe24805ae0503f296e07.tar.gz |
- Fixed regression from 0.8.3 as a result of :ticket:`2818`
where :meth:`.Query.exists` wouldn't work on a query that only
had a :meth:`.Query.select_from` entry but no other entities.
re: #2818 fixes #2995
-rw-r--r-- | doc/build/changelog/changelog_08.rst | 9 | ||||
-rw-r--r-- | lib/sqlalchemy/orm/query.py | 9 | ||||
-rw-r--r-- | test/orm/test_query.py | 11 |
3 files changed, 28 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index a9cd75bae..7616a3f10 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -12,6 +12,15 @@ :version: 0.8.6 .. change:: + :tags: bug, orm + :tickets: 2995, + :versions: 0.9.4 + + Fixed regression from 0.8.3 as a result of :ticket:`2818` + where :meth:`.Query.exists` wouldn't work on a query that only + had a :meth:`.Query.select_from` entry but no other entities. + + .. change:: :tags: bug, general :tickets: 2986 :versions: 0.9.4 diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 0f5b8bf88..afcbf3500 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -2543,7 +2543,14 @@ class Query(object): .. versionadded:: 0.8.1 """ - return sql.exists(self.with_labels().statement.with_only_columns(['1'])) + + # .add_columns() for the case that we are a query().select_from(X), + # so that ".statement" can be produced (#2995) but also without + # omitting the FROM clause from a query(X) (#2818); + # .with_only_columns() after we have a core select() so that + # we get just "SELECT 1" without any entities. + return sql.exists(self.add_columns('1').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 0564e5fea..312a8bc72 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -1798,6 +1798,17 @@ class ExistsTest(QueryTest, AssertsCompiledSQL): ') AS anon_1' ) + def test_exists_w_select_from(self): + User = self.classes.User + sess = create_session() + + q1 = sess.query().select_from(User).exists() + self.assert_compile(sess.query(q1), + 'SELECT EXISTS (' + 'SELECT 1 FROM users' + ') AS anon_1' + ) + class CountTest(QueryTest): def test_basic(self): |