commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r7466 - in trunk/gnue-common/src/datasources: . drivers/Base


From: reinhard
Subject: [gnue] r7466 - in trunk/gnue-common/src/datasources: . drivers/Base
Date: Fri, 22 Apr 2005 17:56:40 -0500 (CDT)

Author: reinhard
Date: 2005-04-22 17:56:39 -0500 (Fri, 22 Apr 2005)
New Revision: 7466

Modified:
   trunk/gnue-common/src/datasources/GDataSource.py
   trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
Log:
Moved createResultSet implementation from DataObject to GDataSource.


Modified: trunk/gnue-common/src/datasources/GDataSource.py
===================================================================
--- trunk/gnue-common/src/datasources/GDataSource.py    2005-04-22 22:56:00 UTC 
(rev 7465)
+++ trunk/gnue-common/src/datasources/GDataSource.py    2005-04-22 22:56:39 UTC 
(rev 7466)
@@ -55,6 +55,7 @@
 
     self.type = "object"
     self.connection = None              # Connection name
+    self.table = None                   # Table name
     self._connections = None
     self._connection = None             # GConnection object
     self._dataObject = None
@@ -107,7 +108,7 @@
   # ---------------------------------------------------------------------------
 
   def __trigger_createResultSet (self, conditions = {}, readOnly = False):
-    self.createResultSet (conditions, readOnly)
+    return self.createResultSet (conditions, readOnly)
 
   # ---------------------------------------------------------------------------
 
@@ -162,17 +163,6 @@
 
 
   # ---------------------------------------------------------------------------
-  # Hack to hide the DataObject behind the DataSource
-  # ---------------------------------------------------------------------------
-
-  def __getattr__(self, attr):
-    if self._dataObject and attr[1] != '_' and hasattr(self._dataObject,attr):
-      return getattr(self._dataObject,attr)
-    else:
-      raise AttributeError, attr
-
-
-  # ---------------------------------------------------------------------------
   # Initialize object after parsing from XML
   # ---------------------------------------------------------------------------
 
@@ -353,17 +343,6 @@
         u_("Datasource %s is not sql-based, but has a <sql> definition.") \
         % self.name
 
-
-    # Copy all attributes from XML to the dataObject
-    tagAttributes = getXMLelements()['datasource']['Attributes']
-    for attribute in tagAttributes.keys():
-      if self.__dict__.has_key(attribute):
-        dataObject.__dict__[attribute] = self.__dict__[attribute]
-      else:
-        try:
-          dataObject.__dict__[attribute] = tagAttributes[attribute]['Default']
-        except KeyError:
-          pass
     self._dataObject = dataObject
 
 
@@ -474,20 +453,34 @@
 
 
   # ---------------------------------------------------------------------------
-  # Create a result set
+  # Create and activate a new result set
   # ---------------------------------------------------------------------------
 
   def createResultSet (self, conditions = {}, readOnly = False,
       masterRecord = None):
+    """
+    Execute a query on the backend and create a result set.
 
-    resultSet = self._dataObject.createResultSet (conditions,
-        readOnly = readOnly, masterRecord = masterRecord)
+    The result set generated by the query will become the active result set of
+    this datasource.
+
+    @param conditions: Conditions to be applied additionally to the static
+      condition of the datasource (defined with setCondition or with
+      <conditions> XML tags).
+    @param readOnly: True if the result set should be read only, which means
+      any attempt to change the result set will raise an exception.
+    @param masterRecord: Master RecordSet object for the ResultSet to be
+      generated if the datasource is a detail datasource.
+    @return: The new active ResultSet object.
+    """
+
+    resultSet = self.__createResultSet (conditions, readOnly, masterRecord)
     self._activateResultSet (resultSet)
     return resultSet
 
 
   # ---------------------------------------------------------------------------
-  # Requery the result set
+  # Requery an existing result set
   # ---------------------------------------------------------------------------
 
   def _requeryResultSet (self, masterRecord, resultSet):
