commit-gnue
[Top][All Lists]
Advanced

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

r5569 - in trunk/gnue-common/src: . datasources/drivers/DBSIG2


From: reinhard
Subject: r5569 - in trunk/gnue-common/src: . datasources/drivers/DBSIG2
Date: Mon, 29 Mar 2004 16:15:19 -0600 (CST)

Author: reinhard
Date: 2004-03-29 16:15:18 -0600 (Mon, 29 Mar 2004)
New Revision: 5569

Modified:
   trunk/gnue-common/src/GCConfig.py
   trunk/gnue-common/src/datasources/drivers/DBSIG2/RecordSet.py
Log:
Added option to use parameters in DBSIG2 drivers.  (Only for INSERT, DELETE and
UPDATE statements for now)


Modified: trunk/gnue-common/src/GCConfig.py
===================================================================
--- trunk/gnue-common/src/GCConfig.py   2004-03-29 21:40:59 UTC (rev 5568)
+++ trunk/gnue-common/src/GCConfig.py   2004-03-29 22:15:18 UTC (rev 5569)
@@ -47,6 +47,13 @@
     'Typecast'   : GTypecast.boolean,
     'Default'    : 1 },
 
+  { 'Name'       : 'useParameters',
+    'Type'       : 'Setting',
+    'Comment'    : 'Use parameters in DBSIG2 database drivers',
+    'Description': '1 = use parameters (experimental), 0 = do not use them',
+    'Typecast'   : GTypecast.boolean,
+    'Default'    : '' },              # Default 0 is transformed to '0'
+
   { 'Name'       : 'textEncoding',
     'Type'       : 'Setting',
     'Comment'    : 'Encoding for XML headers and for fonts in forms. Like 
iso8859-1, iso8859-13.',

Modified: trunk/gnue-common/src/datasources/drivers/DBSIG2/RecordSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/DBSIG2/RecordSet.py       
2004-03-29 21:40:59 UTC (rev 5568)
+++ trunk/gnue-common/src/datasources/drivers/DBSIG2/RecordSet.py       
2004-03-29 22:15:18 UTC (rev 5569)
@@ -31,11 +31,12 @@
 
 __all__ = ['RecordSet']
 
+from types import *
+
 from gnue.common.datasources import GConditions, Exceptions
 from gnue.common.datasources.drivers.Base import RecordSet as BaseRecordSet
 from gnue.common.apps import GDebug
 import string
-import types
 
 
 ######################################################################
@@ -47,16 +48,23 @@
   def _postChanges(self):
     if not self.isPending(): return
     if self._deleteFlag:
-      statement = self._buildDeleteStatement()
+      s = self._buildDeleteStatement()
     elif self._insertFlag:
-      statement = self._buildInsertStatement()
+      s = self._buildInsertStatement()
     elif self._updateFlag:
-      statement = self._buildUpdateStatement()
+      s = self._buildUpdateStatement()
 
+    if isinstance (s, TupleType):
+      # when useParameters is not set
+      (statement, parameters) = s
+    else:
+      # when useParameters is set
+      (statement, parameters) = (s, None)
+
     GDebug.printMesg(5, "_postChanges: statement=%s" % statement)
 
     try:
-      self._parent._dataObject._connection.sql (statement)
+      self._parent._dataObject._connection.sql (statement, parameters)
 
       # Set _initialData to be the just-now posted values
       if not self._deleteFlag:
@@ -78,58 +86,116 @@
   # as default.  Note that these functions are specific to DB-SIG based
   # drivers (i.e., these functions are not in the base RecordSet class)
 
-  def _buildDeleteStatement(self):
+  # This function is only used with "useParameters" set in gnue.conf
+  def _where (self):
     if self._initialData.has_key(self._parent._dataObject._primaryIdField):
       where = [self._parent._dataObject._primaryIdFormat % \
-          self._initialData[self._parent._dataObject._primaryIdField]  ]
+               self._initialData [self._parent._dataObject._primaryIdField]]
+      parameters = {}
     else:
       where = []
-      for field in self._initialData.keys():
-        if self._parent.isFieldBound(field):
-          if self._initialData[field] == None:
+      parameters = {}
+      for field in self._initialData.keys ():
+        if self._parent.isFieldBound (field):
+          if self._initialData [field] == None:
             where.append ("%s IS NULL" % field)
           else:
-            where.append ("%s=%s" % (field,
-              self._parent._dataObject._toSqlString(self._initialData[field])))
+            key = 'old_' + field
+            where.append ("%s=%%(%s)s" % (field, key))
+            parameters [key] = self._initialData [field]
 
-    statement = "DELETE FROM %s WHERE %s" % \
-       (self._parent._dataObject.table, string.join(where,' AND ') )
-    return statement
+    return (string.join (where, ' AND '), parameters)
 
