/[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.7 by styxman, Fri Nov 15 15:32:54 2002 UTC revision 1.7.2.1 by anthonyl, Tue Mar 4 22:09:32 2003 UTC
# Line 16  Line 16 
16  # write to the Free Software Foundation, Inc., 59 Temple Place  # write to the Free Software Foundation, Inc., 59 Temple Place
17  # - Suite 330, Boston, MA 02111-1307, USA.  # - Suite 330, Boston, MA 02111-1307, USA.
18  #  #
19  # Copyright 2000-2002 Free Software Foundation  # Copyright 2000-2003 Free Software Foundation
20  #  #
21  # FILE:  # FILE:
22  # GDataObjects.py  # GDataObjects.py
# Line 125  class DataObject: Line 125  class DataObject:
125      return self._createResultSet(      return self._createResultSet(
126         GConditions.combineConditions(conditions, self._staticCondition),         GConditions.combineConditions(conditions, self._staticCondition),
127         readOnly=readOnly, masterRecordSet=masterRecordSet, sql=sql)         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
# Line 133  class DataObject: Line 133  class DataObject:
133    # Do not over-ride by vendor code    # Do not over-ride by vendor code
134    def getQueryString(self,conditions={},forDetailSQL=None,additionalSQL=""):    def getQueryString(self,conditions={},forDetailSQL=None,additionalSQL=""):
135      return self._buildQuery(conditions,forDetailSQL,additionalSQL)      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 165  class DataObject: Line 165  class DataObject:
165                                   string.lower(dataObject.detaillink) or "", ',')                                   string.lower(dataObject.detaillink) or "", ',')
166    
167      if len(dataObject._masterfields) != len(dataObject._detailfields):      if len(dataObject._masterfields) != len(dataObject._detailfields):
168        raise MasterDetailFieldMismatch, "master=%s; detail=%s" % \        tmsg = _("master=%s; detail=%s") % (dataObject._masterfields, dataObject._detailfields)
169            (dataObject._masterfields, dataObject._detailfields)        raise MasterDetailFieldMismatch, tmsg
170    
171      # Make sure "master" fields will be in our future query      # Make sure "master" fields will be in our future query
172      for field in dataObject._masterfields:      for field in dataObject._masterfields:
# Line 251  class DataObject: Line 251  class DataObject:
251    
252    # write Schema to Database    # write Schema to Database
253    def writeSchema(self,obj,overwrite=0):    def writeSchema(self,obj,overwrite=0):
254      raise NoWriteSchemaSupport,"This database adapter doesn't have 'schema writing' support"      tmsg = _("This database adapter doesn't have 'schema writing' support")
255        raise NoWriteSchemaSupport, tmsg
256    
257    # Called when new record master in master/detail is queried    # Called when new record master in master/detail is queried
258    def _masterRecordChanged(self, master):    def _masterRecordChanged(self, master):
# Line 264  class DataObject: Line 265  class DataObject:
265      if (not master.current._cachedDetailResultSets.has_key(self)) or \      if (not master.current._cachedDetailResultSets.has_key(self)) or \
266          ( not int(gConfig('CacheDetailRecords')) and \          ( not int(gConfig('CacheDetailRecords')) and \
267            not master.current._cachedDetailResultSets[self].isPending() ):            not master.current._cachedDetailResultSets[self].isPending() ):
268          doQuery = None
269        for i in range(0, len(self._masterfields)):        for i in range(0, len(self._masterfields)):
270          GDebug.printMesg(10,"Adding criteria")          GDebug.printMesg(10,"Adding criteria")
271          criteria[string.strip(self._detailfields[i])] = \          criteria[string.strip(self._detailfields[i])] = \
272              master.current.getField(string.strip(self._masterfields[i]))              master.current.getField(string.strip(self._masterfields[i]))
273    
274            #If all are set to None then this will prevent the details
275            #from being queried.  This happens are startup with blank master
276            #datasources.
277            doQuery = doQuery or master.current.getField(string.strip(self._masterfields[i]))
278    
279          GDebug.printMesg(10,master.current.getField(self._masterfields[i]))          GDebug.printMesg(10,master.current.getField(self._masterfields[i]))
280        master.current.addDetailResultSet(self.createResultSet(\        if doQuery:
281            master.current.addDetailResultSet(self.createResultSet(\
282               conditions=criteria, masterRecordSet=master.current))               conditions=criteria, masterRecordSet=master.current))
283          else:
284            master.current.addDetailResultSet(self.createEmptyResultSet())
285  ##      master.current._cachedDetailResultSets[self] = \  ##      master.current._cachedDetailResultSets[self] = \
286  ##          self.createResultSet(conditions=criteria, masterRecordSet=master.current)  ##          self.createResultSet(conditions=criteria, masterRecordSet=master.current)
287      return master.current._cachedDetailResultSets[self]      return master.current._cachedDetailResultSets[self]
# Line 310  class ResultSet: Line 321  class ResultSet:
321    
322    # Returns 1=At first record, 0=Not first record    # Returns 1=At first record, 0=Not first record
323    def isFirstRecord(self):    def isFirstRecord(self):
324      return (self._currentRecord == 1)      return (self._currentRecord == 0)
325    
326    
327      # Returns 1=At last record, 0=Not last record
328      def isLastRecord(self):
329        if self._currentRecord < len(self._cachedRecords) - 1 or \
330           self._cacheNextRecord():
331          return 0
332        else:
333          return 1
334    
335    
336    # returns -1=No records in memory, #=Current record #    # returns -1=No records in memory, #=Current record #
# Line 335  class ResultSet: Line 355  class ResultSet:
355    
356    # Get a specific record (0=based)    # Get a specific record (0=based)
357    def getRecord(self, record):    def getRecord(self, record):
358      while (record + 1 > len(self._cachedRecords)) and self._loadNextRecord():      while (record + 1 > len(self._cachedRecords)) and self._cacheNextRecord():
359        pass        pass
360    
361      if record + 1 > len(self._cachedRecords):      if record + 1 > len(self._cachedRecords):
# Line 347  class ResultSet: Line 367  class ResultSet:
367    # move to record #, returns 1=New record loaded, 0=invalid #    # move to record #, returns 1=New record loaded, 0=invalid #
368    def setRecord(self, record):    def setRecord(self, record):
369    
370      while (record > len(self._cachedRecords) -1) and self._loadNextRecord():      while (record > len(self._cachedRecords) -1) and self._cacheNextRecord():
371        pass        pass
372    
373      if record >= len(self._cachedRecords):      if record >= len(self._cachedRecords):
# Line 361  class ResultSet: Line 381  class ResultSet:
381    # returns 1=New record loaded, 0=No more records    # returns 1=New record loaded, 0=No more records
382    def nextRecord(self):    def nextRecord(self):
383      if self._currentRecord + 1 == len(self._cachedRecords):      if self._currentRecord + 1 == len(self._cachedRecords):
384        if not self._loadNextRecord():        if not self._cacheNextRecord():
385          return 0          return 0
386    
387      self._currentRecord += 1      self._currentRecord += 1
# Line 384  class ResultSet: Line 404  class ResultSet:
404    # returns 1=at first record, 0=No records loaded    # returns 1=at first record, 0=No records loaded
405    def firstRecord(self):    def firstRecord(self):
406      if self._currentRecord < 0:      if self._currentRecord < 0:
407        if not self._loadNextRecord():        if not self._cacheNextRecord():
408          return 0          return 0
409    
410      self._currentRecord = 0      self._currentRecord = 0
# Line 399  class ResultSet: Line 419  class ResultSet:
419      if self._currentRecord == -1:      if self._currentRecord == -1:
420        return 0        return 0
421      else:      else:
422        while self._loadNextRecord():        while self._cacheNextRecord():
423          pass          pass
424        self._currentRecord = len(self._cachedRecords) - 1        self._currentRecord = len(self._cachedRecords) - 1
425        self.current = self._cachedRecords[self._currentRecord]        self.current = self._cachedRecords[self._currentRecord]
# Line 412  class ResultSet: Line 432  class ResultSet:
432    def insertRecord(self):    def insertRecord(self):
433      if self.isReadOnly():      if self.isReadOnly():
434        # Provide better feedback??        # Provide better feedback??
435        raise ReadOnlyError, _("Attempted to insert into a read only datasource")        tmsg =  _("Attempted to insert into a read only datasource")
436          raise ReadOnlyError, tmsg
437      else:      else:
438        GDebug.printMesg(7,'Inserting a blank record')        GDebug.printMesg(7,'Inserting a blank record')
439        self._currentRecord += 1        self._currentRecord += 1
# Line 522  class ResultSet: Line 543  class ResultSet:
543        return self._dataObject._fieldReferences.has_key(string.lower(fieldName))        return self._dataObject._fieldReferences.has_key(string.lower(fieldName))
544    
545    
546      # Load cacheCount number of new records
547      def _cacheNextRecord(self):
548        rs = self._loadNextRecord()
549        if rs:
550          self._dataObject._dataSource._onRecordLoaded(self._cachedRecords[-1])
551        return rs
552    
553    
554    
555    ###    ###
556    ### Methods below should be overridden by Vendor Specific functions    ### Methods below should be overridden by Vendor Specific functions
557    ### (_createEmptyRecord may not need to be overridden in all cases)    ### (_createEmptyRecord may not need to be overridden in all cases)
# Line 531  class ResultSet: Line 561  class ResultSet:
561    def _loadNextRecord(self):    def _loadNextRecord(self):
562      return 0      return 0
563    
   
