[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue gnue-common/etc/sample.gnue.conf gnue-comm...
From: |
James Thompson |
Subject: |
gnue gnue-common/etc/sample.gnue.conf gnue-comm... |
Date: |
Wed, 29 Aug 2001 17:23:13 -0700 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: James Thompson <address@hidden> 01/08/29 17:23:12
Modified files:
gnue-common/etc: sample.gnue.conf
gnue-common/src: GDataObjects.py
gnue-common/src/dbdrivers/_dbsig: DBdriver.py
gnue-common/src/dbdrivers/db2: DBdriver.py
gnue-common/src/dbdrivers/empty: DBdriver.py
gnue-common/src/dbdrivers/geas: DBdriver.py
gnue-common/src/dbdrivers/mysql: DBdriver.py
gnue-common/src/dbdrivers/odbc: DBdriver.py
gnuef/samples : helloworld2.gfd
gnuef/samples/inventory/forms: company.gfd
gnuef/src : GFClient.py GFTrigger.py
gnuef/src/GFObjects: GFBlock.py
Log message:
Got master/details working/saving/caching correctly.
(jcater's changes, not jamest's)
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/etc/sample.gnue.conf.diff?cvsroot=OldCVS&tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/GDataObjects.py.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/db2/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/empty/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/geas/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/samples/helloworld2.gfd.diff?cvsroot=OldCVS&tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/samples/inventory/forms/company.gfd.diff?cvsroot=OldCVS&tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFClient.py.diff?cvsroot=OldCVS&tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFTrigger.py.diff?cvsroot=OldCVS&tr1=1.45&tr2=1.46&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnuef/src/GFObjects/GFBlock.py.diff?cvsroot=OldCVS&tr1=1.9&tr2=1.10&r1=text&r2=text
Patches:
Index: gnue/gnue-common/etc/sample.gnue.conf
diff -u gnue/gnue-common/etc/sample.gnue.conf:1.6
gnue/gnue-common/etc/sample.gnue.conf:1.7
--- gnue/gnue-common/etc/sample.gnue.conf:1.6 Sun Aug 12 12:55:26 2001
+++ gnue/gnue-common/etc/sample.gnue.conf Wed Aug 29 17:23:12 2001
@@ -31,6 +31,18 @@
# for a query can be retrieved by doing an Enter-Query twice)
RememberLastQuery = 1
+# Detail data caching behavior:
+#
+# If set to true (default), then always cache detail data in a master/detail
+# set. The benefits of this method is performance. The downsize to this method
+# is that records are cached so any changes made elsewhere are not reflected
+# in the cached records.
+#
+# If set to false, then only cache detail data if it has unposted changes.
+# The benefits of this method are that if another user modifies data and
+# saves, then it will be available to your form much quicker.
+CacheDetailRecords = 1
+
# Hack for db encoding
Encoding=DEFAULT
Index: gnue/gnue-common/src/GDataObjects.py
diff -u gnue/gnue-common/src/GDataObjects.py:1.8
gnue/gnue-common/src/GDataObjects.py:1.9
--- gnue/gnue-common/src/GDataObjects.py:1.8 Sun Aug 12 12:55:26 2001
+++ gnue/gnue-common/src/GDataObjects.py Wed Aug 29 17:23:12 2001
@@ -30,6 +30,7 @@
#
import GDebug
+import GConfig
import string
class LoginError(Exception):
@@ -106,7 +107,12 @@
def hasMaster(self):
return self._masterObject != None
+ # Do not over-ride by vendor code
def createResultSet(self, conditions={}, readOnly=0):
+ return self._createResultSet(conditions, readOnly)
+
+ # Designed to be replaced by vendor-specific code
+ def _createResultSet(self, conditions={}, readOnly=0):
pass
def createEmptyResultSet(self, readOnly=0):
@@ -192,16 +198,23 @@
# Called when new record master in master/detail is queried
def _masterRecordChanged(self, master):
-# self._masterfields = string.split(self.masterlink, ',')
-# self._detailfields = string.split(self.detaillink, ',')
GDebug.printMesg (5, 'Master Record Changed')
criteria = {}
- for i in range(0, len(self._masterfields)):
- GDebug.printMesg(10,"Adding criteria")
- criteria[string.strip(self._detailfields[i])] = \
- master.current.getField(string.strip(self._masterfields[i]))
- GDebug.printMesg(10,master.current.getField(self._masterfields[i]))
- return self.createResultSet(conditions=criteria)
+
+ # If a detail result set has already been created for a particular
+ # master record set, then just return/reuse this old set (after all,
+ # it may contain uncommitted changes)
+ if (not master.current._cachedDetailResultSets.has_key(self)) or \
+ ( not int(GConfig.get('CacheDetailRecords','1')) and \
+ not master.current._cachedDetailResultSets[self].isPending() ):
+ for i in range(0, len(self._masterfields)):
+ GDebug.printMesg(10,"Adding criteria")
+ criteria[string.strip(self._detailfields[i])] = \
+ master.current.getField(string.strip(self._masterfields[i]))
+ GDebug.printMesg(10,master.current.getField(self._masterfields[i]))
+ master.current._cachedDetailResultSets[self] = \
+ self.createResultSet(conditions=criteria)
+ return master.current._cachedDetailResultSets[self]
###########################################################
@@ -367,7 +380,6 @@
# print "GDataObjects ",detail
for detail in self._dataObject._detailObjects:
- print detail
rs = detail[0]._masterRecordChanged(self)
if detail[1]:
detail[1].masterResultSetChanged(self, rs)
@@ -409,6 +421,8 @@
self._modifiedFlags = {} # If field name is present as a key,
# then field has been modified
+ self._cachedDetailResultSets = {}
+
self._initialData = initialData
self._unboundFields = {}
@@ -515,12 +529,15 @@
# It does no harm to attempt to post since nothing will be posted,
# But does this allow sloppy programming?
+ GDebug.printMesg(5,'Preparing to post datasource %s' %
self._parent._dataObject.name)
+
if self.isPending():
+ GDebug.printMesg(5,'Posting datasource %s' %
self._parent._dataObject.name)
self._postChanges()
# Post all details in
- for child in (self._detailObjects):
- child.post()
+ for child in (self._cachedDetailResultSets.keys()):
+ self._cachedDetailResultSets[child].post()
# Sets the ResultSet associated with this master record
Index: gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.9
gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.10
--- gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py:1.9 Wed Aug 29
17:20:36 2001
+++ gnue/gnue-common/src/dbdrivers/_dbsig/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -90,9 +90,18 @@
def _buildInsertStatement(self):
vals = []
fields = []
- for field in self._modifiedFlags.keys():
+
+ # TODO: This should actually only insert modified fields.
+ # TODO: Unfortunately, self._modifiedFlags is not being
+ # TODO: set for new records (address@hidden)
+ #for field in self._modifiedFlags.keys():
+
+ for field in self._fields.keys():
fields.append (field)
- vals.append ("'%s'" % (self._fields[field]))
+ if self._fields[field] == None or self._fields[field] == '':
+ vals.append ("NULL" % (self._fields[field]))
+ else:
+ vals.append ("'%s'" % (self._fields[field]))
return "INSERT INTO %s (%s) VALUES (%s)" % \
(self._parent._dataObject.table, string.join(fields,','), \
@@ -220,7 +229,7 @@
return [['_username', 'User Name',0],['_password', 'Password',1]]
- def createResultSet(self, conditions={}, readOnly=0):
+ def _createResultSet(self, conditions={}, readOnly=0):
try:
cursor = self._dataConnection.cursor()
cursor.execute(self._buildQuery(conditions))
Index: gnue/gnue-common/src/dbdrivers/db2/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.3
gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.4
--- gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.3 Thu Jul 12 20:56:31 2001
+++ gnue/gnue-common/src/dbdrivers/db2/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -40,7 +40,7 @@
DBSIG_DataObject_SQL, DBSIG_DataObject_Object
-class PG_RecordSet(DBSIG_RecordSet):
+class DB2_RecordSet(DBSIG_RecordSet):
def _postChanges(self):
values = []
fields = []
@@ -52,15 +52,15 @@
statement = 'UPDATE %s SET %s WHERE %s = %s'
-class PG_ResultSet(DBSIG_ResultSet):
+class DB2_ResultSet(DBSIG_ResultSet):
def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
DBSIG_ResultSet.__init__(self, dataObject, \
cursor, defaultValues, masterRecordSet)
- self._recordSetClass = PG_RecordSet
+ self._recordSetClass = DB2_RecordSet
#### NOTE: Once PyGreSQL's .fetchone() bug is fixed, this method
- #### should be deleted! Also note the line in PG_DataObject.__init__.
+ #### should be deleted! Also note the line in DB2_DataObject.__init__.
#### Right now, we are having to preload *ALL* rows from a datasource.
def _loadNextRecord(self):
if self._cursor:
@@ -95,12 +95,12 @@
####
-class PG_DataObject(DBSIG_DataObject):
+class DB2_DataObject(DBSIG_DataObject):
def __init__(self):
DBSIG_DataObject.__init__(self)
self._DatabaseError = "Database Error"
#### When the PyGreSQL's .fetchone() bug is fixed, delete following line
- self._resultSetClass = PG_ResultSet
+ self._resultSetClass = DB2_ResultSet
def connect(self, connectData={}):
@@ -114,26 +114,26 @@
raise GDataObjects.ConnectionError, value
-class PG_DataObject_Object(PG_DataObject, \
+class DB2_DataObject_Object(DB2_DataObject, \
DBSIG_DataObject_Object):
def __init__(self):
- # Call DBSIG init first because PG_DataObject needs to overwrite
+ # Call DBSIG init first because DB2_DataObject needs to overwrite
# some of its values
DBSIG_DataObject_Object.__init__(self)
- PG_DataObject.__init__(self)
+ DB2_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
return DBSIG_DataObject_Object._buildQuery(self, conditions)
-class PG_DataObject_SQL(PG_DataObject, \
+class DB2_DataObject_SQL(DB2_DataObject, \
DBSIG_DataObject_SQL):
def __init__(self):
- # Call DBSIG init first because PG_DataObject needs to overwrite
+ # Call DBSIG init first because DB2_DataObject needs to overwrite
# some of its values
DBSIG_DataObject_SQL.__init__(self)
- PG_DataObject.__init__(self)
+ DB2_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
return DBSIG_DataObject_SQL._buildQuery(self, conditions)
@@ -141,254 +141,7 @@
supportedDataObjects = {
- 'object': PG_DataObject_Object,
- 'sql': PG_DataObject_SQL
+ 'object': DB2_DataObject_Object,
+ 'sql': DB2_DataObject_SQL
}
-
-
-
-##########################################################################
-##########################################################################
-##
-## The following is the old-style (pre-GDataObject/GDataSource) driver
-## code. It will soon be deleted after GForms is converted to new style.
-##
-##########################################################################
-##########################################################################
-
-
-class DBdriver:
- def __init__(self):
- GDebug.printMesg(1,"DB2 database driver initializing")
- self.connection = None
- self.cursor = None
- self.uniqueKey = None
- self.oldMaskData = {}
- self.maskCount = 1
-
- def connect(self, dbhost, dbname, dbuser, dbpasswd):
- GDebug.printMesg(1,"connecting")
- try:
- self.connection = DB2.connect(dsn=dbname, uid=dbuser, pwd=dbpasswd)
-# self.connection.cursorclass = DB2.DictCursor
- self.cursor = self.connection.cursor()
- self.triggerExtensions = TriggerExtensions(self.connection)
- except:
- raise DBError, "Connection Error: %s" % (sys.exc_info()[1])
-
- def disconnect(self):
- try:
- self.connection.close()
- except:
- raise DBError, "Disconnect Error: %s" % (sys.exc_info()[1])
-
-
- def beginTransaction(self):
- try:
- pass
- except:
- raise DBError, "Begin Transaction Error: %s" % (sys.exc_info()[1])
-
- def commit(self):
- try:
- self.connection.commit()
- except:
- raise DBError, "Commit Error: %s" % (sys.exc_info()[1])
-
- def rollback(self):
- try:
- self.connection.rollback()
- except:
- raise DBError, "Rollback Error: %s " % (sys.exc_info()[1])
-
-
- def insert(self, table, mask):
- for fieldname in mask.keys():
- if mask[fieldname] == None or len(mask[fieldname]) == 0:
- del mask[fieldname]
-
- command = self.constructSQL('insert', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Insert Error: %s" % (sys.exc_info()[1])
-
- mask[self.uniqueKey] = self.getMaskCount()
- return mask
-
- def delete(self, table, mask):
- command = self.constructSQL('delete', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Deletion Error: %s" % (sys.exc_info()[1])
-
-
- def update(self, table, mask):
- command = self.constructSQL('update', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Update Error: %s " % (sys.exc_info()[1])
-
-
- def getFieldList(self, table):
- l = {}
- try:
- cr = self.connection.cursor()
- cr.execute("select * from %s where 1=2" % table)
- rs = cr.description
- except:
- raise DBError, "Field retrieval error"
- self.getUniqueKey(table)
- for r in rs:
- l[lower(r[0])] = "text"
- return l
-
- # Primary key fetching code, will possibly be used in later implementation
- # if r["Key"] == "PRI":
- # print "PK = %s" % (r["Field"])
- # self.primaryKey[r["Field"]] = ''
- #for d in cr.description:
- # l[d[0]] = 'text'
-
-
- def query(self, table, mask, order_by = None):
- command = self.constructSQL('query',table, mask)
- try:
- self.cursor.execute(command)
- rs = self.cursor.fetchallDict()
- except:
- raise DBError, "Query Error: %s" % (sys.exc_info()[1])
-
- self.oldMaskData = {}
- self.maskCount = 1
- for r in rs:
- r[self.uniqueKey] = self.getMaskCount()
- self.oldMaskData[int(r[self.uniqueKey])] = self.copyDict(r)
- return rs
-
- def constructSQL(self, style, table, mask = None):
- sql = None
- fields = None
- qualifier = None
-
- if style == 'query':
- action = "SELECT "
- location = "FROM %s " % (table)
- fields = " * "
-
- if type(mask) == type({}):
- fields = "%s" % (string.join(mask.keys(), ','))
- fields = string.replace(fields, "%s," % (self.uniqueKey), '')
- fields = "%s " % (fields)
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- if qualifier == None:
- qualifier = "WHERE %s LIKE '%s'" % (fieldname,mask[fieldname])
- else:
- qualifier = "%s AND %s LIKE '%s'" % (qualifier,
fieldname,mask[fieldname])
-
- sql = action + fields + location + (qualifier and qualifier or "")
-
- elif style == 'insert':
- action = "INSERT "
- location = "INTO %s " % (table)
- values = None
-
- if type(mask) == type({}):
- fields = "(%s) " % (string.join(mask.keys(), ','))
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- if values == None:
- values = "VALUES ('%s'" % (mask[fieldname])
- else:
- values = "%s, '%s'" % (values, mask[fieldname])
- values = "%s)" % (values)
-
- sql = action + location + fields + values + (qualifier and qualifier or
"")
-
- elif style == 'update':
- action = "UPDATE "
- location = "%s " % (table)
- values = " SET "
- qualifier = " WHERE "
-
- if type(mask) == type({}):
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- values = "%s %s='%s'," % (values, fieldname, mask[fieldname])
- qualifier = "%s %s='%s' AND" % (qualifier, fieldname,
self.oldMaskData[int(mask[self.uniqueKey])][fieldname])
- values = values[:-1]
- qualifier = qualifier[:-3]
-
- sql = action + location + values + (qualifier and qualifier or "")
-
- elif style == 'delete':
- action = "DELETE FROM "
- location = "%s " % (table)
- values = ""
- qualifier = " WHERE "
-
- if type(mask) == type({}):
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- qualifier = "%s %s='%s' AND" % (qualifier, fieldname,
self.oldMaskData[int(mask[self.uniqueKey])][fieldname])
- qualifier = qualifier[:-3]
-
- sql = action + location + values + (qualifier and qualifier or "")
-
- else:
- print "constructSQL: unsupport SQL statement type"
-
- return sql
-
- def getUniqueKey(self, table):
- self.uniqueKey = "uniqueKey_%s" % (table)
- return self.uniqueKey
-
- def getMaskCount(self):
- self.maskCount = self.maskCount + 1
- return self.maskCount - 1
-
- def copyDict(self, dict):
- nd = {}
- for key in dict.keys():
- nd[key] = dict[key]
-
- return nd
-
- supportedDataObjects = {
- 'object': PG_DataObject_Object,
- 'sql': PG_DataObject_SQL
- }
-
-
-
-#
-# Extensions to Trigger Namespaces
-#
-class TriggerExtensions:
-
- def __init__(self, connection):
- self.__connection = connection
-
- # Return the current date, according to database
-# def getDate(self):
-# pass
-
- # Return a sequence number from sequence 'name'
-# def getSequence(self, name):
-# pass
-
- # Run the SQL statement 'statement'
-# def sql(self, statement):
-# pass
-
-
-
Index: gnue/gnue-common/src/dbdrivers/empty/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/empty/DBdriver.py:1.2
gnue/gnue-common/src/dbdrivers/empty/DBdriver.py:1.3
--- gnue/gnue-common/src/dbdrivers/empty/DBdriver.py:1.2 Thu Aug 23
18:36:07 2001
+++ gnue/gnue-common/src/dbdrivers/empty/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -45,7 +45,7 @@
DataObject.__init__(self)
self.triggerExtensions = TriggerExtensions(self)
- def createResultSet(self, conditions={}, readOnly=0):
+ def _createResultSet(self, conditions={}, readOnly=0):
return NIL_ResultSet(self)
# We don't do logins
Index: gnue/gnue-common/src/dbdrivers/geas/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.8
gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.9
--- gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.8 Wed Aug 29 11:21:22 2001
+++ gnue/gnue-common/src/dbdrivers/geas/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -181,7 +181,7 @@
return [['_username', 'User Name',0],['_password', 'Password',1]]
- def createResultSet(self, conditions={}, readOnly=0):
+ def _createResultSet(self, conditions={}, readOnly=0):
try:
cursor = self._dataConnection.cursor()
cursor.execute(self._buildQuery(conditions))
Index: gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.4
gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.5
--- gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.4 Wed Aug 29
11:21:22 2001
+++ gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -136,252 +136,3 @@
'sql': MySQL_DataObject_SQL
}
-
-
-
-##########################################################################
-##########################################################################
-##
-## The following is the old-style (pre-GDataObject/GDataSource) driver
-## code. It will soon be deleted after GForms is converted to new style.
-##
-##########################################################################
-##########################################################################
-
-
-
-
-
-
-
-import MySQLdb
-import string
-import sys
-#from gnue.forms import GFOptions
-from gnue.forms.GFError import DBError
-
-class DBdriver:
- def __init__(self):
- GDebug.printMesg(1,"MySQL database driver initializing")
- self.connection = None
- self.cursor = None
- self.uniqueKey = None
- self.oldMaskData = {}
- self.maskCount = 1
-
- def connect(self, dbhost, dbname, dbuser, dbpasswd):
- GDebug.printMesg(1,"connecting")
- try:
- self.connection = MySQLdb.connect(db=dbname, host=dbhost, user=dbuser,
passwd=dbpasswd)
- self.connection.cursorclass = MySQLdb.DictCursor
- self.cursor = self.connection.cursor()
- self.triggerExtensions = TriggerExtensions(self.connection)
- except:
- raise DBError, "Connection Error: %s" % (sys.exc_info()[1])
-
- def disconnect(self):
- try:
- self.connection.close()
- except:
- raise DBError, "Disconnect Error: %s" % (sys.exc_info()[1])
-
-
- def beginTransaction(self):
- try:
- pass
- except:
- raise DBError, "Begin Transaction Error: %s" % (sys.exc_info()[1])
-
- def commit(self):
- try:
- pass
- except:
- raise DBError, "Commit Error: %s" % (sys.exc_info()[1])
-
- def rollback(self):
- try:
- pass
- except:
- raise DBError, "Rollback Error: %s " % (sys.exc_info()[1])
-
-
- def insert(self, table, mask):
- for fieldname in mask.keys():
- if mask[fieldname] == None or len(mask[fieldname]) == 0:
- del mask[fieldname]
-
- command = self.constructSQL('insert', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Insert Error: %s" % (sys.exc_info()[1])
-
- mask[self.uniqueKey] = self.getMaskCount()
- return mask
-
- def delete(self, table, mask):
- command = self.constructSQL('delete', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Deletion Error: %s" % (sys.exc_info()[1])
-
-
- def update(self, table, mask):
- command = self.constructSQL('update', table, mask)
- try:
- self.cursor.execute(command)
- except:
- raise DBError, "Update Error: %s " % (sys.exc_info()[1])
-
-
- def getFieldList(self, table):
- l = {}
- try:
- cr = self.connection.cursor()
- cr.execute('DESCRIBE %s' % table)
- rs = cr.fetchallDict()
- except:
- raise DBError, "Field retrieval error"
- self.getUniqueKey(table)
- for r in rs:
- l[r["Field"]] = "text"
- return l
-
- # Primary key fetching code, will possibly be used in later implementation
- # if r["Key"] == "PRI":
- # print "PK = %s" % (r["Field"])
- # self.primaryKey[r["Field"]] = ''
- #for d in cr.description:
- # l[d[0]] = 'text'
-
-
- def query(self, table, mask, order_by = None):
- command = self.constructSQL('query',table, mask)
- try:
- self.cursor.execute(command)
- rs = self.cursor.fetchallDict()
- except:
- raise DBError, "Query Error: %s" % (sys.exc_info()[1])
-
- self.oldMaskData = {}
- self.maskCount = 1
- for r in rs:
- r[self.uniqueKey] = self.getMaskCount()
- self.oldMaskData[int(r[self.uniqueKey])] = self.copyDict(r)
- return rs
-
- def constructSQL(self, style, table, mask = None):
- sql = None
- fields = None
- qualifier = None
-
- if style == 'query':
- action = "SELECT "
- location = "FROM %s " % (table)
- fields = " * "
-
- if type(mask) == type({}):
- fields = "%s" % (string.join(mask.keys(), ','))
- fields = string.replace(fields, "%s," % (self.uniqueKey), '')
- fields = "%s " % (fields)
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- if qualifier == None:
- qualifier = "WHERE %s LIKE '%s'" % (fieldname,mask[fieldname])
- else:
- qualifier = "%s AND %s LIKE '%s'" % (qualifier,
fieldname,mask[fieldname])
-
- sql = action + fields + location + (qualifier and qualifier or "")
-
- elif style == 'insert':
- action = "INSERT "
- location = "INTO %s " % (table)
- values = None
-
- if type(mask) == type({}):
- fields = "(%s) " % (string.join(mask.keys(), ','))
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- if values == None:
- values = "VALUES ('%s'" % (mask[fieldname])
- else:
- values = "%s, '%s'" % (values, mask[fieldname])
- values = "%s)" % (values)
-
- sql = action + location + fields + values + (qualifier and qualifier or
"")
-
- elif style == 'update':
- action = "UPDATE "
- location = "%s " % (table)
- values = " SET "
- qualifier = " WHERE "
-
- if type(mask) == type({}):
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- values = "%s %s='%s'," % (values, fieldname, mask[fieldname])
- qualifier = "%s %s='%s' AND" % (qualifier, fieldname,
self.oldMaskData[int(mask[self.uniqueKey])][fieldname])
- values = values[:-1]
- qualifier = qualifier[:-3]
-
- sql = action + location + values + (qualifier and qualifier or "")
-
- elif style == 'delete':
- action = "DELETE FROM "
- location = "%s " % (table)
- values = ""
- qualifier = " WHERE "
-
- if type(mask) == type({}):
- for fieldname in mask.keys():
- if fieldname != self.uniqueKey:
- if mask[fieldname] != None and len(mask[fieldname]):
- qualifier = "%s %s='%s' AND" % (qualifier, fieldname,
self.oldMaskData[int(mask[self.uniqueKey])][fieldname])
- qualifier = qualifier[:-3]
-
- sql = action + location + values + (qualifier and qualifier or "")
-
- else:
- print "constructSQL: unsupport SQL statement type"
-
- return sql
-
- def getUniqueKey(self, table):
- self.uniqueKey = "uniqueKey_%s" % (table)
- return self.uniqueKey
-
- def getMaskCount(self):
- self.maskCount = self.maskCount + 1
- return self.maskCount - 1
-
- def copyDict(self, dict):
- nd = {}
- for key in dict.keys():
- nd[key] = dict[key]
-
- return nd
-
-#
-# Extensions to Trigger Namespaces
-#
-class TriggerExtensions:
-
- def __init__(self, connection):
- self.__connection = connection
-
- # Return the current date, according to database
-# def getDate(self):
-# pass
-
- # Return a sequence number from sequence 'name'
-# def getSequence(self, name):
-# pass
-
- # Run the SQL statement 'statement'
-# def sql(self, statement):
-# pass
-
Index: gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py:1.3
gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py:1.4
--- gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py:1.3 Thu Jul 12 20:56:31 2001
+++ gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py Wed Aug 29 17:23:12 2001
@@ -268,6 +268,3 @@
# def sql(self, statement):
# pass
-
-
-
Index: gnue/gnuef/samples/helloworld2.gfd
diff -u gnue/gnuef/samples/helloworld2.gfd:1.5
gnue/gnuef/samples/helloworld2.gfd:1.6
--- gnue/gnuef/samples/helloworld2.gfd:1.5 Thu Jun 7 18:36:52 2001
+++ gnue/gnuef/samples/helloworld2.gfd Wed Aug 29 17:23:12 2001
@@ -13,7 +13,10 @@
#Populate User Name from Name
#
from string import *
-login.fields.user = address.fields.name
+print login.fields.user
+print address.fields.name
+print self._value
+#login.fields.user = address.fields.name
</trigger>
<datasource name="nil" cache="5" />
@@ -36,9 +39,9 @@
#User name validation trigger
#
from string import *
-print login.fields.__class__
-print lower(login.fields.user)
-print login.fields.user[:3]
+#print login.fields.__class__
+#print lower(login.fields.user)
+#print login.fields.user[:3]
if lower(login.fields.user)[:3] != lower(address.fields.name)[:3]:
print "ERROR! First 3 letters of user name MUST"
print " match first three letters of full name."
Index: gnue/gnuef/samples/inventory/forms/company.gfd
diff -u gnue/gnuef/samples/inventory/forms/company.gfd:1.2
gnue/gnuef/samples/inventory/forms/company.gfd:1.3
--- gnue/gnuef/samples/inventory/forms/company.gfd:1.2 Sun Jan 14 15:32:37 2001
+++ gnue/gnuef/samples/inventory/forms/company.gfd Wed Aug 29 17:23:12 2001
@@ -55,11 +55,13 @@
<tip>Please enter the value for zip code.</tip>
</options>
<trigger type ="Pre-FocusOut">
-ziplookup.clear()
-ziplookup.setField(0,"zipcode",self.value,TRUE)
-ziplookup.query()
-state = ziplookup.getField(0,"state")
-city = ziplookup.getField(0,"city")
+print "zipcode",self._value
+#ziplookup.clear()
+#ziplookup.setField(0,"zipcode",self.value,TRUE)
+rs = ziplookup.createResultSet({"zipcode":self.value})
+rs.getFirstRecord()
+state = rs.current.getField("state")
+city = rs.current.getField("city")
blckcompany.fields.ntrycity = city
blckcompany.fields.ntrystate = state
</trigger>
Index: gnue/gnuef/src/GFClient.py
diff -u gnue/gnuef/src/GFClient.py:1.25 gnue/gnuef/src/GFClient.py:1.26
--- gnue/gnuef/src/GFClient.py:1.25 Sun Aug 12 12:55:27 2001
+++ gnue/gnuef/src/GFClient.py Wed Aug 29 17:23:12 2001
@@ -34,7 +34,7 @@
#
# Copyright (c) 2000 Free Software Foundation
#
-# $Id: GFClient.py,v 1.25 2001/08/12 19:55:27 jamest Exp $
+# $Id: GFClient.py,v 1.26 2001/08/30 00:23:12 jamest Exp $
#
import pstats
@@ -157,6 +157,12 @@
return self._lastSerialNumber
if __name__ == '__main__':
+
+ print "*" * 60
+ print "*" * 60
+ print "*" * 60
+ print "*" * 60
+
GFClient().run()
Index: gnue/gnuef/src/GFObjects/GFBlock.py
diff -u gnue/gnuef/src/GFObjects/GFBlock.py:1.9
gnue/gnuef/src/GFObjects/GFBlock.py:1.10
--- gnue/gnuef/src/GFObjects/GFBlock.py:1.9 Sun Aug 12 12:55:27 2001
+++ gnue/gnuef/src/GFObjects/GFBlock.py Wed Aug 29 17:23:12 2001
@@ -64,6 +64,7 @@
self._datasource = None
self._resultSet = None
+
self._dataSourceLink = None
self.mode = 'normal'
self._entryList = []
@@ -198,6 +199,7 @@
self.switchRecord(-self._currentRecord)
self.mode='normal'
+ #self.switchRecord(0)
#
# processRollback
@@ -281,7 +283,6 @@
self._recordCount = self._resultSet.getCacheCount()
self.processTrigger('Post-Query')
-
Index: gnue/gnuef/src/GFTrigger.py
diff -u gnue/gnuef/src/GFTrigger.py:1.45 gnue/gnuef/src/GFTrigger.py:1.46
--- gnue/gnuef/src/GFTrigger.py:1.45 Sun Aug 12 12:55:27 2001
+++ gnue/gnuef/src/GFTrigger.py Wed Aug 29 17:23:12 2001
@@ -280,6 +280,7 @@
self.__dict__['helper'] = helper( object )
def __getattr__(self,name):
+ print "GFTrigger.py - Hi"
return self.__dict__['helper'].getattribute(name)
def __setattr__(self,name,value):
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue gnue-common/etc/sample.gnue.conf gnue-comm...,
James Thompson <=