From: Mike Bayer Date: Sat, 22 Mar 2014 23:55:00 +0000 (-0400) Subject: - Fixed regression from 0.8.3 as a result of :ticket:`2818` X-Git-Tag: rel_0_8_6~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8aa3d91d7ead47dc4b38ab34a40ea81d59dbe9b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - 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 --- diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 899be4d0eb..79295f9605 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -11,6 +11,15 @@ .. changelog:: :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 diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 81f49980e0..3bd6add8f1 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -2505,7 +2505,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 52f32bd9c5..8cba3558d1 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -1779,6 +1779,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):