summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Morrison <rickmorrison@gmail.com>2006-09-27 00:01:16 +0000
committerRick Morrison <rickmorrison@gmail.com>2006-09-27 00:01:16 +0000
commitb4112538dbd46ee7d3c25fc35f3c43aed342e429 (patch)
tree7f5adc02628725362d176f4eb72d9e6ec24f301d
parent3db04a868c770a8549a885d500594b29bb2e013e (diff)
downloadsqlalchemy-b4112538dbd46ee7d3c25fc35f3c43aed342e429.tar.gz
NCHAR and NVARCHAR support for MS-SQL. Patch from Kent Johnson
-rw-r--r--CHANGES1
-rw-r--r--lib/sqlalchemy/databases/mssql.py14
-rw-r--r--lib/sqlalchemy/types.py3
3 files changed, 15 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 69abfce04..65946b4c4 100644
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,7 @@ to orm to allow tracking of mapper configurations, row iteration.
-- introduces new "auto_identity_insert" option for auto-switching between "SET IDENTITY_INSERT" mode when values specified for IDENTITY columns
-- now supports multi-column foreign keys
-- fix to reflecting date/datetime columns
+ -- NCHAR and NVARCHAR type support added
- more rearrangements of unit-of-work commit scheme to better allow
dependencies within circular flushes to work properly...updated
task traversal/logging implementation
diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py
index 1274174f0..0a6dfbe1f 100644
--- a/lib/sqlalchemy/databases/mssql.py
+++ b/lib/sqlalchemy/databases/mssql.py
@@ -148,9 +148,15 @@ class MSText(sqltypes.TEXT):
class MSString(sqltypes.String):
def get_col_spec(self):
return "VARCHAR(%(length)s)" % {'length' : self.length}
+class MSUnicode(sqltypes.Unicode):
+ def get_col_spec(self):
+ return "NVARCHAR(%(length)s)" % {'length' : self.length}
class MSChar(sqltypes.CHAR):
def get_col_spec(self):
return "CHAR(%(length)s)" % {'length' : self.length}
+class MSNChar(sqltypes.NCHAR):
+ def get_col_spec(self):
+ return "NCHAR(%(length)s)" % {'length' : self.length}
class MSBinary(sqltypes.Binary):
def get_col_spec(self):
return "IMAGE"
@@ -179,10 +185,12 @@ colspecs = {
sqltypes.DateTime : MSDateTime,
sqltypes.Date : MSDate,
sqltypes.String : MSString,
+ sqltypes.Unicode : MSUnicode,
sqltypes.Binary : MSBinary,
sqltypes.Boolean : MSBoolean,
sqltypes.TEXT : MSText,
sqltypes.CHAR: MSChar,
+ sqltypes.NCHAR: MSNChar,
}
ischema_names = {
@@ -190,7 +198,9 @@ ischema_names = {
'smallint' : MSSmallInteger,
'tinyint' : MSTinyInteger,
'varchar' : MSString,
+ 'nvarchar' : MSUnicode,
'char' : MSChar,
+ 'nchar' : MSNChar,
'text' : MSText,
'decimal' : MSNumeric,
'numeric' : MSNumeric,
@@ -237,8 +247,8 @@ class MSSQLExecutionContext(default.DefaultExecutionContext):
break
if self.IINSERT:
proxy("SET IDENTITY_INSERT %s ON" % compiled.statement.table.name)
- super(MSSQLExecutionContext, self).pre_exec(engine, proxy, compiled, parameters, **kwargs)
-
+ super(MSSQLExecutionContext, self).pre_exec(engine, proxy, compiled, parameters, **kwargs)
+
def post_exec(self, engine, proxy, compiled, parameters, **kwargs):
""" Turn off the INDENTITY_INSERT mode if it's been activated, and fetch recently inserted IDENTIFY values (works only for one column) """
if getattr(compiled, "isinsert", False):
diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py
index 6f4892530..31c6a232e 100644
--- a/lib/sqlalchemy/types.py
+++ b/lib/sqlalchemy/types.py
@@ -5,7 +5,7 @@
# the MIT License: http://www.opensource.org/licenses/mit-license.php
__all__ = [ 'TypeEngine', 'TypeDecorator', 'NullTypeEngine',
- 'INT', 'CHAR', 'VARCHAR', 'TEXT', 'FLOAT', 'DECIMAL',
+ 'INT', 'CHAR', 'VARCHAR', 'NCHAR', 'TEXT', 'FLOAT', 'DECIMAL',
'TIMESTAMP', 'DATETIME', 'CLOB', 'BLOB', 'BOOLEAN', 'String', 'Integer', 'Smallinteger',
'Numeric', 'Float', 'DateTime', 'Date', 'Time', 'Binary', 'Boolean', 'Unicode', 'PickleType', 'NULLTYPE',
'SMALLINT', 'DATE', 'TIME'
@@ -270,6 +270,7 @@ class TIME(Time): pass
class CLOB(String): pass
class VARCHAR(String): pass
class CHAR(String):pass
+class NCHAR(Unicode):pass
class BLOB(Binary): pass
class BOOLEAN(Boolean): pass