summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaëtan de Menten <gdementen@gmail.com>2009-11-03 16:30:07 +0000
committerGaëtan de Menten <gdementen@gmail.com>2009-11-03 16:30:07 +0000
commitb5af1759dfc02c16440e603737f3ac04f347ac65 (patch)
tree771578a13d0f0448ab7c77e2de1450e025f39cda
parentadaecccda17d927462df30f7e6be37a300798013 (diff)
downloadsqlalchemy-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.py54
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."""