[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/gnue-common/src/dbdrivers db2/DBdriver.py ...
From: |
Jason Cater |
Subject: |
gnue/gnue-common/src/dbdrivers db2/DBdriver.py ... |
Date: |
Thu, 12 Jul 2001 20:56:31 -0700 |
CVSROOT: /home/cvs
Module name: gnue
Changes by: Jason Cater <address@hidden> 01/07/12 20:56:31
Modified files:
gnue-common/src/dbdrivers/db2: DBdriver.py
gnue-common/src/dbdrivers/geas: DBdriver.py
gnue-common/src/dbdrivers/mysql: DBdriver.py
gnue-common/src/dbdrivers/odbc: DBdriver.py
gnue-common/src/dbdrivers/oracle: DBdriver.py
gnue-common/src/dbdrivers/postgresql: DBdriver.py
Log message:
Added DBDriver-specific extensions to Form trigger namespaces; if your
database connection is called gnue, then your trigger namespace will contain an
object called gnue. It's methods will be the methods defined in the
DBdriver.TriggerExtensions class; e.g., gnue.getDate(); Oracle's
TriggerExtension's class defines getDate() -- return current date according to
database, getSequence(seqName) -- return the next sequence number for sequence
named seqName, and sql(statement) -- execute raw SQL statement.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/db2/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.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-common/src/dbdrivers/mysql/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/odbc/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/oracle/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/postgresql/DBdriver.py.diff?cvsroot=OldCVS&tr1=1.8&tr2=1.9&r1=text&r2=text
Patches:
Index: gnue/gnue-common/src/dbdrivers/db2/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.2
gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.3
--- gnue/gnue-common/src/dbdrivers/db2/DBdriver.py:1.2 Mon Jun 25 21:32:46 2001
+++ gnue/gnue-common/src/dbdrivers/db2/DBdriver.py Thu Jul 12 20:56:31 2001
@@ -1,366 +1,394 @@
-#
-# This file is part of GNU Enterprise.
-#
-# GNU Enterprise is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation; either
-# version 2, or (at your option) any later version.
-#
-# 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
-# PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public
-# License along with program; see the file COPYING. If not,
-# write to the Free Software Foundation, Inc., 59 Temple Place
-# - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright 2000 Free Software Foundation
-#
-# FILE:
-# DSgedi.py
-#
-# DESCRIPTION:
-# Driver to provide access to data stored in a DB2 database
-#
-# NOTES:
-#
-
-import DB2
-import string
-import sys
-
-from string import lower
-# from gnue.forms import GFOptions
-from gnue.forms.GFError import DBError
-from gnue.common import GDebug, GDataObjects
-from gnue.common.dbdrivers._dbsig.DBdriver \
- import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
- DBSIG_DataObject_SQL, DBSIG_DataObject_Object
-
-
-class PG_RecordSet(DBSIG_RecordSet):
- def _postChanges(self):
- values = []
- fields = []
- fieldString = ""
- for field in (self._modifiedFields.keys()):
- fields.append(field + " = %s")
- values.append(self._fields[field])
-
- statement = 'UPDATE %s SET %s WHERE %s = %s'
-
-
-class PG_ResultSet(DBSIG_ResultSet):
- def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
- DBSIG_ResultSet.__init__(self, dataObject, \
- cursor, defaultValues, masterRecordSet)
- self._recordSetClass = PG_RecordSet
-
-
- #### NOTE: Once PyGreSQL's .fetchone() bug is fixed, this method
- #### should be deleted! Also note the line in PG_DataObject.__init__.
- #### Right now, we are having to preload *ALL* rows from a datasource.
- def _loadNextRecord(self):
- if self._cursor:
- try:
- rsall = self._cursor.fetchall()
- except self._DatabaseError, err:
- raise GDataObjects.ConnectionError, err
-
- if len(rsall):
- for rs in(rsall):
- GDebug.printMesg(5, "New row retrieved: %s" % rs)
- if not self._fieldNames:
- self._fieldNames = []
- for t in(self._cursor.description):
- self._fieldNames.append(t[0])
- self._boundFields[lower(t[0])] = ""
- GDebug.printMesg(5, "Field names set to %s" % self._fieldNames)
- if rs:
- i = 0
- dict = {}
- for f in(rs):
- dict[self._fieldNames[i]] = f
- i = i + 1
-
self._cachedRecords.append(self._recordSetClass(parent=self,initialData=dict))
- else:
- return 0
- return 1
- else:
- return 0
- else:
- return 0
-####
-
-
-class PG_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
-
-
- def connect(self, connectData={}):
- GDebug.printMesg(1,"DB2 database driver initializing")
- try:
- self._dataConnection = DB2.connect(uid=connectData['_username'],
- pwd=connectData['_password'],
- dsn=connectData['dbname'])
- except self._DatabaseError, value:
- raise GDataObjects.ConnectionError, value
-
-
-class PG_DataObject_Object(PG_DataObject, \
- DBSIG_DataObject_Object):
-
- def __init__(self):
- # Call DBSIG init first because PG_DataObject needs to overwrite
- # some of its values
- DBSIG_DataObject_Object.__init__(self)
- PG_DataObject.__init__(self)
-
- def _buildQuery(self, conditions={}):
- return DBSIG_DataObject_Object._buildQuery(self, conditions)
-
-
-class PG_DataObject_SQL(PG_DataObject, \
- DBSIG_DataObject_SQL):
- def __init__(self):
- # Call DBSIG init first because PG_DataObject needs to overwrite
- # some of its values
- DBSIG_DataObject_SQL.__init__(self)
- PG_DataObject.__init__(self)
-
- def _buildQuery(self, conditions={}):
- return DBSIG_DataObject_SQL._buildQuery(self, conditions)
-
-
-
-supportedDataObjects = {
- 'object': PG_DataObject_Object,
- 'sql': PG_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()
- 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
- }
+#
+# This file is part of GNU Enterprise.
+#
+# GNU Enterprise is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation; either
+# version 2, or (at your option) any later version.
+#
+# 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
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with program; see the file COPYING. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place
+# - Suite 330, Boston, MA 02111-1307, USA.
+#
+# Copyright 2000 Free Software Foundation
+#
+# FILE:
+# DSgedi.py
+#
+# DESCRIPTION:
+# Driver to provide access to data stored in a DB2 database
+#
+# NOTES:
+#
+
+import DB2
+import string
+import sys
+
+from string import lower
+# from gnue.forms import GFOptions
+from gnue.forms.GFError import DBError
+from gnue.common import GDebug, GDataObjects
+from gnue.common.dbdrivers._dbsig.DBdriver \
+ import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
+ DBSIG_DataObject_SQL, DBSIG_DataObject_Object
+
+
+class PG_RecordSet(DBSIG_RecordSet):
+ def _postChanges(self):
+ values = []
+ fields = []
+ fieldString = ""
+ for field in (self._modifiedFields.keys()):
+ fields.append(field + " = %s")
+ values.append(self._fields[field])
+
+ statement = 'UPDATE %s SET %s WHERE %s = %s'
+
+
+class PG_ResultSet(DBSIG_ResultSet):
+ def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
+ DBSIG_ResultSet.__init__(self, dataObject, \
+ cursor, defaultValues, masterRecordSet)
+ self._recordSetClass = PG_RecordSet
+
+
+ #### NOTE: Once PyGreSQL's .fetchone() bug is fixed, this method
+ #### should be deleted! Also note the line in PG_DataObject.__init__.
+ #### Right now, we are having to preload *ALL* rows from a datasource.
+ def _loadNextRecord(self):
+ if self._cursor:
+ try:
+ rsall = self._cursor.fetchall()
+ except self._DatabaseError, err:
+ raise GDataObjects.ConnectionError, err
+
+ if len(rsall):
+ for rs in(rsall):
+ GDebug.printMesg(5, "New row retrieved: %s" % rs)
+ if not self._fieldNames:
+ self._fieldNames = []
+ for t in(self._cursor.description):
+ self._fieldNames.append(t[0])
+ self._boundFields[lower(t[0])] = ""
+ GDebug.printMesg(5, "Field names set to %s" % self._fieldNames)
+ if rs:
+ i = 0
+ dict = {}
+ for f in(rs):
+ dict[self._fieldNames[i]] = f
+ i = i + 1
+
self._cachedRecords.append(self._recordSetClass(parent=self,initialData=dict))
+ else:
+ return 0
+ return 1
+ else:
+ return 0
+ else:
+ return 0
+####
+
+
+class PG_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
+
+
+ def connect(self, connectData={}):
+ GDebug.printMesg(1,"DB2 database driver initializing")
+ try:
+ self._dataConnection = DB2.connect(uid=connectData['_username'],
+ pwd=connectData['_password'],
+ dsn=connectData['dbname'])
+ self.triggerExtensions = TriggerExtensions(self._dataConnection)
+ except self._DatabaseError, value:
+ raise GDataObjects.ConnectionError, value
+
+
+class PG_DataObject_Object(PG_DataObject, \
+ DBSIG_DataObject_Object):
+
+ def __init__(self):
+ # Call DBSIG init first because PG_DataObject needs to overwrite
+ # some of its values
+ DBSIG_DataObject_Object.__init__(self)
+ PG_DataObject.__init__(self)
+
+ def _buildQuery(self, conditions={}):
+ return DBSIG_DataObject_Object._buildQuery(self, conditions)
+
+
+class PG_DataObject_SQL(PG_DataObject, \
+ DBSIG_DataObject_SQL):
+ def __init__(self):
+ # Call DBSIG init first because PG_DataObject needs to overwrite
+ # some of its values
+ DBSIG_DataObject_SQL.__init__(self)
+ PG_DataObject.__init__(self)
+
+ def _buildQuery(self, conditions={}):
+ return DBSIG_DataObject_SQL._buildQuery(self, conditions)
+
+
+
+supportedDataObjects = {
+ 'object': PG_DataObject_Object,
+ 'sql': PG_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/geas/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.5
gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.6
--- gnue/gnue-common/src/dbdrivers/geas/DBdriver.py:1.5 Wed Jun 27 18:58:51 2001
+++ gnue/gnue-common/src/dbdrivers/geas/DBdriver.py Thu Jul 12 20:56:31 2001
@@ -21,7 +21,7 @@
#
# GEAS database driver
#
-# $Id: DBdriver.py,v 1.5 2001/06/28 01:58:51 jamest Exp $
+# $Id: DBdriver.py,v 1.6 2001/07/13 03:56:31 jcater Exp $
#
import sys
@@ -82,6 +82,7 @@
## Now make connection
#self.database.connect()
+ self.triggerExtensions = TriggerExtensions(self.database)
except (GEAS.ServerError,
GEAS.AuthenticationError),ex:
print "Failed to connect to database. Exiting."
@@ -253,3 +254,29 @@
i = ord(c)
r = r + h[(i >> 4) & 0xF] + h[i & 0xF]
return r
+
+
+
+#
+# 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/mysql/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.2
gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.3
--- gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py:1.2 Mon Jun 25
21:32:46 2001
+++ gnue/gnue-common/src/dbdrivers/mysql/DBdriver.py Thu Jul 12 20:56:31 2001
@@ -50,6 +50,7 @@
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])
@@ -238,3 +239,29 @@
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.2
gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py:1.3
--- gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py:1.2 Mon Jun 25 21:32:46 2001
+++ gnue/gnue-common/src/dbdrivers/odbc/DBdriver.py Thu Jul 12 20:56:31 2001
@@ -46,6 +46,7 @@
try:
self.connection = self.driver.DriverConnect(self.dsn)
self.cursor = self.connection.cursor()
+ self.triggerExtensions = TriggerExtensions(self.connection)
except:
raise DBError, "Database Error: %s" % (sys.exc_info()[1])
@@ -245,3 +246,28 @@
self.driver = __import__("ODBC/%s" % (driver[1]))
if len(driver) > 2:
self.dsn = driver[2]
+
+
+#
+# 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/oracle/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/oracle/DBdriver.py:1.4
gnue/gnue-common/src/dbdrivers/oracle/DBdriver.py:1.5
--- gnue/gnue-common/src/dbdrivers/oracle/DBdriver.py:1.4 Tue Jul 10
14:30:10 2001
+++ gnue/gnue-common/src/dbdrivers/oracle/DBdriver.py Thu Jul 12 20:56:31 2001
@@ -47,7 +47,8 @@
GFDebug.printMesg(10,"Oracle DBdriver: Connect String: "
+ dbuser + "/" + dbpasswd + "@" + dbname)
self.connectWithString (dbuser + "/" + dbpasswd + "@" + dbname)
-
+ self.triggerExtensions = TriggerExtensions(self.connection)
+
def connectWithString(self, dbConnectString):
try:
self.connection = DCOracle.Connect(dbConnectString)
@@ -263,3 +264,36 @@
def getMaskCount(self):
self.maskCount = self.maskCount + 1
return self.maskCount - 1
+
+
+
+#
+# Extensions to Trigger Namespaces
+#
+class TriggerExtensions:
+
+ def __init__(self, connection):
+ self.__connection = connection
+
+ # Return the current date, according to database
+ def getDate(self):
+ cursor = self.__connection.cursor()
+ command = "select sysdate from dual"
+ cursor.execute(command)
+ return cursor.fetchone()[0]
+
+ # Return a sequence number from sequence 'name'
+ def getSequence(self, name):
+ cursor = self.__connection.cursor()
+ command = "select %s.nextval from dual" % name
+ cursor.execute(command)
+ return cursor.fetchone()[0]
+
+ # Run the SQL statement 'statement'
+ def sql(self, statement):
+ self.__connection.cursor().execute(statement)
+
+
+
+
+
Index: gnue/gnue-common/src/dbdrivers/postgresql/DBdriver.py
diff -u gnue/gnue-common/src/dbdrivers/postgresql/DBdriver.py:1.8
gnue/gnue-common/src/dbdrivers/postgresql/DBdriver.py:1.9
--- gnue/gnue-common/src/dbdrivers/postgresql/DBdriver.py:1.8 Wed Jul 4
17:24:11 2001
+++ gnue/gnue-common/src/dbdrivers/postgresql/DBdriver.py Thu Jul 12
20:56:31 2001
@@ -109,6 +109,7 @@
password=connectData['_password'],
host=connectData['host'],
database=connectData['dbname'])
+ self.triggerExtensions = TriggerExtensions(self._dataConnection)
except self._DatabaseError, value:
raise GDataObjects.ConnectionError, value
@@ -138,16 +139,44 @@
return DBSIG_DataObject_SQL._buildQuery(self, conditions)
+#
+# 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
+
+
+######################################
+#
+# The following hashes describe
+# this driver's characteristings.
+#
+######################################
+
+#
+# All datasouce "types" and corresponding DataObject class
+#
supportedDataObjects = {
'object': PG_DataObject_Object,
'sql': PG_DataObject_SQL
}
-
-
-
##########################################################################
##########################################################################
##
@@ -175,7 +204,8 @@
self.connection = pg.DB(dbname, host, -1, None, None, user, passwd)
if GConfig.get('Encoding') != 'DEFAULT':
self.connection.query("set encoding to '%s'" % GConfig.get('Encoding'))
-
+
+ self.triggerExtensions = TriggerExtensions(self.connection)
except pg.error, value:
raise GDataObjects.ConnectionError, value
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/gnue-common/src/dbdrivers db2/DBdriver.py ...,
Jason Cater <=