commit-gnue
[Top][All Lists]
Advanced

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

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


From: reinhard
Subject: [gnue] r7441 - in trunk/gnue-common/src/datasources: . drivers/Base
Date: Wed, 20 Apr 2005 16:07:18 -0500 (CDT)

Author: reinhard
Date: 2005-04-20 16:07:17 -0500 (Wed, 20 Apr 2005)
New Revision: 7441

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


Modified: trunk/gnue-common/src/datasources/GDataSource.py
===================================================================
--- trunk/gnue-common/src/datasources/GDataSource.py    2005-04-20 20:26:18 UTC 
(rev 7440)
+++ trunk/gnue-common/src/datasources/GDataSource.py    2005-04-20 21:07:17 UTC 
(rev 7441)
@@ -61,10 +61,11 @@
     self.__master = None                # Master DataSource object
     self._masterPkFields = []           # M/D link fields in the master table
     self._masterFkFields = []           # M/D link fields in the detail table
+    self._primarykeyFields = []         # Primary key fields of this table
+    self._staticCondition = None        # Condition from <conditions> child
     self._fieldReferences = {}
     self._defaultData = {}
     self._rowidField = None
-    self._primarykeyFields = []
 
     self._inits = [self.__primaryInit, self.__secondaryInit,
                    self.__tertiaryInit]
@@ -187,22 +188,28 @@
     # explicitfields attribute: reference them
     if hasattr (self, 'explicitfields'):
       if len (self.explicitfields):
-        for field in string.split (self.explicitfields,','):
-          gDebug (7, "Explicit field %s" % field)
-          self.referenceField (field)
+        self.referenceFields (string.split (self.explicitfields,','))
 
     # primarykey attribute: remember them and reference them
     if hasattr (self, 'primarykey'):
       self._primarykeyFields = self.primarykey.split (',')
       # Make sure the primary key is included in the field references
-      for field in self._primarykeyFields:
-        self.referenceField (field)
+      self.referenceFields (self._primarykeyFields)
 
+    # <condition> child: set self._staticCondition
+    self._staticCondition = self.findChildOfType ('GCCondition')
+
     # <sortorder> child: set self.sorting
     sortorder = self.findChildOfType ('GCSortOrder')
     if sortorder:
       self.sorting = sortorder.sorting
 
+    # <staticset> child: set self._staticSet
+    self._staticSet = self.findChildOfType ('GDStaticSet')
+
+    # <sql> child: set self._rawSQL
+    self._rawSQL = self.findChildOfType ('GDSql')
+
     return GObjects.GObj._buildObject(self)
 
 
@@ -236,6 +243,9 @@
     # FIXME: Could this be merged with primary init, and done before connect?
     # So bugs in the datasource definition would be reported before asking for
     # connection login.
+    # Hmmm... No, because primary init registers the datasource in the toplevel
+    # datasourceDictionary, and the master must already be registered here.
+    # Maybe a _topObject.findChildByName would help and be more clean?
     if hasattr (self, 'master'):
 
       # Find the master datasource by name
@@ -302,12 +312,6 @@
         gDebug (7, 'Using static data driver')
         dataObject = static.DataObject (None, self)
 
-        for child in self._children:
-          if isinstance(child, GStaticSet):
-            self._staticSet = child
-            break
-
-
     elif self._connections:
       self.connection = string.lower(self.connection)
       # This will throw a GConnections.NotFoundError if an unknown
@@ -324,8 +328,7 @@
       primarykeyFields = self._connection._primarykeyFields
       if primarykeyFields:
         self._primarykeyFields = primarykeyFields
-        for field in self._primarykeyFields:
-          self._fieldReferences [field] = True
+        self.referenceFields (self._primarykeyFields)
 
       # Include the rowid in list of field references
       rowidField = self._connection._rowidField
@@ -335,26 +338,15 @@
         # 2. try if rowidField is available in current table/view
         if not self._primarykeyFields:
           self._rowidField = rowidField
-          self._fieldReferences [self._rowidField] = True
+          self.referenceField (self._rowidField)
 
-    self.name = string.lower(self.name)
-    self._topObject._datasourceDictionary[self.name]=self
+    self._topObject._datasourceDictionary [self.name.lower ()] = self
 
