summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/maxdb/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/maxdb/base.py')
-rw-r--r--lib/sqlalchemy/dialects/maxdb/base.py122
1 files changed, 69 insertions, 53 deletions
diff --git a/lib/sqlalchemy/dialects/maxdb/base.py b/lib/sqlalchemy/dialects/maxdb/base.py
index 2e0b9518b..f409f3213 100644
--- a/lib/sqlalchemy/dialects/maxdb/base.py
+++ b/lib/sqlalchemy/dialects/maxdb/base.py
@@ -60,7 +60,7 @@ this.
"""
import datetime, itertools, re
-from sqlalchemy import exc, schema, sql, util
+from sqlalchemy import exc, schema, sql, util, processors
from sqlalchemy.sql import operators as sql_operators, expression as sql_expr
from sqlalchemy.sql import compiler, visitors
from sqlalchemy.engine import base as engine_base, default
@@ -86,6 +86,12 @@ class _StringType(sqltypes.String):
return process
def result_processor(self, dialect, coltype):
+ #XXX: this code is probably very slow and one should try (if at all
+ # possible) to determine the correct code path on a per-connection
+ # basis (ie, here in result_processor, instead of inside the processor
+ # function itself) and probably also use a few generic
+ # processors, or possibly per query (though there is no mechanism
+ # for that yet).
def process(value):
while True:
if value is None:
@@ -152,6 +158,7 @@ class MaxNumeric(sqltypes.Numeric):
def bind_processor(self, dialect):
return None
+
class MaxTimestamp(sqltypes.DateTime):
def bind_processor(self, dialect):
def process(value):
@@ -172,25 +179,30 @@ class MaxTimestamp(sqltypes.DateTime):
return process
def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- elif dialect.datetimeformat == 'internal':
- return datetime.datetime(
- *[int(v)
- for v in (value[0:4], value[4:6], value[6:8],
- value[8:10], value[10:12], value[12:14],
- value[14:])])
- elif dialect.datetimeformat == 'iso':
- return datetime.datetime(
- *[int(v)
- for v in (value[0:4], value[5:7], value[8:10],
- value[11:13], value[14:16], value[17:19],
- value[20:])])
- else:
- raise exc.InvalidRequestError(
- "datetimeformat '%s' is not supported." % (
- dialect.datetimeformat,))
+ if dialect.datetimeformat == 'internal':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.datetime(
+ *[int(v)
+ for v in (value[0:4], value[4:6], value[6:8],
+ value[8:10], value[10:12], value[12:14],
+ value[14:])])
+ elif dialect.datetimeformat == 'iso':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.datetime(
+ *[int(v)
+ for v in (value[0:4], value[5:7], value[8:10],
+ value[11:13], value[14:16], value[17:19],
+ value[20:])])
+ else:
+ raise exc.InvalidRequestError(
+ "datetimeformat '%s' is not supported." %
+ dialect.datetimeformat)
return process
@@ -212,19 +224,24 @@ class MaxDate(sqltypes.Date):
return process
def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- elif dialect.datetimeformat == 'internal':
- return datetime.date(
- *[int(v) for v in (value[0:4], value[4:6], value[6:8])])
- elif dialect.datetimeformat == 'iso':
- return datetime.date(
- *[int(v) for v in (value[0:4], value[5:7], value[8:10])])
- else:
- raise exc.InvalidRequestError(
- "datetimeformat '%s' is not supported." % (
- dialect.datetimeformat,))
+ if dialect.datetimeformat == 'internal':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.date(int(value[0:4]), int(value[4:6]),
+ int(value[6:8]))
+ elif dialect.datetimeformat == 'iso':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.date(int(value[0:4]), int(value[5:7]),
+ int(value[8:10]))
+ else:
+ raise exc.InvalidRequestError(
+ "datetimeformat '%s' is not supported." %
+ dialect.datetimeformat)
return process
@@ -246,31 +263,30 @@ class MaxTime(sqltypes.Time):
return process
def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- elif dialect.datetimeformat == 'internal':
- t = datetime.time(
- *[int(v) for v in (value[0:4], value[4:6], value[6:8])])
- return t
- elif dialect.datetimeformat == 'iso':
- return datetime.time(
- *[int(v) for v in (value[0:4], value[5:7], value[8:10])])
- else:
- raise exc.InvalidRequestError(
- "datetimeformat '%s' is not supported." % (
- dialect.datetimeformat,))
+ if dialect.datetimeformat == 'internal':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.time(int(value[0:4]), int(value[4:6]),
+ int(value[6:8]))
+ elif dialect.datetimeformat == 'iso':
+ def process(value):
+ if value is None:
+ return None
+ else:
+ return datetime.time(int(value[0:4]), int(value[5:7]),
+ int(value[8:10]))
+ else:
+ raise exc.InvalidRequestError(
+ "datetimeformat '%s' is not supported." %
+ dialect.datetimeformat)
return process
class MaxBlob(sqltypes.LargeBinary):
def bind_processor(self, dialect):
- def process(value):
- if value is None:
- return None
- else:
- return str(value)
- return process
+ return processors.to_str
def result_processor(self, dialect, coltype):
def process(value):