[Top][All Lists]
[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 ') )
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5569 - in trunk/gnue-common/src: . datasources/drivers/DBSIG2,
reinhard <=