[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7304 - trunk/gnue-common/src/datasources/drivers/Base
From: |
reinhard |
Subject: |
[gnue] r7304 - trunk/gnue-common/src/datasources/drivers/Base |
Date: |
Wed, 6 Apr 2005 17:00:04 -0500 (CDT) |
Author: reinhard
Date: 2005-04-06 17:00:03 -0500 (Wed, 06 Apr 2005)
New Revision: 7304
Modified:
trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
Log:
Added support for new generator-based descendant implementation. Added readonly
as a parameter to ResultSet constructor.
Modified: trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-06
18:30:21 UTC (rev 7303)
+++ trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-06
22:00:03 UTC (rev 7304)
@@ -41,12 +41,13 @@
# Constructor
# ---------------------------------------------------------------------------
- def __init__ (self, dataObject, defaultValues = {}, masterRecordSet = None):
+ def __init__ (self, dataObject, defaultValues = {}, readonly = False,
+ masterRecordSet = None):
self._dataObject = dataObject
self._cachedRecords = []
self._currentRecord = -1
self._masterRecordSet = masterRecordSet
- self._readonly = False
+ self._readonly = readonly
self._recordCount = 0
self._postingRecord = None
@@ -60,8 +61,13 @@
self.__rowidField = None
self.__primarykeyFields = []
+ # Objects to get informed about record navigation events
self.__listeners = []
+ # Generator to yield fieldname/value dictionaries
+ self.__generator = None
+
+ # Records that have to be requeried after the post
self.__recordsToRequery = []
self.current = None
@@ -71,6 +77,31 @@
# ---------------------------------------------------------------------------
+ # Execute a query
+ # ---------------------------------------------------------------------------
+
+ def query (self, type, **kwargs):
+ """
+ Populate the resultset with data.
+
+ @param type: Type of the query, can be 'object' or 'sql'.
+ @param **kwargs: Depends on the type.
+ """
+
+ queryfunc = '_query_' + type
+ if not hasattr (self, queryfunc):
+ raise Exceptions.ObjectTypeNotAvailableError, type
+
+ getattr (self, queryfunc) (self._dataObject._dataSource._connection,
+ **kwargs)
+
+ self.__generator = self._fetch (self._dataObject.cache)
+
+ # (TODO: could be delayed to first call of getRecordCount)
+ self._recordCount = self._count ()
+
+
+ # ---------------------------------------------------------------------------
# Status information
# ---------------------------------------------------------------------------
@@ -522,10 +553,26 @@
# Virtual methods
# ---------------------------------------------------------------------------
- # Load cacheCount number of new records
- def _loadNextRecord(self):
- return False
+ # Load cacheCount number of new records (deprecated)
+ def _loadNextRecord (self):
+ if not self.__generator:
+ return False
+
+ try:
+ row = self.__generator.next ()
+ except StopIteration:
+ return False
+
+ record = RecordSet (parent = self,
+ initialData = row,
+ rowidField = self.__rowidField,
+ primarykeyFields = self.__primarykeyFields)
+
+ self._cachedRecords.append (record)
+ return True
+
+
# ---------------------------------------------------------------------------
# Create an empty recordset
@@ -534,8 +581,34 @@
rowidField = self.__rowidField,
primarykeyFields = self.__primarykeyFields)
+ # ---------------------------------------------------------------------------
+ def _count (self):
+ """
+ Return the number of records returned by the query.
+
+ @return: Number of records that will be yielded by @L{_fetch}.
+ """
+ return 0
+
# ---------------------------------------------------------------------------
+
+ def _fetch (self, cachesize):
+ """
+ Yield records from the query.
+
+ Descendants must overwrite this function to return a sequence of
+ fieldname/value dictionaries.
+
+ @param cachesize: Recommended cache size the driver should use to
+ communicate with the backend.
+ @return: A generator for fieldname/value dictionaries.
+ """
+ for record in []:
+ yield record
+
+
+ # ---------------------------------------------------------------------------
# Sequence behaviour
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7304 - trunk/gnue-common/src/datasources/drivers/Base,
reinhard <=