From 165609a190665f5453417c9c935a834714c7f5a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20de=20Menten?= Date: Sat, 13 Feb 2010 22:53:39 +0000 Subject: - Added an optional C extension to speed up the sql layer by reimplementing the highest impact functions. The actual speedups will depend heavily on your DBAPI and the mix of datatypes used in your tables, and can vary from a 50% improvement to more than 200%. It also provides a modest (~20%) indirect improvement to ORM speed for large queries. Note that it is *not* built/installed by default. See README for installation instructions. - The most common result processors conversion function were moved to the new "processors" module. Dialect authors are encouraged to use those functions whenever they correspond to their needs instead of implementing custom ones. --- lib/sqlalchemy/dialects/postgresql/pg8000.py | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) (limited to 'lib/sqlalchemy/dialects/postgresql/pg8000.py') diff --git a/lib/sqlalchemy/dialects/postgresql/pg8000.py b/lib/sqlalchemy/dialects/postgresql/pg8000.py index e90bebb6b..079b05530 100644 --- a/lib/sqlalchemy/dialects/postgresql/pg8000.py +++ b/lib/sqlalchemy/dialects/postgresql/pg8000.py @@ -19,31 +19,23 @@ Interval Passing data from/to the Interval type is not supported as of yet. """ -from sqlalchemy.engine import default import decimal + +from sqlalchemy.engine import default from sqlalchemy import util, exc +from sqlalchemy import processors from sqlalchemy import types as sqltypes from sqlalchemy.dialects.postgresql.base import PGDialect, \ PGCompiler, PGIdentifierPreparer, PGExecutionContext class _PGNumeric(sqltypes.Numeric): def bind_processor(self, dialect): - def process(value): - if value is not None: - return float(value) - else: - return value - return process + return processors.to_float def result_processor(self, dialect, coltype): if self.asdecimal: if coltype in (700, 701): - def process(value): - if value is not None: - return decimal.Decimal(str(value)) - else: - return value - return process + return processors.to_decimal_processor_factory(decimal.Decimal) elif coltype == 1700: # pg8000 returns Decimal natively for 1700 return None @@ -54,12 +46,7 @@ class _PGNumeric(sqltypes.Numeric): # pg8000 returns float natively for 701 return None elif coltype == 1700: - def process(value): - if value is not None: - return float(value) - else: - return value - return process + return processors.to_float else: raise exc.InvalidRequestError("Unknown PG numeric type: %d" % coltype) -- cgit v1.2.1