From: Gaƫtan de Menten Date: Tue, 3 Nov 2009 16:30:07 +0000 (+0000) Subject: * tweaked PickleType result_processor and bind_processor so that they are more X-Git-Tag: rel_0_6beta1~194 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5af1759dfc02c16440e603737f3ac04f347ac65;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git * tweaked PickleType result_processor and bind_processor so that they are more correct and more easily maintainable. * implemented specific result_processor and bind_processor for Interval type to avoid TypeDecorator call overhead (closes #1598) --- diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 8643f3066c..a215f31ff0 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -1031,14 +1031,14 @@ class PickleType(MutableType, TypeDecorator): protocol = self.protocol if impl_processor: def process(value): - if value is None: - return impl_processor(None) - return impl_processor(dumps(value, protocol)) + if value is not None: + value = dumps(value, protocol) + return impl_processor(value) else: def process(value): - if value is None: - return None - return dumps(value, protocol) + if value is not None: + value = dumps(value, protocol) + return value return process def result_processor(self, dialect): @@ -1046,9 +1046,10 @@ class PickleType(MutableType, TypeDecorator): loads = self.pickler.loads if impl_processor: def process(value): + value = impl_processor(value) if value is None: - return impl_processor(None) - return loads(impl_processor(value)) + return None + return loads(value) else: def process(value): if value is None: @@ -1095,15 +1096,36 @@ class Interval(TypeDecorator): impl = DateTime epoch = dt.datetime.utcfromtimestamp(0) - def process_bind_param(self, value, dialect): - if value is None: - return None - return self.epoch + value + def bind_processor(self, dialect): + impl_processor = self.impl.bind_processor(dialect) + epoch = self.epoch + if impl_processor: + def process(value): + if value is not None: + value = epoch + value + return impl_processor(value) + else: + def process(value): + if value is not None: + value = epoch + value + return value + return process - def process_result_value(self, value, dialect): - if value is None: - return None - return value - self.epoch + def result_processor(self, dialect): + impl_processor = self.impl.result_processor(dialect) + epoch = self.epoch + if impl_processor: + def process(value): + value = impl_processor(value) + if value is None: + return None + return value - epoch + else: + def process(value): + if value is None: + return None + return value - epoch + return process class FLOAT(Float): """The SQL FLOAT type."""