> 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 85ff7656c690d6ea4e416fa6e9a3b758cda71dcd..2772809b4e2050f72710722354bf93632450d421 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