diff options
author | Gaëtan de Menten <gdementen@gmail.com> | 2009-11-23 08:35:34 +0000 |
---|---|---|
committer | Gaëtan de Menten <gdementen@gmail.com> | 2009-11-23 08:35:34 +0000 |
commit | 95e349a5dc2ae88e12845d0fff686069ef547fc7 (patch) | |
tree | bc7531a21709673e797b48f42ccfdb0384967755 | |
parent | 6249922a26be1134b47c8e9d87a3f40c7354e4ac (diff) | |
download | sqlalchemy-95e349a5dc2ae88e12845d0fff686069ef547fc7.tar.gz |
Prelookup codec in the String result processor for dialects which do not
return Unicode natively, as suggested in #1323. Provides a nice speed boost
(~21% total query time).
-rw-r--r-- | lib/sqlalchemy/types.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 137b580c6..99635a55d 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -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 |