commit-gnue
[Top][All Lists]
Advanced

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

gnue gnue-common/src/GDataObjects.py gnue-commo...


From: Jason Cater
Subject: gnue gnue-common/src/GDataObjects.py gnue-commo...
Date: Fri, 09 Nov 2001 00:45:23 -0500

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Jason Cater <address@hidden>    01/11/09 00:45:23

Modified files:
        gnue-common/src: GDataObjects.py 
        gnue-common/src/dbdrivers/_dbsig: DBdriver.py 
        gnuef/src      : GFForm.py 
        gnuef/src/GFObjects: GFBlock.py 

Log message:
        fixes to posting routines to correctly deal with empty and deleted 
records; misc other bug fixes

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/GDataObjects.py.diff?cvsroot=OldCVS&tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFForm.py.diff?cvsroot=OldCVS&tr1=1.130&tr2=1.131&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFObjects/GFBlock.py.diff?cvsroot=OldCVS&tr1=1.24&tr2=1.25&r1=text&r2=text

Patches:
Index: gnue/gnue-common/src/GDataObjects.py
diff -u gnue/gnue-common/src/GDataObjects.py:1.29 
gnue/gnue-common/src/GDataObjects.py:1.30
--- gnue/gnue-common/src/GDataObjects.py:1.29   Thu Nov  8 14:57:00 2001
+++ gnue/gnue-common/src/GDataObjects.py        Fri Nov  9 00:45:22 2001
@@ -424,10 +424,14 @@
     # post our changes
 
     i = 0
-    for record in (self._cachedRecords):
-     
+    for record in self._cachedRecords:
+
+      # Get rid of empty records
+      if record._emptyFlag:
+        record._deleteFlag = 1
+
       # Adjust the current record if a preceding record is deleted
-      if record._deleteFlag and i <= self._currentRecord: 
+      if record._deleteFlag and i <= self._currentRecord:
         self._currentRecord -= 1
 
       # Perform the post for this record
@@ -443,11 +447,13 @@
 
     # Move to record 0 if all preceding records were deleted
     # (or set to -1 if all records were deleted)
-    if self._currentRecord < 0: 
-      if len(self._cachedRecords): 
+    if self._currentRecord < 0:
+      if len(self._cachedRecords):
         self._currentRecord = 0
-      else: 
+      else:
         self._currentRecord = -1
+    if self._currentRecord >= self._recordCount:
+      self._currentRecord = self._recordCount - 1
 
 
   def notifyDetailObjects(self):
Index: gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.21 
gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.22
--- gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.21      Wed Nov  7 
23:39:04 2001
+++ gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py   Fri Nov  9 00:45:22 2001
@@ -8,7 +8,7 @@
 #
 # GNU Enterprise is distributed in the hope that it will be 
 # useful, but WITHOUT ANY WARRANTY; without even the implied
-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 # PURPOSE. See the GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public 
@@ -67,22 +67,23 @@
     return 1
         
 
-  # If a vendor can do any of these more efficiently (i.e., use a known 
-  # PRIMARY KEY or ROWID, then override these methods. Otherwise, leave 
-  # as default.  Note that these functions are specific to DB-SIG based 
+  # If a vendor can do any of these more efficiently (i.e., use a known
+  # PRIMARY KEY or ROWID, then override these methods. Otherwise, leave
+  # as default.  Note that these functions are specific to DB-SIG based
   # drivers (i.e., these functions are not in the base RecordSet class)
 
-  def _buildDeleteStatement(self): 
-    if self._initialData.has_key(self._parent._primaryIdField): 
+  def _buildDeleteStatement(self):
+    if self._initialData.has_key(self._parent._primaryIdField):
       where = [self._parent._primaryIdFormat % \
           self._initialData[self._parent._primaryIdField]  ]
-    else: 
+    else:
       where = []
       for field in self._initialData.keys():
-        if self._initialData[field] == None: 
-          where.append ("%s IS NULL" % field)
-        else: 
-          where.append ("%s='%s'" % (field, self._initialData[field]))
+        if self._parent.isFieldBound(field):
+          if self._initialData[field] == None:
+            where.append ("%s IS NULL" % field)
+          else:
+            where.append ("%s='%s'" % (field, self._initialData[field]))
 
     statement = "DELETE FROM %s WHERE %s" % \
        (self._parent._dataObject.table, string.join(where,' AND ') )
@@ -158,6 +159,8 @@
     # post our changes
     self._update_cursor = self._dataObject._dataConnection.cursor()
 
+    currentRecord = self._currentRecord
+
     i = 0
     while i < len(self._cachedRecords):
 
@@ -169,19 +172,35 @@
         if record._insertFlag:
           record._modifiedFlags[field] = 1
 
-      delete = record._deleteFlag and not record._insertFlag
+      delete = record._emptyFlag or record._deleteFlag
       record.post()
+
+      # Adjust the current record if a preceding record is deleted
+      if delete and i <= self._currentRecord:
+        self._currentRecord -= 1
+
       if delete:
         self._cachedRecords.pop(i)
+        self._recordCount -= 1
       else:
         i = i + 1
 
