commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r7356 - trunk/gnue-common/src/datasources/drivers/Base


From: reinhard
Subject: [gnue] r7356 - trunk/gnue-common/src/datasources/drivers/Base
Date: Tue, 12 Apr 2005 09:10:32 -0500 (CDT)

Author: reinhard
Date: 2005-04-12 09:10:31 -0500 (Tue, 12 Apr 2005)
New Revision: 7356

Modified:
   trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
   trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
Log:
Pass connection, tablename and boundFields as parameters to RecordSet.


Modified: trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-12 
13:42:17 UTC (rev 7355)
+++ trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-12 
14:10:31 UTC (rev 7356)
@@ -37,10 +37,14 @@
   # Constructor
   # ---------------------------------------------------------------------------
 
-  def __init__ (self, parent, initialData = {}, masterRecord = None,
+  def __init__ (self, parent, initialData = {}, connection = None,
+      tablename = '', boundFields = [], masterRecord = None,
       masterKeyFields = [], masterLinkFields = [], defaultValues = {},
       rowidField = None, primarykeyFields = []):
 
+    self.__connection       = connection
+    self.__tablename        = tablename
+    self.__boundFields      = [f.lower () for f in boundFields]
     self.__masterRecord     = masterRecord
     self.__masterKeyFields  = masterKeyFields
     self.__masterLinkFields = masterLinkFields
@@ -85,16 +89,14 @@
       # 1. mark as new
       self.__status = 'empty'
 
-      do = self._parent._dataObject
-
       # 2. Set all fields to None, so that the dictionary at least contains a
       #    key for every field
-      for field in do._fieldReferences.keys ():
-        self.__fields [field.lower ()] = None
+      for field in self.__boundFields:
+        self.__fields [field] = None
 
       # 3. Get default values from driver (e.g. initialize primary keys)
-      if do._connection:                # There are datasources w/o connection!
-        defaults = do._connection.initialize (do.table)
+      if self.__connection:
+        defaults = self.__connection.initialize (self.__tablename)
         for (fieldname, value) in defaults.items ():
           self.__setField (fieldname, value)
 
@@ -166,13 +168,13 @@
 
     # If this field is bound to a datasource and the datasource is read only,
     # generate an error.
-    if self._parent.isFieldBound(fieldname) and self._parent.isReadOnly():
+    if fieldname in self.__boundFields and self._parent.isReadOnly ():
       # Provide better feedback??
       tmsg = u_("Attempted to modify read only field '%s'") % fieldname
       raise Exceptions.ReadOnlyError, tmsg
 
     self.__setField (fieldname, value)
-    if self._parent.isFieldBound (fieldname):
+    if fieldname in self.__boundFields:
       if self.__status in ['empty', 'clean']:
         if self.__status == 'empty':
           self.__status = 'inserted'
@@ -316,8 +318,8 @@
 
     # If all else fails, use all fields in the where clause
     else:
-      for field in self.__initialData.keys ():
-        if self._parent.isFieldBound (field):
+      for field in self.__boundFields:
+        if self.__initialData.has_key (field):
           result [field] = self.__initialData [field]
 
     return result
@@ -329,9 +331,8 @@
 
   def __requery (self, fields):
 
-    do = self._parent._dataObject
-    newfields = do._connection.requery (do.table, self.__wherefields (),
-                                        fields)
+    newfields = self.__connection.requery (self.__tablename,
+        self.__wherefields (), fields)
     self.__initialData.update (newfields)
     self.__fields.update (newfields)
 
@@ -352,13 +353,6 @@
     if not self.isPending ():
       return
 
-    # Should a post() to a read only datasource cause a ReadOnlyError?
-    # It does no harm to attempt to post since nothing will be posted,
-    # But does this allow sloppy programming?
-
-    gDebug (8, 'Preparing to post datasource %s' \
-               % self._parent._dataObject.name)
-
     # Update the link to our master record, in case any key fields were updated
     # in the master when it was posted.
     self.__setMasterLink ()
@@ -390,26 +384,24 @@
       do = self._parent._dataObject
       if hasattr(do,'primarykey') and hasattr(do,'primarykeyseq'):
         if do.primarykey and do.primarykeyseq and ',' not in do.primarykey and 
\
-           hasattr(do._connection,'getsequence') and \
+           hasattr(self.__connection,'getsequence') and \
            self.getField(do.primarykey) is None:
-          
self.setField(do.primarykey,do._connection.getsequence(do.primarykeyseq))
+          
self.setField(do.primarykey,self.__connection.getsequence(do.primarykeyseq))
 
     # If we have a connection (i.e. we aren't static or unbound), do the post
-    if self._parent._dataObject._connection:
-      do = self._parent._dataObject
-      gDebug (8, 'Posting datasource %s' % do.name)
-
+    if self.__connection is not None:
       if self.__status == 'deleted':
-        do._connection.delete (do.table, self.__wherefields (), recordNumber)
-
+        self.__connection.delete (self.__tablename, self.__wherefields (),
+            recordNumber)
       else:
         modifiedFields = {}
-        for field in self.__modifiedFlags.keys ():
-          if self._parent.isFieldBound (field):
+        for field in self.__boundFields:
+          if self.__modifiedFlags.has_key (field):
             modifiedFields [field] = self.__fields [field]
 
         if self.__status in ['empty', 'inserted']:
-          rowid = do._connection.insert (do.table, modifiedFields, 
recordNumber)
+          rowid = self.__connection.insert (self.__tablename, modifiedFields,
+              recordNumber)
           if self.__rowidField:
             self.__fields [self.__rowidField] = rowid
             self.__initialData [self.__rowidField] = rowid
@@ -419,8 +411,8 @@
               self.__requery (self.__detailLinkFlags.keys ())
 
         else:
-          do._connection.update (do.table, self.__wherefields (),
-                                 modifiedFields, recordNumber)
+          self.__connection.update (self.__tablename, self.__wherefields (),
+              modifiedFields, recordNumber)
 
         # The record is now "clean" again
         self.__status        = 'clean'
@@ -452,9 +444,7 @@
     ds = self._parent._dataObject._dataSource
     if ds and ds.requery:
       if self.__rowidField or self.__primarykeyFields:
-        fields = [field for field in self.__fields.keys ()
-                  if self._parent.isFieldBound (field)]
-        self.__requery (fields)
+        self.__requery (self.__boundFields)
 
 
   # ---------------------------------------------------------------------------
@@ -517,9 +507,8 @@
       raise errors.ApplicationError, u_("Function call on empty record")
 
     self.__post_master ()
-    do = self._parent._dataObject
-    result = do._connection.call (do.table, self.__wherefields (), methodname,
-                                  parameters)
+    result = self.__connection.call (self.__tablename, self.__wherefields (),
+        methodname, parameters)
     self.__requery_master ()
     return result
 
@@ -597,8 +586,7 @@
   # ---------------------------------------------------------------------------
 
   def __repr__ (self):
-    do = self._parent._dataObject
-    if hasattr (do, 'table'):
-      return "<RecordSet for %s>" % do.table
+    if self.__tablename:
+      return "<RecordSet for %s>" % self.__tablename
     else:
       return "<Unbound/Static RecordSet>"

Modified: trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-12 
13:42:17 UTC (rev 7355)
+++ trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-12 
14:10:31 UTC (rev 7356)
@@ -151,21 +151,6 @@
     return self.current.isPending()
 
   # ---------------------------------------------------------------------------
-
-  # Returns 1=Field is bound to a database field
-  # TODO: pass a list of bound field names to RecordSet instead
-  def isFieldBound(self, fieldName):
-
-    # TODO: until the case problem get's fixed in common we do the following
-    # workaround.
-    for item in self._dataObject._fieldReferences.keys ():
-      if item.lower () == fieldName.lower ():
-        return True
-
-    return False
-
-
-  # ---------------------------------------------------------------------------
   # Create a new RecordSet instance
   # ---------------------------------------------------------------------------
 
@@ -178,6 +163,9 @@
     record = RecordSet (
         parent           = self,
         initialData      = initialData,
+        connection       = self._dataObject._dataSource._connection,
+        tablename        = self._dataObject.table,
+        boundFields      = self._dataObject._fieldReferences.keys (),
         masterRecord     = self._masterRecordSet,
         masterKeyFields  = self._dataObject._masterfields,
         masterLinkFields = self._dataObject._detailfields,





reply via email to

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