diff options
Diffstat (limited to 'lib/sqlalchemy/databases/sqlite.py')
-rw-r--r-- | lib/sqlalchemy/databases/sqlite.py | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 6689db8f1..35f07b784 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -130,15 +130,43 @@ class SLTime(DateTimeMixin, sqltypes.Time): def result_processor(self, dialect): return self._result_processor(datetime.time, self._reg) -class SLText(sqltypes.Text): +class SLUnicodeMixin(object): + def bind_processor(self, dialect): + if self.convert_unicode or dialect.convert_unicode: + if self.assert_unicode is None: + assert_unicode = dialect.assert_unicode + else: + assert_unicode = self.assert_unicode + + if not assert_unicode: + return None + + def process(value): + if not isinstance(value, (unicode, NoneType)): + if assert_unicode == 'warn': + util.warn("Unicode type received non-unicode bind " + "param value %r" % value) + return value + else: + raise exc.InvalidRequestError("Unicode type received non-unicode bind param value %r" % value) + else: + return value + return process + else: + return None + + def result_processor(self, dialect): + return None + +class SLText(SLUnicodeMixin, sqltypes.Text): def get_col_spec(self): return "TEXT" -class SLString(sqltypes.String): +class SLString(SLUnicodeMixin, sqltypes.String): def get_col_spec(self): return "VARCHAR" + (self.length and "(%d)" % self.length or "") -class SLChar(sqltypes.CHAR): +class SLChar(SLUnicodeMixin, sqltypes.CHAR): def get_col_spec(self): return "CHAR" + (self.length and "(%d)" % self.length or "") |