/[papo]/gnue/common/src/GDataObjects.py
ViewVC logotype

Diff of /gnue/common/src/GDataObjects.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6 by apronotti, Tue Nov 5 20:14:41 2002 UTC revision 1.7 by styxman, Fri Nov 15 15:32:54 2002 UTC
# Line 33  import GDebug Line 33  import GDebug
33  import GConditions  import GConditions
34  import string  import string
35    
36    postingRecordset = None
37    
38  class Error(StandardError):  class Error(StandardError):
39    # Base exception    # Base exception
40    pass    pass
# Line 73  class ConnectionError(Error): Line 75  class ConnectionError(Error):
75    # Generic error reading from the database connection    # Generic error reading from the database connection
76    pass    pass
77    
78    class DataTypeNotAvailable(Error):
79      # Raised when a datatype is not supported by an database
80      # during writing a schema definition to the database
81      pass
82    
83    class NoWriteSchemaSupport(Error):
84      # Raised when a database adapter doesn't support
85      # writing Schema to datasource
86      pass
87    
88    
89    
90  ###########################################################  ###########################################################
# Line 104  class DataObject: Line 116  class DataObject:
116      self._defaultValues = {}      self._defaultValues = {}
117      self.triggerExtensions = None      self.triggerExtensions = None
118    
   
119    # Do we have a master datasource?    # Do we have a master datasource?
120    def hasMaster(self):    def hasMaster(self):
121      return self._masterObject != None      return self._masterObject != None
122    
123    # Do not over-ride by vendor code    # Do not over-ride by vendor code
124    def createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):    def createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None, sql=""):
125      return self._createResultSet(      return self._createResultSet(
126         GConditions.combineConditions(conditions, self._staticCondition),         GConditions.combineConditions(conditions, self._staticCondition),
127         readOnly=readOnly, masterRecordSet=masterRecordSet)         readOnly=readOnly, masterRecordSet=masterRecordSet, sql=sql)
128      
129    # Designed to be replaced by vendor-specific code    # Designed to be replaced by vendor-specific code
130    def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):    def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):
131      pass      pass
132    
133    # Do not over-ride by vendor code    # Do not over-ride by vendor code
134      def getQueryString(self,conditions={},forDetailSQL=None,additionalSQL=""):
135        return self._buildQuery(conditions,forDetailSQL,additionalSQL)
136      
137    def createEmptyResultSet(self, readOnly=0, masterRecordSet=None):    def createEmptyResultSet(self, readOnly=0, masterRecordSet=None):
138      return self._createEmptyResultSet(readOnly, masterRecordSet)      return self._createEmptyResultSet(readOnly, masterRecordSet)
139    
# Line 235  class DataObject: Line 249  class DataObject:
249    def getSchemaByName(self, name, type=None):    def getSchemaByName(self, name, type=None):
250      return None      return None
251    
252      # write Schema to Database
253      def writeSchema(self,obj,overwrite=0):
254        raise NoWriteSchemaSupport,"This database adapter doesn't have 'schema writing' support"
255    
256    # Called when new record master in master/detail is queried    # Called when new record master in master/detail is queried
257    def _masterRecordChanged(self, master):    def _masterRecordChanged(self, master):
# Line 275  class ResultSet: Line 292  class ResultSet:
292       self._masterRecordSet = masterRecordSet       self._masterRecordSet = masterRecordSet
293       self._readonly = 0       self._readonly = 0
294       self._recordCount = 0       self._recordCount = 0
295         self._postingRecord = None
296    
297       self._defaultValues = {}       self._defaultValues = {}
298       self._defaultValues.update(defaultValues)       self._defaultValues.update(defaultValues)
# Line 434  class ResultSet: Line 452  class ResultSet:
452      return self.current.isPending()      return self.current.isPending()
453    
454    
455      def getPostingRecordset(self):
456        global postingRecordset
457        print postingRecordset
458        return postingRecordset
459    
460    # Post changes to the database    # Post changes to the database
461    def post(self, foreign_keys={}):    def post(self, foreign_keys={}):
462        global postingRecordset
463      # post our changes      # post our changes
464      self._update_cursor = self._dataObject._dataConnection.cursor()      self._update_cursor = self._dataObject._dataConnection.cursor()
465    
466      recordPosition = 0      recordPosition = 0
467      while recordPosition < len(self._cachedRecords):      while recordPosition < len(self._cachedRecords):
468        record = self._cachedRecords[recordPosition]        self._postingRecord = self._cachedRecords[recordPosition]
469          postingRecordset = self._postingRecord
470        delete = record._emptyFlag or record._deleteFlag        delete = self._postingRecord._emptyFlag or self._postingRecord._deleteFlag
471        if not delete:        if not delete:
472          # Flip the flag for 'default' values to true so that hidden          # Flip the flag for 'default' values to true so that hidden
473          # default fields are included in insert statements          # default fields are included in insert statements
474          if record.isPending():          if self._postingRecord.isPending():
475            for field in self._dataObject._defaultValues.keys():            for field in self._dataObject._defaultValues.keys():
476              record._modifiedFlags[field] = 1              self._postingRecord._modifiedFlags[field] = 1
477    
478          for field in foreign_keys.keys():          for field in foreign_keys.keys():
479            record._fields[field] = foreign_keys[field]            self._postingRecord._fields[field] = foreign_keys[field]
480            # Some DBs will throw an exception if you update a Primary Key            # Some DBs will throw an exception if you update a Primary Key
481            # (even if you are updating to the same value)            # (even if you are updating to the same value)
482            if record._insertFlag:            if self._postingRecord._insertFlag:
483              record._modifiedFlags[field] = 1              self._postingRecord._modifiedFlags[field] = 1
484    
485          recordPosition += 1          recordPosition += 1
486        else:        else:
# Line 468  class ResultSet: Line 491  class ResultSet:
491          self._cachedRecords.pop(recordPosition)          self._cachedRecords.pop(recordPosition)
492          self._recordCount -= 1          self._recordCount -= 1
493    
494        record.post()        self._postingRecord.post()
495    
496      # Move to record 0 if all preceding records were deleted      # Move to record 0 if all preceding records were deleted
497      # (or set to -1 if all records were deleted)      # (or set to -1 if all records were deleted)
# Line 639  class RecordSet: Line 662  class RecordSet:
662            except AttributeError:            except AttributeError:
663              pass              pass
664    
665      # Batch mode of above setField method
666      # If trackMod is set to 0 then the modification flag isn't raised
667      def setFields(self, updateDict, trackMod = 1):
668        # If this field is bound to a datasource and the datasource is read only,
669        # generate an error.
670        for field in updateDict.keys():
671          self.setField(field, updateDict[field], trackMod)
672    
673    
674    # Returns 1=Field has been modified    # Returns 1=Field has been modified
675    def isFieldModified(self, fieldName):    def isFieldModified(self, fieldName):

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26