commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r7305 - trunk/gnue-common/src/datasources/drivers/appserver/appse


From: reinhard
Subject: [gnue] r7305 - trunk/gnue-common/src/datasources/drivers/appserver/appserver
Date: Wed, 6 Apr 2005 17:01:49 -0500 (CDT)

Author: reinhard
Date: 2005-04-06 17:01:48 -0500 (Wed, 06 Apr 2005)
New Revision: 7305

Modified:
   trunk/gnue-common/src/datasources/drivers/appserver/appserver/DataObject.py
   trunk/gnue-common/src/datasources/drivers/appserver/appserver/ResultSet.py
Log:
Changed ResultSet and DataObject to use new generator based method.


Modified: 
trunk/gnue-common/src/datasources/drivers/appserver/appserver/DataObject.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/appserver/appserver/DataObject.py 
2005-04-06 22:00:03 UTC (rev 7304)
+++ trunk/gnue-common/src/datasources/drivers/appserver/appserver/DataObject.py 
2005-04-06 22:01:48 UTC (rev 7305)
@@ -39,80 +39,31 @@
   Handles a dataobject in the GNUe-AppServer backend.
   """
 
-  # This is actually never used
-  _resultSetClass = ResultSet.ResultSet
-
   # ---------------------------------------------------------------------------
-  # Build query in prefix notation
-  # ---------------------------------------------------------------------------
-
-  def _buildQuery (self, conditions = {}, forDetail = None,
-                   additionalSQL = ''):
-
-    if isinstance (conditions, DictType):
-      cond = GConditions.buildConditionFromDict (conditions)
-    else:
-      cond = conditions
-
-    query = cond.prefixNotation ()
-
-    return query
-
-  # ---------------------------------------------------------------------------
   # Create an empty resultset
   # ---------------------------------------------------------------------------
 
-  def _createEmptyResultSet (self, readOnly = 0, masterRecordSet = None):
+  def _createEmptyResultSet (self, readOnly = False, masterRecordSet = None):
 
-    fieldlist = self._fieldReferences.keys ()
-
     return ResultSet.ResultSet (dataObject      = self,
-                                sm              = self._connection._sm,
-                                session_id      = self._connection._sess_id,
-                                list_id         = None,
-                                classname       = self.table,
-                                fieldlist       = fieldlist,
-                                fetchcount      = self.cache,
-                                readOnly        = readOnly,
+                                readonly        = readOnly,
                                 masterRecordSet = masterRecordSet)
 
   # ---------------------------------------------------------------------------
   # Create a resultset
   # ---------------------------------------------------------------------------
 
-  def _createResultSet (self, conditions = {}, readOnly = 0,
+  def _createResultSet (self, conditions = {}, readOnly = False,
                         masterRecordSet = None, sql = ''):
 
-    if conditions is not None:
-      filter = self._buildQuery (conditions)
-    else:
-      filter = []
+    resultset = ResultSet.ResultSet (dataObject      = self,
+                                     readonly        = readOnly,
+                                     masterRecordSet = masterRecordSet)
 
-    sort      = self.sorting and self.sorting or []
-    fieldlist = self._fieldReferences.keys ()
+    resultset.query ('object',
+                     table      = self.table,
+                     fieldnames = self._fieldReferences.keys (),
+                     condition  = GConditions.buildCondition (conditions),
+                     sortorder  = self.sorting and self.sorting or [])
 
-    list_id = self._connection._sm.request (self._connection._sess_id,
-                                            self.table, filter, sort, 
fieldlist)
-
-    return ResultSet.ResultSet (dataObject      = self,
-                                sm              = self._connection._sm,
-                                session_id      = self._connection._sess_id,
-                                list_id         = list_id,
-                                classname       = self.table,
-                                fieldlist       = fieldlist,
-                                fetchcount      = self.cache,
-                                readOnly        = readOnly,
-                                masterRecordSet = masterRecordSet)
-
-  # ---------------------------------------------------------------------------
-  # debug method: dump a complete condition tree 
-  # ---------------------------------------------------------------------------
-
-  def __dumpTree (self, element, level = 0):
-    print "%2d: %s (%s) [%s]" % (level, element.__class__, hex(id(element)), 
-                            hex(id(element._parent)))
-    nlevel = level + 1
-    print "  -> %s" % [hex (id (x)) for x in element._children]
-
-    for ch in element._children:
-      self.__dumpTree (ch, nlevel)
+    return resultset

Modified: 
trunk/gnue-common/src/datasources/drivers/appserver/appserver/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/appserver/appserver/ResultSet.py  
2005-04-06 22:00:03 UTC (rev 7304)
+++ trunk/gnue-common/src/datasources/drivers/appserver/appserver/ResultSet.py  
2005-04-06 22:01:48 UTC (rev 7305)
@@ -33,62 +33,34 @@
   """
 
   # ---------------------------------------------------------------------------
-  # Initialization
+  # Implementation of virtual methods
   # ---------------------------------------------------------------------------
 
-  def __init__ (self, dataObject, sm, session_id, list_id, classname,
-                fieldlist, fetchcount, readOnly, masterRecordSet):
+  def _query_object (self, connection, table, fieldnames, condition, 
sortorder):
+    self.__sm = connection._sm
+    self.__session_id = connection._sess_id
+    self.__list_id = self.__sm.request (self.__session_id, table,
+                                        condition.prefixNotation (), sortorder,
+                                        fieldnames)
+    self.__fieldnames = fieldnames
 
-    Base.ResultSet.__init__ (self, dataObject,
-                             masterRecordSet = masterRecordSet)
-    self._readOnly = readOnly
 
-    self.__sm = sm
-    self.__session_id = session_id
-    self.__list_id = list_id
-    self.__classname = classname
-    self.__fieldlist = fieldlist
-    self.__fetchcount = fetchcount
+  # ---------------------------------------------------------------------------
 
-    if self.__list_id:
-      self.__position = 0               # current fetch position in resultset
-      self._recordCount = self.__sm.count (self.__session_id, self.__list_id)
-    else:
-      # Empty result set
-      self.__position = -1
-      self._recordCount = 0
+  def _count (self):
+    return self.__sm.count (self.__session_id, self.__list_id)
 
   # ---------------------------------------------------------------------------
-  # Fetch next records
-  # ---------------------------------------------------------------------------
 
-  def _loadNextRecord (self):
-
-    if self.__position == -1:
-      return False
-
-    records = self.__sm.fetch (self.__session_id,
-                               self.__list_id,
-                               self.__position,
-                               self.__fetchcount)
-    if not records:
-      self.__position = -1
-      return False
-
-    if len (records) < self.__fetchcount:
-      self.__position = -1
-    else:
-      self.__position += len (records)
-
-    for record in records:
-      dict = {}
-      j = 0
-      for fieldName in [u'gnue_id'] + self.__fieldlist:
-        dict [fieldName] = record [j]
-        j += 1
-
-      r = self._recordSetClass (parent = self, initialData = dict,
-          primarykeyFields = [u'gnue_id'])
-      self._cachedRecords.append (r)
-
-    return True
+  def _fetch (self, cachesize):
+    position = 0
+    while True:
+      rows = self.__sm.fetch (self.__session_id, self.__list_id, position,
+                              cachesize)
+      for row in rows:
+        # row [0] is the gnue_id that wasn't requested
+        yield dict (zip (self.__fieldnames, row[1:]))
+      # if fetch returned less rows than we requested, we're at the end of data
+      if len (rows) < cachesize:
+        break
+      position += len (rows)




reply via email to

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