commit-gnue
[Top][All Lists]
Advanced

[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
 



reply via email to

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