summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/sqlite/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/sqlite/base.py')
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py44
1 files changed, 20 insertions, 24 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index 696f65a6c..e987439c5 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -54,6 +54,7 @@ from sqlalchemy import types as sqltypes
from sqlalchemy import util
from sqlalchemy.sql import compiler, functions as sql_functions
from sqlalchemy.util import NoneType
+from sqlalchemy import processors
from sqlalchemy.types import BLOB, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL,\
FLOAT, INTEGER, NUMERIC, SMALLINT, TEXT, TIME,\
@@ -62,13 +63,10 @@ from sqlalchemy.types import BLOB, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL,\
class _NumericMixin(object):
def bind_processor(self, dialect):
- type_ = self.asdecimal and str or float
- def process(value):
- if value is not None:
- return type_(value)
- else:
- return value
- return process
+ if self.asdecimal:
+ return processors.to_str
+ else:
+ return processors.to_float
class _SLNumeric(_NumericMixin, sqltypes.Numeric):
pass
@@ -86,19 +84,7 @@ class _DateTimeMixin(object):
if storage_format is not None:
self._storage_format = storage_format
- def _result_processor(self, fn):
- rmatch = self._reg.match
- # Even on python2.6 datetime.strptime is both slower than this code
- # and it does not support microseconds.
- def process(value):
- if value is not None:
- return fn(*map(int, rmatch(value).groups(0)))
- else:
- return None
- return process
-
class DATETIME(_DateTimeMixin, sqltypes.DateTime):
- _reg = re.compile(r"(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)(?:\.(\d+))?")
_storage_format = "%04d-%02d-%02d %02d:%02d:%02d.%06d"
def bind_processor(self, dialect):
@@ -121,10 +107,13 @@ class DATETIME(_DateTimeMixin, sqltypes.DateTime):
return process
def result_processor(self, dialect, coltype):
- return self._result_processor(datetime.datetime)
+ if self._reg:
+ return processors.str_to_datetime_processor_factory(
+ self._reg, datetime.datetime)
+ else:
+ return processors.str_to_datetime
class DATE(_DateTimeMixin, sqltypes.Date):
- _reg = re.compile(r"(\d+)-(\d+)-(\d+)")
_storage_format = "%04d-%02d-%02d"
def bind_processor(self, dialect):
@@ -141,10 +130,13 @@ class DATE(_DateTimeMixin, sqltypes.Date):
return process
def result_processor(self, dialect, coltype):
- return self._result_processor(datetime.date)
+ if self._reg:
+ return processors.str_to_datetime_processor_factory(
+ self._reg, datetime.date)
+ else:
+ return processors.str_to_date
class TIME(_DateTimeMixin, sqltypes.Time):
- _reg = re.compile(r"(\d+):(\d+):(\d+)(?:\.(\d+))?")
_storage_format = "%02d:%02d:%02d.%06d"
def bind_processor(self, dialect):
@@ -162,7 +154,11 @@ class TIME(_DateTimeMixin, sqltypes.Time):
return process
def result_processor(self, dialect, coltype):
- return self._result_processor(datetime.time)
+ if self._reg:
+ return processors.str_to_datetime_processor_factory(
+ self._reg, datetime.time)
+ else:
+ return processors.str_to_time
colspecs = {
sqltypes.Date: DATE,