diff options
| author | Gaëtan de Menten <gdementen@gmail.com> | 2009-11-03 16:30:07 +0000 |
|---|---|---|
| committer | Gaëtan de Menten <gdementen@gmail.com> | 2009-11-03 16:30:07 +0000 |
| commit | b5af1759dfc02c16440e603737f3ac04f347ac65 (patch) | |
| tree | 771578a13d0f0448ab7c77e2de1450e025f39cda | |
| parent | adaecccda17d927462df30f7e6be37a300798013 (diff) | |
| download | sqlalchemy-b5af1759dfc02c16440e603737f3ac04f347ac65.tar.gz | |
* 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)
| -rw-r--r-- | lib/sqlalchemy/types.py | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 8643f3066..a215f31ff 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.""" |