-    hasRaw = False
-    for child in self._children:
-      if isinstance(child, GConditions.GCondition):
-        self._staticCondition = child
-        break
-      elif isinstance(child, GSql):
-        self._rawSQL = child
-        hasRaw = True
-
-
-    if self.type == "sql" and not hasRaw:
+    if self.type == "sql" and self._rawSQL is None:
       raise Exceptions.InvalidDatasourceDefintion, \
         u_("Datasource %s is sql-based, but has no <sql> definition.") \
         % self.name
-    elif not self.type == "sql" and hasRaw:
+    elif not self.type == "sql" and self._rawSQL is not None:
       raise Exceptions.InvalidDatasourceDefintion, \
         u_("Datasource %s is not sql-based, but has a <sql> definition.") \
         % self.name
@@ -424,8 +416,7 @@
       gDebug (1, "Trying to bind field %s to unbound DataSource" % field)
       return
 
-    gDebug (7, 'Field %s implicitly referenced' % field)
-    self._fieldReferences[field] = ""
+    self._fieldReferences [field] = True
 
     if defaultValue != None:
       self._defaultData [field] = defaultValue

Modified: trunk/gnue-common/src/datasources/drivers/Base/DataObject.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/DataObject.py        
2005-04-20 20:26:18 UTC (rev 7440)
+++ trunk/gnue-common/src/datasources/drivers/Base/DataObject.py        
2005-04-20 21:07:17 UTC (rev 7441)
@@ -42,12 +42,6 @@
 
     self._connection = connection
     self.__dataSource = dataSource
-
-    self._masterfields = []
-    self._detailfields = []
-    self._staticCondition = None
-
-    self._masterObject = None
     self._detailObjects = []
 
 
@@ -57,8 +51,8 @@
 
     # Add condition from master record
     mastercond = {}
-    for (masterfield, detailfield) in \
-        zip (self._masterfields, self._detailfields):
+    for (masterfield, detailfield) in zip (
+        self.__dataSource._masterPkFields, self.__dataSource._masterFkFields):
       mastercond [detailfield] = masterRecordSet.getField (masterfield)
 
     cond = GConditions.combineConditions (cond, mastercond)
@@ -99,8 +93,8 @@
         boundFields      = self.__dataSource._fieldReferences.keys (),
         readonly         = readOnly,
         masterRecord     = masterRecord,
-        masterKeyFields  = self._masterfields,
-        masterLinkFields = self._detailfields,
+        masterKeyFields  = self.__dataSource._masterPkFields,
+        masterLinkFields = self.__dataSource._masterFkFields,
         dataSource       = self.__dataSource)
 
 
@@ -110,26 +104,15 @@
   # client application may wish to add a handler to know when the detail
   # has been requeried.  handler is a method that takes two arguments:
   # the master ResultSet and the detail ResultSet
-  def addDetailDataObject(self, dataObject, handler=None, **params):
+  def addDetailDataObject(self, dataObject, handler=None):
 
-    dataObject.__dict__.update(params)
-
     GDebug.printMesg (8,"Adding a master/detail relationship to DataObject")
-    dataObject._masterObject = self
 
-    dataObject._masterfields = string.split (  \
-        hasattr (dataObject, 'masterlink') and \
-          dataObject.masterlink or "", ',')
-
-    dataObject._detailfields = string.split (  \
-        hasattr (dataObject, 'detaillink') and \
-          dataObject.detaillink or "", ',')
-
     # Make sure "master" fields will be in our future query
-    for field in dataObject._masterfields:
+    for field in dataObject.__dataSource._masterPkFields:
       self.__dataSource._fieldReferences[string.strip(field)] = ""
 
-    for field in dataObject._detailfields:
+    for field in dataObject.__dataSource._masterFkFields:
       dataObject.__dataSource._fieldReferences[string.strip(field)] = ""
 
     self._detailObjects.append ([dataObject, handler])
@@ -149,7 +132,7 @@
       # from being queried.  This happens are startup with blank master
       # datasources.
       doQuery = False
-      for masterfield in self._masterfields:
+      for masterfield in self.__dataSource._masterPkFields:
         if master.current.getField (masterfield):
           doQuery = True
           break
@@ -160,6 +143,6 @@
         resultset = self.createEmptyResultSet (masterRecordSet = 
master.current)
 
       master.current.addDetailResultSet(self.__dataSource, resultset,
-          self._masterfields)
+          self.__dataSource._masterPkFields)
 
     return master.current._cachedDetailResultSets[self.__dataSource]





reply via email to

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