summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/sybase/base.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-03-17 16:01:29 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-03-17 16:01:29 -0400
commit214ed6239eb187c32e37bb7e3e3ac76555e266aa (patch)
tree5a810f7c7a802ebdd4c697e683c7b80e7dbbdd3b /lib/sqlalchemy/dialects/sybase/base.py
parent318f47dc80c58dee8c798afcc8c19a5dbb21eef7 (diff)
downloadsqlalchemy-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.py27
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"