[Top][All Lists]
[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'