]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- also with dynamic, implemented correct count() behavior as well
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 7 Dec 2007 16:31:12 +0000 (16:31 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 7 Dec 2007 16:31:12 +0000 (16:31 +0000)
as other helper methods.

CHANGES
lib/sqlalchemy/orm/dynamic.py
test/orm/dynamic.py

diff --git a/CHANGES b/CHANGES
index ae64f385cbe5e73e0b7c644785ca4d02db18e768..2e1160c20152791d01270515b2c90d45df92ba71 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -57,6 +57,9 @@ CHANGES
      that of regular relations.  if passive_deletes flag (also just added)
      is not set, a delete of the parent item will trigger a full load of 
      the child items so that they can be deleted or updated accordingly.
+
+   - also with dynamic, implemented correct count() behavior as well
+     as other helper methods.
      
    - query.get() and query.load() do not take existing filter or other
      criterion into account; these methods *always* look up the given id
index f5662a933d4f399bcfac89cfcc5288e2c6658d47..e55703c4201b538976079e8c0b4f78bbf5233f56 100644 (file)
@@ -74,7 +74,11 @@ class AppenderQuery(Query):
             return None
         else:
             return sess
-            
+    
+    def _get_session(self):
+        return self.__session()
+    session = property(_get_session)
+    
     def __iter__(self):
         sess = self.__session()
         if sess is None:
@@ -88,7 +92,14 @@ class AppenderQuery(Query):
             return self.attr.get_history(self.state, passive=True)._added_items.__getitem__(index)
         else:
             return self._clone(sess).__getitem__(index)
-
+    
+    def count(self):
+        sess = self.__session()
+        if sess is None:
+            return len(self.attr.get_history(self.state, passive=True)._added_items)
+        else:
+            return self._clone(sess).count()
+    
     def _clone(self, sess=None):
         # note we're returning an entirely new Query class instance here
         # without any assignment capabilities;
index 096d945781ac2b583416fa32596d855ab1ffe287..fe0bc92d72c77b86b2f1b0df45813b9703daccf3 100644 (file)
@@ -24,6 +24,14 @@ class DynamicTest(FixtureTest):
         assert [User(id=7, addresses=[Address(id=1, email_address='jack@bean.com')])] == q.filter(User.id==7).all()
         assert fixtures.user_address_result == q.all()
 
+    def test_count(self):
+        mapper(User, users, properties={
+            'addresses':dynamic_loader(mapper(Address, addresses))
+        })
+        sess = create_session()
+        u = sess.query(User).first()
+        assert u.addresses.count() == 1, u.addresses.count()
+        
     def test_backref(self):
         mapper(Address, addresses, properties={
             'user':relation(User, backref=backref('addresses', lazy='dynamic'))