@@ -510,8 +503,7 @@
       merged.
     """
 
-    newResultSet = self._dataObject.createResultSet (
-        masterRecord = masterRecord)
+    newResultSet = self.__createResultSet (masterRecord = masterRecord)
     resultSet.merge (newResultSet)
     newResultSet.close ()
 
@@ -522,18 +514,85 @@
 
 
   # ---------------------------------------------------------------------------
-  # Create an empty result set
+  # Create a result set
   # ---------------------------------------------------------------------------
 
-  def createEmptyResultSet (self, readOnly = False, masterRecord = None):
+  def __createResultSet (self, conditions = {}, readOnly = False,
+      masterRecord = None):
 
-    resultSet = self._dataObject.createEmptyResultSet (readOnly,
-        masterRecord = masterRecord)
+    cond = GConditions.combineConditions (conditions, self._staticCondition)
+
+    # Add condition from master record
+    mastercond = {}
+    for (masterfield, detailfield) in zip (
+        self._masterPkFields, self._masterFkFields):
+      mastercond [detailfield] = masterRecord.getField (masterfield)
+
+    cond = GConditions.combineConditions (cond, mastercond)
+
+    resultset =  self.__newResultSet (readOnly, masterRecord)
+
+    if self.type == 'object':
+      resultset.query ('object',
+          table      = self.table,
+          fieldnames = self._fieldReferences.keys (),
+          condition  = cond,
+          sortorder  = self.sorting and self.sorting or [],
+          distinct   = self.distinct)
+
+    elif self.type == 'static':
+      resultset.query ('static', data = self._staticSet.data)
+
+    elif self.type == 'sql':
+      resultset.query ('sql', sql = self._rawSQL.getChildrenAsContent ())
+
+    return resultset
+
+
+  # ---------------------------------------------------------------------------
+  # Create and activate an empty result set
+  # ---------------------------------------------------------------------------
+
+  def createEmptyResultSet (self, masterRecord = None):
+    """
+    Create an empty result set.
+
+    The result set generated will become the active result set of this
+    datasource.
+
+    @param masterRecord: Master RecordSet object for the ResultSet to be
+      generated if the datasource is a detail datasource (this will become
+      important once new records are inserted in this result set).
+    @return: The new active (empty) ResultSet object.
+    """
+
+    resultSet = self.__newResultSet (False, masterRecord)
     self._activateResultSet (resultSet)
     return resultSet
 
 
   # ---------------------------------------------------------------------------
+  # Create a new ResultSet object instance
+  # ---------------------------------------------------------------------------
+
+  def __newResultSet (self, readOnly, masterRecord):
+
+    return self._dataObject._resultSetClass (
+        defaultData       = self._defaultData,
+        connection        = self._connection,
+        tablename         = self.table,
+        rowidField        = self._rowidField,
+        primarykeyFields  = self._primarykeyFields,
+        boundFields       = self._fieldReferences.keys (),
+        readonly          = readOnly,
+        masterRecord      = masterRecord,
+        masterPkFields    = self._masterPkFields,
+        masterFkFields    = self._masterFkFields,
+        detailDataSources = self._detailDataSources,
+        dataSource        = self)
+
+
+  # ---------------------------------------------------------------------------
   # 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-22 22:56:00 UTC (rev 7465)
+++ trunk/gnue-common/src/datasources/drivers/Base/DataObject.py        
2005-04-22 22:56:39 UTC (rev 7466)
@@ -23,75 +23,11 @@
 
 __all__ = ['DataObject']
 
-from gnue.common.apps import GDebug
-from gnue.common.datasources import GConditions, Exceptions
-import string
-
 from ResultSet import ResultSet
 
-###########################################################
-#
-#
-#
-###########################################################
 class DataObject:
 
   _resultSetClass = ResultSet
 
   def __init__(self, connection, dataSource):
-
     self._connection = connection
-    self.__dataSource = dataSource
-
-
-  def createResultSet (self, conditions ={}, readOnly=0, masterRecord=None):
-
-    cond = GConditions.combineConditions (conditions, 
self.__dataSource._staticCondition)
-
-    # Add condition from master record
-    mastercond = {}
-    for (masterfield, detailfield) in zip (
-        self.__dataSource._masterPkFields, self.__dataSource._masterFkFields):
-      mastercond [detailfield] = masterRecord.getField (masterfield)
-
-    cond = GConditions.combineConditions (cond, mastercond)
-
-    resultset =  self.__createResultSet (readOnly, masterRecord)
-
-    if self.__dataSource.type == 'object':
-      resultset.query ('object',
-                       table      = self.__dataSource.table,
-                       fieldnames = self.__dataSource._fieldReferences.keys (),
-                       condition  = cond,
-                       sortorder  = self.__dataSource.sorting and 
self.__dataSource.sorting or [],
-                       distinct   = self.__dataSource.distinct)
-
-    elif self.__dataSource.type == 'static':
-      resultset.query ('static', data = self.__dataSource._staticSet.data)
-
-    elif self.__dataSource.type == 'sql':
-      resultset.query ('sql', sql = 
self.__dataSource._rawSQL.getChildrenAsContent ())
-
-    return resultset
-
-
-  def createEmptyResultSet(self, readOnly=0, masterRecord=None):
-
-    return self.__createResultSet (readOnly, masterRecord)
-
-
-  def __createResultSet (self, readOnly = False, masterRecord = None):
-
-    return self._resultSetClass (
-        defaultData       = self.__dataSource._defaultData,
-        connection        = self.__dataSource._connection,
-        tablename         = self.__dataSource.table,
-        rowidField        = self.__dataSource._rowidField,
-        primarykeyFields  = self.__dataSource._primarykeyFields,
-        boundFields       = self.__dataSource._fieldReferences.keys (),
-        readonly          = readOnly,
-        masterRecord      = masterRecord,
-        masterPkFields    = self.__dataSource._masterPkFields,
-        masterFkFields    = self.__dataSource._masterFkFields,
-        detailDataSources = self.__dataSource._detailDataSources,
-        dataSource        = self.__dataSource)





reply via email to

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