From: Malaclypse The Younger Date: Thu, 30 Mar 2017 14:54:14 +0000 (-0400) Subject: Add bindparams support for baked Result count() method X-Git-Tag: rel_1_1_8~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23585b842cc31b6866447f444fb43794af31cda9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Add bindparams support for baked Result count() method Added support for bound parameters, e.g. those normally set up via :meth:`.Query.params`, to the :meth:`.baked.Result.count` method. Previously, support for parameters were omitted. Pull request courtesy Pat Deegan. Change-Id: I8c33548cf2a483699767e459731694c8cadebff6 Pull-request: https://github.com/zzzeek/sqlalchemy/pull/350 (cherry picked from commit 74f6c21747d07a8cf9902900df9280a84aadc2bb) --- diff --git a/doc/build/changelog/changelog_11.rst b/doc/build/changelog/changelog_11.rst index 3c1d609f0b..ce704d7b7b 100644 --- a/doc/build/changelog/changelog_11.rst +++ b/doc/build/changelog/changelog_11.rst @@ -21,6 +21,15 @@ .. changelog:: :version: 1.1.8 + .. change:: + :tags: bug, ext + :versions: 1.2.0b1 + + Added support for bound parameters, e.g. those normally set up + via :meth:`.Query.params`, to the :meth:`.baked.Result.count` + method. Previously, support for parameters were omitted. Pull request + courtesy Pat Deegan. + .. change:: :tags: bug, postgresql :versions: 1.2.0b1 diff --git a/lib/sqlalchemy/ext/baked.py b/lib/sqlalchemy/ext/baked.py index 0904666186..68bd468b97 100644 --- a/lib/sqlalchemy/ext/baked.py +++ b/lib/sqlalchemy/ext/baked.py @@ -268,7 +268,7 @@ class Result(object): col = func.count(literal_column('*')) bq = self.bq.with_criteria(lambda q: q.from_self(col)) - return bq.for_session(self.session).scalar() + return bq.for_session(self.session).params(self._params).scalar() def scalar(self): """Return the first element of the first result or None diff --git a/test/ext/test_baked.py b/test/ext/test_baked.py index 4a1f086a50..a5eb314950 100644 --- a/test/ext/test_baked.py +++ b/test/ext/test_baked.py @@ -288,6 +288,34 @@ class LikeQueryTest(BakedTest): set([(8, 'ed'), (9, 'fred')]) ) + def test_count_with_bindparams(self): + User = self.classes.User + + bq = self.bakery(lambda s: s.query(User)) + + sess = Session() + + eq_( + bq(sess).count(), + 4 + ) + + bq += lambda q: q.filter(User.name == bindparam("uname")) + # calling with *args + eq_( + bq(sess).params(uname='fred').count(), 1 + ) + # with multiple params, the **kwargs will be used + bq += lambda q: q.filter(User.id == bindparam("anid")) + eq_( + bq(sess).params(uname='fred', anid=9).count(), 1 + ) + eq_( + # wrong id, so 0 results: + bq(sess).params(uname='fred', anid=8).count(), 0 + ) + + def test_get_pk_w_null(self): """test the re-implementation of logic to do get with IS NULL."""