[Zope3-checkins] SVN: Zope3/trunk/src/zope/app/rdb/ More carefully handle case when SQL parameters is a tuple or a list of a tuples

Dmitry Vasiliev dima at hlabs.spb.ru
Sun Aug 21 04:59:07 EDT 2005


Log message for revision 38018:
  More carefully handle case when SQL parameters is a tuple or a list of a tuples
  

Changed:
  U   Zope3/trunk/src/zope/app/rdb/__init__.py
  U   Zope3/trunk/src/zope/app/rdb/tests/test_zopecursor.py

-=-
Modified: Zope3/trunk/src/zope/app/rdb/__init__.py
===================================================================
--- Zope3/trunk/src/zope/app/rdb/__init__.py	2005-08-20 16:32:39 UTC (rev 38017)
+++ Zope3/trunk/src/zope/app/rdb/__init__.py	2005-08-21 08:59:07 UTC (rev 38018)
@@ -296,11 +296,23 @@
         encoding = self.connection.getTypeInfo().getEncoding()
         if isinstance(operation, unicode):
             operation = operation.encode(encoding)
-        if isinstance(parameters, (tuple, list)):
+
+        if isinstance(parameters, list):
+            for i, v in enumerate(parameters):
+                if isinstance(v, unicode):
+                    parameters[i] = v.encode(encoding)
+                elif isinstance(v, tuple):
+                    values = list(v)
+                    for j, v in enumerate(values):
+                        if isinstance(v, unicode):
+                            values[j] = v.encode(encoding)
+                    parameters[i] = tuple(values)
+        elif isinstance(parameters, tuple):
             parameters = list(parameters)
             for i, v in enumerate(parameters):
                 if isinstance(v, unicode):
                     parameters[i] = v.encode(encoding)
+            parameters = tuple(parameters)
         elif isinstance(parameters, dict):
             for k, v in parameters.items():
                 if isinstance(v, unicode):

Modified: Zope3/trunk/src/zope/app/rdb/tests/test_zopecursor.py
===================================================================
--- Zope3/trunk/src/zope/app/rdb/tests/test_zopecursor.py	2005-08-20 16:32:39 UTC (rev 38017)
+++ Zope3/trunk/src/zope/app/rdb/tests/test_zopecursor.py	2005-08-21 08:59:07 UTC (rev 38018)
@@ -138,19 +138,25 @@
         self.typeInfo.setEncoding("windows-1251")
         self.cursor.execute("SELECT * FROM table",
             (u'\u0422\u0435\u0441\u0442',))
-        self.assertEqual('\xd2\xe5\xf1\xf2', self.cursor.cursor.args[0])
+        self.assertEqual(('\xd2\xe5\xf1\xf2',), self.cursor.cursor.args)
 
     def test_cursor_list_args_encoding(self):
         self.typeInfo.setEncoding("windows-1251")
-        self.cursor.execute("SELECT * FROM table",
+        self.cursor.execute(u'\u0422\u0435\u0441\u0442',
             [u'\u0422\u0435\u0441\u0442'])
-        self.assertEqual('\xd2\xe5\xf1\xf2', self.cursor.cursor.args[0])
+        self.assertEqual('\xd2\xe5\xf1\xf2', self.cursor.cursor.query)
+        self.assertEqual(['\xd2\xe5\xf1\xf2'], self.cursor.cursor.args)
 
+        self.cursor.execute("SELECT * FROM table",
+            [(u'\u0422\u0435\u0441\u0442',)])
+        self.assertEqual([('\xd2\xe5\xf1\xf2',)], self.cursor.cursor.args)
+
     def test_cursor_dict_args_encoding(self):
         self.typeInfo.setEncoding("windows-1251")
         self.cursor.execute("SELECT * FROM table",
             {"value": u'\u0422\u0435\u0441\u0442'})
-        self.assertEqual('\xd2\xe5\xf1\xf2', self.cursor.cursor.args["value"])
+        self.assertEqual({"value": '\xd2\xe5\xf1\xf2'},
+            self.cursor.cursor.args)
 
 
 def test_suite():



More information about the Zope3-Checkins mailing list