summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2019-01-15 17:47:14 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2019-01-15 17:47:14 +0000
commite1b299df819bc1a48ed565bd6efa8ee406ea7efa (patch)
treef9008532688f8f312f4995af4c6601ea3b6d0d37 /lib/sqlalchemy/dialects
parent885f15a306efc4c907ca82fa13871992ee556466 (diff)
parentc0e6ebd70b04c7941b7750c77cd4329b043679f8 (diff)
downloadsqlalchemy-e1b299df819bc1a48ed565bd6efa8ee406ea7efa.tar.gz
Merge "Render N'' for SQL Server unicode literals"
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index 2ad88e8b0..32e3372c0 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -996,12 +996,26 @@ class DATETIMEOFFSET(sqltypes.TypeEngine):
self.precision = precision
-class _StringType(object):
+class _UnicodeLiteral(object):
+ def literal_processor(self, dialect):
+ def process(value):
+
+ value = value.replace("'", "''")
+
+ if dialect.identifier_preparer._double_percents:
+ value = value.replace("%", "%%")
+
+ return "N'%s'" % value
+
+ return process
+
- """Base for MSSQL string types."""
+class _MSUnicode(_UnicodeLiteral, sqltypes.Unicode):
+ pass
- def __init__(self, collation=None):
- super(_StringType, self).__init__(collation=collation)
+
+class _MSUnicodeText(_UnicodeLiteral, sqltypes.UnicodeText):
+ pass
class TIMESTAMP(sqltypes._Binary):
@@ -2117,6 +2131,8 @@ class MSDialect(default.DefaultDialect):
sqltypes.DateTime: _MSDateTime,
sqltypes.Date: _MSDate,
sqltypes.Time: TIME,
+ sqltypes.Unicode: _MSUnicode,
+ sqltypes.UnicodeText: _MSUnicodeText,
}
engine_config_types = default.DefaultDialect.engine_config_types.union(