diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-17 16:01:29 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-17 16:01:29 -0400 |
commit | 214ed6239eb187c32e37bb7e3e3ac76555e266aa (patch) | |
tree | 5a810f7c7a802ebdd4c697e683c7b80e7dbbdd3b /lib/sqlalchemy/dialects/sybase/base.py | |
parent | 318f47dc80c58dee8c798afcc8c19a5dbb21eef7 (diff) | |
download | sqlalchemy-214ed6239eb187c32e37bb7e3e3ac76555e266aa.tar.gz |
- pyodbc can do *some* unicode with sybase, python-sybase not at all.
Since python-sybase source code seems to be all from 2001 with no updates,
making pyodbc the default driver.
Diffstat (limited to 'lib/sqlalchemy/dialects/sybase/base.py')
-rw-r--r-- | lib/sqlalchemy/dialects/sybase/base.py | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/sybase/base.py b/lib/sqlalchemy/dialects/sybase/base.py index c440015d0..c0f0879fc 100644 --- a/lib/sqlalchemy/dialects/sybase/base.py +++ b/lib/sqlalchemy/dialects/sybase/base.py @@ -23,7 +23,8 @@ from sqlalchemy import util, sql, exc from sqlalchemy.types import CHAR, VARCHAR, TIME, NCHAR, NVARCHAR,\ TEXT,DATE,DATETIME, FLOAT, NUMERIC,\ BIGINT,INT, INTEGER, SMALLINT, BINARY,\ - VARBINARY, DECIMAL, TIMESTAMP, Unicode + VARBINARY, DECIMAL, TIMESTAMP, Unicode,\ + UnicodeText RESERVED_WORDS = set([ "add", "all", "alter", "and", @@ -84,14 +85,24 @@ RESERVED_WORDS = set([ "within", "work", "writetext", ]) - -class UNICHAR(sqltypes.Unicode): +class _SybaseUnitypeMixin(object): + """these types appear to return a buffer object.""" + + def result_processor(self, dialect, coltype): + def process(value): + if value is not None: + return str(value) #.decode("ucs-2") + else: + return None + return process + +class UNICHAR(_SybaseUnitypeMixin, sqltypes.Unicode): __visit_name__ = 'UNICHAR' -class UNIVARCHAR(sqltypes.Unicode): +class UNIVARCHAR(_SybaseUnitypeMixin, sqltypes.Unicode): __visit_name__ = 'UNIVARCHAR' -class UNITEXT(sqltypes.UnicodeText): +class UNITEXT(_SybaseUnitypeMixin, sqltypes.UnicodeText): __visit_name__ = 'UNITEXT' class TINYINT(sqltypes.Integer): @@ -120,9 +131,15 @@ class SybaseTypeCompiler(compiler.GenericTypeCompiler): def visit_boolean(self, type_): return self.visit_BIT(type_) + def visit_unicode(self, type_): + return self.visit_NVARCHAR(type_) + def visit_UNICHAR(self, type_): return "UNICHAR(%d)" % type_.length + def visit_UNIVARCHAR(self, type_): + return "UNIVARCHAR(%d)" % type_.length + def visit_UNITEXT(self, type_): return "UNITEXT" |