OSDN Git Service

> I am backing out this patch. Please resubmit with this corrected. Thanks.
authorBruce Momjian <bruce@momjian.us>
Tue, 19 Mar 2002 02:47:57 +0000 (02:47 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 19 Mar 2002 02:47:57 +0000 (02:47 +0000)
>
> I am running Python 1.5.

Therein lies the problem... :)

Since it appears you have the requirement of supporting old python
versions, attached is just the pgdb.py part of the patch (with a fix for
DateTime handling). It has the same functionality but certainly won't be
quite as fast. Given the absence of _PyString_Join in python1.5, it's a
pain to get the C variants working for all versions. The pgdb.py patch
does leaves the hooks in, should someone wish to do the optimization at a
later point.

Elliot Lee

src/interfaces/python/pgdb.py

index 85ff765..2772809 100644 (file)
@@ -260,32 +260,40 @@ class pgdbCursor:
                pass
 
 
-def _quote(x):
-       if type(x) == types.StringType:
-               x = "'" + string.replace(
-                               string.replace(str(x), '\\', '\\\\'), "'", "''") + "'"
-
-       elif type(x) in (types.IntType, types.LongType, types.FloatType):
-               pass
-       elif x is None:
-               x = 'NULL'
-       elif hasattr(x, '__pg_repr__'):
-               x = x.__pg_repr__()
-       else:
-               raise InterfaceError, 'do not know how to handle type %s' % type(x)
-
-       return x
-
-def _quoteparams(s, params):
-       if hasattr(params, 'has_key'):
-               x = {}
-               for k, v in params.items():
-                       x[k] = _quote(v)
-               params = x
-       else:
-               params = tuple(map(_quote, params))
-
-       return s % params
+try:
+  _quote = _pg.quote_fast
+  _quoteparams = _pg.quoteparams_fast
+except (NameError, AttributeError):
+  def _quote(x):
+         if type(x) == DateTime.DateTimeType:
+               x = str(x)
+         if type(x) == types.StringType:
+                 x = "'" + string.replace(
+                                 string.replace(str(x), '\\', '\\\\'), "'", "''") + "'"
+
+         elif type(x) in (types.IntType, types.LongType, types.FloatType):
+                 pass
+         elif x is None:
+                 x = 'NULL'
+         elif type(x) in (types.ListType, types.TupleType):
+                 x = '(%s)' % string.join(map(lambda x: str(_quote(x)), x), ',')
+         elif hasattr(x, '__pg_repr__'):
+                 x = x.__pg_repr__()
+         else:
+                 raise InterfaceError, 'do not know how to handle type %s' % type(x)
+
+         return x
+
+  def _quoteparams(s, params):
+         if hasattr(params, 'has_key'):
+                 x = {}
+                 for k, v in params.items():
+                         x[k] = _quote(v)
+                 params = x
+         else:
+                 params = tuple(map(_quote, params))
+
+         return s % params
 
 ### connection object