commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r6850 - in trunk/gnue-appserver: . src/language


From: johannes
Subject: r6850 - in trunk/gnue-appserver: . src/language
Date: Mon, 3 Jan 2005 13:48:57 -0600 (CST)

Author: johannes
Date: 2005-01-03 13:48:56 -0600 (Mon, 03 Jan 2005)
New Revision: 6850

Modified:
   trunk/gnue-appserver/BUGS
   trunk/gnue-appserver/src/language/ObjectList.py
Log:
using negative indices to ObjectLists - as returned by Session.find () - is 
working as intended now


Modified: trunk/gnue-appserver/BUGS
===================================================================
--- trunk/gnue-appserver/BUGS   2005-01-03 19:13:56 UTC (rev 6849)
+++ trunk/gnue-appserver/BUGS   2005-01-03 19:48:56 UTC (rev 6850)
@@ -28,9 +28,6 @@
 * There is no way to do a fulltext-search (has to be implemented in gnue-common
   first)
 
-* If an ObjectList returned by a Session.find () has more than 10 items using
-  an index of -1 does *not* give the last instance, but only the 10th.
-
 * If appserver comes to sort a list of objects, NULL values are always
   'first'. This might differ from the sort order given by the backend database
   in use. (ROADMAP item for 0.4)

Modified: trunk/gnue-appserver/src/language/ObjectList.py
===================================================================
--- trunk/gnue-appserver/src/language/ObjectList.py     2005-01-03 19:13:56 UTC 
(rev 6849)
+++ trunk/gnue-appserver/src/language/ObjectList.py     2005-01-03 19:48:56 UTC 
(rev 6850)
@@ -44,6 +44,7 @@
     self.__list      = []
     self.__list_id   = None
 
+    self.__cacheStep = CACHE_STEP
     self.__buildList ()
 
 
@@ -73,8 +74,14 @@
   def __getitem__ (self, index):
     try:
       if type (index) == SliceType:
+        if index.start < 0:
+          self.__fillup ()
+
         return self.__list [index.start:index.stop]
       else:
+        if index < 0:
+          self.__fillup ()
+
         return self.__list [index]
 
     except:
@@ -108,11 +115,15 @@
     sm  = self.__session.getSessionManager ()
     sid = self.__session.getSessionId ()
 
-    rset = sm.fetch (sid, self.__list_id, len (self.__list), CACHE_STEP, 0)
+    rset = sm.fetch (sid, self.__list_id, len (self.__list), 
self.__cacheStep,0)
     for row in rset:
       obj = Object (self.__session, self.classname, row [0])
       self.__list.append (obj)
 
+    # We double the cache-size for the next call to fetch (). This boosts
+    # performance for fetching larger lists
+    self.__cacheStep *= 2
+
     # fix for gnue-common 0.5.1 release (will be removed for later releases 
     # of gnue-common)
     self.__length = len (self.__list)
@@ -120,3 +131,10 @@
     # return number of updated rows
     return len (rset)
     
+
+  def __fillup (self):
+
+    if len (self.__list) < len (self):
+      while self._populateList ():
+        pass
+





reply via email to

[Prev in Thread] Current Thread [Next in Thread]