summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaëtan de Menten <gdementen@gmail.com>2009-11-23 08:35:34 +0000
committerGaëtan de Menten <gdementen@gmail.com>2009-11-23 08:35:34 +0000
commit95e349a5dc2ae88e12845d0fff686069ef547fc7 (patch)
treebc7531a21709673e797b48f42ccfdb0384967755
parent6249922a26be1134b47c8e9d87a3f40c7354e4ac (diff)
downloadsqlalchemy-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.py6
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