]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add bindparams support for baked Result count() method
authorMalaclypse The Younger <pat-androidsrc@flyingcarsandstuff.com>
Thu, 30 Mar 2017 14:54:14 +0000 (10:54 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 30 Mar 2017 16:34:41 +0000 (12:34 -0400)
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)

doc/build/changelog/changelog_11.rst
lib/sqlalchemy/ext/baked.py
test/ext/test_baked.py

index 3c1d609f0b3085642724a03bd01e0a78d67ebad4..ce704d7b7b31bd9912b9fa6245049c957f16e564 100644 (file)
 .. 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
index 0904666186a14cd176f1cf58464e3242404fd026..68bd468b97e90ebd3f5d1705c4375e006b9df686 100644 (file)
@@ -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
index 4a1f086a507d59e95e87530efd9b6f35f4a24918..a5eb31495056b7fd8725ac7c40839153d780ab70 100644 (file)
@@ -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."""