]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Prelookup codec in the String result processor for dialects which do not
authorGaëtan de Menten <gdementen@gmail.com>
Mon, 23 Nov 2009 08:35:34 +0000 (08:35 +0000)
committerGaëtan de Menten <gdementen@gmail.com>
Mon, 23 Nov 2009 08:35:34 +0000 (08:35 +0000)
return Unicode natively, as suggested in #1323. Provides a nice speed boost
(~21% total query time).

lib/sqlalchemy/types.py

index 137b580c602edab62361f6d1b985280ff8f54af6..99635a55dfa8186a39d25b267f0a00202b61bb81 100644 (file)
@@ -23,6 +23,7 @@ __all__ = [ 'TypeEngine', 'TypeDecorator', 'AbstractType', 'UserDefinedType',
 import inspect
 import datetime as dt
 from decimal import Decimal as _python_Decimal
+import codecs
 
 from sqlalchemy import exc, schema
 from sqlalchemy.sql import expression
@@ -530,10 +531,11 @@ class String(Concatenable, TypeEngine):
         if needs_convert:
             # note we *assume* that we do not have a unicode object
             # here, instead of an expensive isinstance() check.
-            encoding = dialect.encoding
+            decoder = codecs.getdecoder(dialect.encoding)
             def process(value):
                 if value is not None:
-                    return value.decode(encoding)
+                    # decoder returns a tuple: (value, len)
+                    return decoder(value)[0]
                 else:
                     return value
             return process