+    # Move to record 0 if all preceding records were deleted
+    # (or set to -1 if all records were deleted)
+    if self._currentRecord < 0:
+      if len(self._cachedRecords):
+        self._currentRecord = 0
+      else:
+        self._currentRecord = -1
+    if self._currentRecord >= self._recordCount:
+      self._currentRecord = self._recordCount - 1
+
 
   def _loadNextRecord(self):
     if self._cursor:
       rs = None
 
-      try: 
+      try:
         rs = self._cursor.fetchone()
       except self._dataObject._DatabaseError, err:
         pass
@@ -189,8 +208,8 @@
 # TODO: and raises this error ALOT need to find out why
 #        raise GDataObjects.ConnectionError, err
 
-      if rs: 
-        if not self._fieldNames: 
+      if rs:
+        if not self._fieldNames:
           self._fieldNames = []
           for t in (self._cursor.description):
             self._fieldNames.append (string.lower(t[0]))
@@ -204,18 +223,18 @@
         return 1
       else:
         return 0
-    else: 
+    else:
       return 0
 
 
-class DBSIG_DataObject(GDataObjects.DataObject): 
+class DBSIG_DataObject(GDataObjects.DataObject):
 
   conditionElements = {
        'add':             (2, 999, '(%s)',                   '+'      ),
        'sub':             (2, 999, '(%s)',                   '-'      ),
        'mul':             (2, 999, '(%s)',                   '*'      ),
        'div':             (2, 999, '(%s)',                   '/'      ),
-       'and':             (1, 999, '(%s)',                   ' AND '  ), 
+       'and':             (1, 999, '(%s)',                   ' AND '  ),
        'or':              (2, 999, '(%s)',                   ' OR '   ), 
        'not':             (1,   1, '(NOT %s)',               None     ), 
        'negate':          (1,   1, '-%s',                    None     ),
Index: gnue/gnuef/src/GFForm.py
diff -u gnue/gnuef/src/GFForm.py:1.130 gnue/gnuef/src/GFForm.py:1.131
--- gnue/gnuef/src/GFForm.py:1.130      Thu Nov  8 04:11:42 2001
+++ gnue/gnuef/src/GFForm.py    Fri Nov  9 00:45:22 2001
@@ -228,7 +228,7 @@
 
       rv = self.__findImportItem(object, form, id) 
       if rv != None:  
-        rv._parent = object 
+        rv._parent = object
         rv._IMPORTED = 1
         object._children.append(rv)
         for key in object._loadedxmlattrs.keys(): 
@@ -335,6 +335,10 @@
         for block in self._blockList:
           GDebug.printMesg(1, "Saving %s"%block.name)
           try:
+          
+            # This gets lost in the Pre-Commit code
+            block._precommitRecord = block._currentRecord
+
             block.processTrigger('Pre-Commit')
             block.processCommit()
           except TriggerError:
Index: gnue/gnuef/src/GFObjects/GFBlock.py
diff -u gnue/gnuef/src/GFObjects/GFBlock.py:1.24 
gnue/gnuef/src/GFObjects/GFBlock.py:1.25
--- gnue/gnuef/src/GFObjects/GFBlock.py:1.24    Thu Nov  8 14:57:00 2001
+++ gnue/gnuef/src/GFObjects/GFBlock.py Fri Nov  9 00:45:22 2001
@@ -72,12 +72,20 @@
     self._rows = 1
 
   def __getitem__(self, index):
-    if index < self._resultSet.getRecordCount():
-      self.jumpRecord(index)
-      return self
-    else:
+
+    cnt = self._resultSet.getRecordCount() - 1
+    if index > cnt:
+      raise IndexError
+
+    self.jumpRecord(index)
+
+    if cnt == index and self.isEmpty():
+      print "Bad, bad, bad"
       raise IndexError
 
+    return self
+
+
   def _buildObject(self):
 
     if hasattr(self, 'rows'):
@@ -160,7 +168,16 @@
       # TODO: It probably shouldn't create a new record :)  Display a message?
       self.newRecord()
 
+
+
+  #
+  # isEmpty()
+  #
+  def isEmpty(self):
+    return self._resultSet.current.isEmpty()
+
   #
+  #
   # Moves the proper record into editing position
   #
   def switchRecord(self, adjustment):
@@ -190,7 +207,7 @@
       #self._recordCount = self._resultSet.getCacheCount()
       self._recordCount = self._resultSet.getRecordCount()
       self.switchRecord(1)
-    elif int(GConfig.get('autocreate')) and not 
self._resultSet.current.isEmpty():
+    elif int(GConfig.get('autocreate')) and not self.isEmpty():
       self.newRecord()
 
   def prevRecord(self):
@@ -215,11 +232,15 @@
       self._resultSet.post()
       self._dataSourceLink._dataObject.commit()
 
+    self._resultSet.setRecord(self._precommitRecord)
+
+    self._recordCount = self._resultSet.getRecordCount()
+
     # If all our records were deleted, create an empty record
-    if not self._resultSet.getRecordCount():
+    if not self._recordCount:
       self.newRecord()
-    else: 
-      self.jumpRecord(self._resultSet.getRecordNumber()-1)
+    else:
+      self.jumpRecord(self._resultSet.getRecordNumber())
 
     self.mode='normal'
 



reply via email to

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