[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7305 - trunk/gnue-common/src/datasources/drivers/appserver/appserver,
reinhard <=