+  def _buildDeleteStatement(self):
+    if gConfig ('useParameters'):
+      (where, parameters) = self._where
+      statement = 'DELETE FROM %s WHERE %s' % \
+                  (self._parent._dataObject.table, where)
+      return (statement, parameters)
+    else:
+      if self._initialData.has_key(self._parent._dataObject._primaryIdField):
+        where = [self._parent._dataObject._primaryIdFormat % \
+            self._initialData[self._parent._dataObject._primaryIdField]  ]
+      else:
+        where = []
+        for field in self._initialData.keys():
+          if self._parent.isFieldBound(field):
+            if self._initialData[field] == None:
+              where.append ("%s IS NULL" % field)
+            else:
+              where.append ("%s=%s" % (field,
+                
self._parent._dataObject._toSqlString(self._initialData[field])))
+
+      statement = "DELETE FROM %s WHERE %s" % \
+         (self._parent._dataObject.table, string.join(where,' AND ') )
+      return statement
+
   def _buildInsertStatement(self):
-    vals = []
-    fields = []
+    if gConfig ('useParameters'):
+      fields = []
+      values = []
+      parameters = {}
 
-    for field in self._modifiedFlags.keys():
-      if self._parent.isFieldBound(field):
-        fields.append (field)
-        if self._fields[field] == None or self._fields[field] == '':
-          vals.append ("NULL") #  % (self._fields[field]))
-        else:
-          vals.append 
(self._parent._dataObject._toSqlString(self._fields[field]))
+      for field in self._modifiedFlags.keys ():
+        if self._parent.isFieldBound (field):
+          key = 'new_' + field
+          fields.append (field)
+          values.append ('%%(%s)s' % key)
+          parameters [key] = self._fields [field]
 
-    return "INSERT INTO %s (%s) VALUES (%s)" % \
-       (self._parent._dataObject.table, string.join(fields,','), \
-        string.join(vals,',') )
+      statement = "INSERT INTO %s (%s) VALUES (%s)" % \
+                  (self._parent._dataObject.table,
+                   string.join (fields,', '),
+                   string.join (values,', '))
 
+      return (statement, parameters)
+    else:
+      vals = []
+      fields = []
+
+      for field in self._modifiedFlags.keys():
+        if self._parent.isFieldBound(field):
+          fields.append (field)
+          if self._fields[field] == None or self._fields[field] == '':
+            vals.append ("NULL") #  % (self._fields[field]))
+          else:
+            vals.append 
(self._parent._dataObject._toSqlString(self._fields[field]))
+
+      return "INSERT INTO %s (%s) VALUES (%s)" % \
+         (self._parent._dataObject.table, string.join(fields,','), \
+          string.join(vals,',') )
+
   def _buildUpdateStatement(self):
-    updates = []
-    for field in self._modifiedFlags.keys():
-      updates.append ("%s=%s" % (field,
-         self._parent._dataObject._toSqlString(self._fields[field])))
+    if gConfig ('useParameters'):
+      (where, parameters) = self._where ()
+      updates = []
+      for field in self._modifiedFlags.keys():
+        key = 'new_' + field
+        updates.append ("%s=%%(%s)s" % (field, key))
+        parameters [key] = self._fields [field]
 
-    if self._parent._dataObject._primaryIdField:
-      where = [self._parent._dataObject._primaryIdFormat % \
-          self._initialData[self._parent._dataObject._primaryIdField]  ]
+      statement = "UPDATE %s SET %s WHERE %s" % \
+                  (self._parent._dataObject.table,
+                   string.join (updates, ', '),
+                   where)
+      return (statement, parameters)
     else:
-      where = []
-      for field in self._initialData.keys():
-        if self._initialData[field] == None:
-          where.append ("%s IS NULL" % field)
-        else:
-          where.append ("%s=%s" % (field, 
self._parent._dataObject._toSqlString(self._initialData[field])))
+      updates = []
+      for field in self._modifiedFlags.keys():
+        updates.append ("%s=%s" % (field,
+           self._parent._dataObject._toSqlString(self._fields[field])))
 
-    return "UPDATE %s SET %s WHERE %s" % \
-       (self._parent._dataObject.table, string.join(updates,','), \
-        string.join(where,' AND ') )
+      if self._parent._dataObject._primaryIdField:
+        where = [self._parent._dataObject._primaryIdFormat % \
+            self._initialData[self._parent._dataObject._primaryIdField]  ]
+      else:
+        where = []
+        for field in self._initialData.keys():
+          if self._initialData[field] == None:
+            where.append ("%s IS NULL" % field)
+          else:
+            where.append ("%s=%s" % (field, 
self._parent._dataObject._toSqlString(self._initialData[field])))
 
+      return "UPDATE %s SET %s WHERE %s" % \
+         (self._parent._dataObject.table, string.join(updates,','), \
+          string.join(where,' AND ') )





reply via email to

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