[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7443 - in trunk/gnue-common/src/datasources: . drivers/Base
From: |
reinhard |
Subject: |
[gnue] r7443 - in trunk/gnue-common/src/datasources: . drivers/Base |
Date: |
Wed, 20 Apr 2005 16:54:27 -0500 (CDT) |
Author: reinhard
Date: 2005-04-20 16:54:26 -0500 (Wed, 20 Apr 2005)
New Revision: 7443
Modified:
trunk/gnue-common/src/datasources/GDataSource.py
trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
Log:
Moved code to create detail resultsets into RecordSet object.
Modified: trunk/gnue-common/src/datasources/GDataSource.py
===================================================================
--- trunk/gnue-common/src/datasources/GDataSource.py 2005-04-20 21:12:06 UTC
(rev 7442)
+++ trunk/gnue-common/src/datasources/GDataSource.py 2005-04-20 21:54:26 UTC
(rev 7443)
@@ -468,12 +468,15 @@
# Create a result set
# ---------------------------------------------------------------------------
- def createResultSet (self, conditions = {}, readOnly = False):
- resultSet = self._dataObject.createResultSet (conditions, readOnly)
- self.__setResultSet (resultSet)
- return resultSet
+ def createResultSet (self, conditions = {}, readOnly = False,
+ masterRecord = None):
+ resultSet = self._dataObject.createResultSet (conditions,
+ readOnly = readOnly, masterRecord = masterRecord)
+ self.__setResultSet (resultSet)
+ return resultSet
+
# ---------------------------------------------------------------------------
# Requery the result set
# ---------------------------------------------------------------------------
@@ -499,7 +502,7 @@
"""
newResultSet = self._dataObject.createResultSet (
- masterRecordSet = masterRecord)
+ masterRecord = masterRecord)
resultSet.merge (newResultSet)
newResultSet.close ()
@@ -508,12 +511,14 @@
# Create an empty result set
# ---------------------------------------------------------------------------
- def createEmptyResultSet(self, readOnly=False,masterRecordSet=None):
- resultSet = self._dataObject.createEmptyResultSet(readOnly,
masterRecordSet=masterRecordSet)
- self.__setResultSet (resultSet)
- return resultSet
+ def createEmptyResultSet (self, readOnly = False, masterRecord = None):
+ resultSet = self._dataObject.createEmptyResultSet (readOnly,
+ masterRecord = masterRecord)
+ self.__setResultSet (resultSet)
+ return resultSet
+
# ---------------------------------------------------------------------------
# Activate a result set
# ---------------------------------------------------------------------------
Modified: trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
2005-04-20 21:12:06 UTC (rev 7442)
+++ trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
2005-04-20 21:54:26 UTC (rev 7443)
@@ -45,7 +45,7 @@
self._detailObjects = []
- def createResultSet (self, conditions ={}, readOnly=0, masterRecordSet=None):
+ def createResultSet (self, conditions ={}, readOnly=0, masterRecord=None):
cond = GConditions.combineConditions (conditions,
self.__dataSource._staticCondition)
@@ -53,11 +53,11 @@
mastercond = {}
for (masterfield, detailfield) in zip (
self.__dataSource._masterPkFields, self.__dataSource._masterFkFields):
- mastercond [detailfield] = masterRecordSet.getField (masterfield)
+ mastercond [detailfield] = masterRecord.getField (masterfield)
cond = GConditions.combineConditions (cond, mastercond)
- resultset = self.__createResultSet (readOnly, masterRecordSet)
+ resultset = self.__createResultSet (readOnly, masterRecord)
if self.__dataSource.type == 'object':
resultset.query ('object',
@@ -76,9 +76,9 @@
return resultset
- def createEmptyResultSet(self, readOnly=0, masterRecordSet=None):
+ def createEmptyResultSet(self, readOnly=0, masterRecord=None):
- return self.__createResultSet (readOnly, masterRecordSet)
+ return self.__createResultSet (readOnly, masterRecord)
def __createResultSet (self, readOnly = False, masterRecord = None):
@@ -120,29 +120,5 @@
# Called when new record master in master/detail is queried
def _masterRecordChanged(self, master):
- GDebug.printMesg (8, 'Master Record Changed')
-
- # If a detail result set has already been created for a particular
- # master record set, then just return/reuse this old set (after all,
- # it may contain uncommitted changes)
- if (not master.current._cachedDetailResultSets.has_key(self.__dataSource))
or \
- ( not int(gConfig('CacheDetailRecords')) and \
- not
master.current._cachedDetailResultSets[self.__dataSource].isPending() ):
- # If all are set to None then this will prevent the details
- # from being queried. This happens are startup with blank master
- # datasources.
- doQuery = False
- for masterfield in self.__dataSource._masterPkFields:
- if master.current.getField (masterfield):
- doQuery = True
- break
-
- if doQuery:
- resultset = self.createResultSet (masterRecordSet = master.current)
- else:
- resultset = self.createEmptyResultSet (masterRecordSet =
master.current)
-
- master.current.addDetailResultSet(self.__dataSource, resultset,
+ return master.current.addDetailResultSet(self.__dataSource,
self.__dataSource._masterPkFields)
-
- return master.current._cachedDetailResultSets[self.__dataSource]
Modified: trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-20
21:12:06 UTC (rev 7442)
+++ trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-20
21:54:26 UTC (rev 7443)
@@ -498,26 +498,41 @@
# ---------------------------------------------------------------------------
- # Sets the ResultSet associated with this master record
+ # Find an existing or create a new detail result set for this record
# ---------------------------------------------------------------------------
- def addDetailResultSet (self, dataSource, resultSet, fieldnames):
+ def addDetailResultSet (self, dataSource, fieldnames):
"""
Add a result set to the list of detail result sets for this record.
- @param dataSource: The L{GDataSource} that was used to create the
- ResultSet. The RecordSet will automatically requery the result set from
- this data source after changes have been posted to the backend.
- @param resultSet: The ResultSet object to add
+ @param dataSource: The L{GDataSource} to use to create the ResultSet.
@param fieldnames: List of the names of the master fields in this
master/detail connection.
"""
- self._cachedDetailResultSets [dataSource] = resultSet
+ # If we already have it in our cache, return it
+ if self._cachedDetailResultSets.has_key (dataSource):
+ resultset = self._cachedDetailResultSets [dataSource]
+ if resultset.isPending () or int (gConfig ('CacheDetailRecords')):
+ return resultset
+
+ # If this record is empty anyway, it can't have any detail records, so
+ # create empty detail result sets. Query the matching details otherwise.
+ if self.__status == 'empty':
+ resultset = dataSource.createEmptyResultSet (masterRecord = self)
+ else:
+ resultset = dataSource.createResultSet (masterRecord = self)
+
+ # Remember it
+ self._cachedDetailResultSets [dataSource] = resultset
+
+ # Remember the fields that serve as primary key for this master/detail link
for fieldname in fieldnames:
self.__detailLinkFlags [fieldname] = True
+ return resultset
+
# ---------------------------------------------------------------------------
# Set clean data from a dictionary
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7443 - in trunk/gnue-common/src/datasources: . drivers/Base,
reinhard <=