564    # Create an empty recordset    # Create an empty recordset
565    def _createEmptyRecord(self):    def _createEmptyRecord(self):
566      return self._recordSetClass(self)      return self._recordSetClass(self)
# Line 568  class RecordSet: Line 597  class RecordSet:
597        self._fields = {}        self._fields = {}
598        self._fields.update(defaultData)        self._fields.update(defaultData)
599    
   
600    # Returns 1=Record has uncommitted changes    # Returns 1=Record has uncommitted changes
601    def isPending(self):    def isPending(self):
602    
# Line 612  class RecordSet: Line 640  class RecordSet:
640      self._updateFlag = value      self._updateFlag = value
641      if not value:      if not value:
642        self._modifiedFlags.clear()        self._modifiedFlags.clear()
643        
644    def getInitialData(self):    def getInitialData(self):
645      return self._initialData      return self._initialData
646    
647    def getFields(self):    def getFields(self):
648      return self._fields      return self._fields
649      
650    
651    # Returns current value of "field"    # Returns current value of "field"
652    def getField(self, field):    def getField(self, field):
653      try:      try:
# Line 647  class RecordSet: Line 676  class RecordSet:
676      # generate an error.      # generate an error.
677      if self._parent.isFieldBound(field) and self._parent.isReadOnly():      if self._parent.isFieldBound(field) and self._parent.isReadOnly():
678        # Provide better feedback??        # Provide better feedback??
679        raise ReadOnlyError, _("Attempted to modify read only field '%s'") % field        tmsg = _("Attempted to modify read only field '%s'") % field
680          raise ReadOnlyError, tmsg
681      else:      else:
682        fn = string.lower(field)        fn = string.lower(field)
683        self._fields[fn] = value        self._fields[fn] = value
684        if trackMod == 1:        if trackMod == 1:
         self._emptyFlag = 0  
685          if self._parent.isFieldBound(field):          if self._parent.isFieldBound(field):
686              self._emptyFlag = 0
687            self._updateFlag = 1            self._updateFlag = 1
688            self._modifiedFlags[fn] = 1            self._modifiedFlags[fn] = 1
689    
# Line 685  class RecordSet: Line 715  class RecordSet:
715    def delete(self):    def delete(self):
716      if self._parent.isReadOnly():      if self._parent.isReadOnly():
717        # Provide better feedback??        # Provide better feedback??
718        raise ReadOnlyError, _("Attempted to delete from a read only datasource")        tmsg = _("Attempted to delete from a read only datasource")
719          raise ReadOnlyError, tmsg
720      else:      else:
721        self._deleteFlag = 1        self._deleteFlag = 1
722    

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

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