commit-gnue
[Top][All Lists]
Advanced

[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
   # ---------------------------------------------------------------------------





reply via email to

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