[Top][All Lists]
[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7441 - in trunk/gnue-common/src/datasources: . drivers/Base,
reinhard <=