summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/mssql/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/mssql/base.py')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index 09db05e1f..8292d08f1 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -216,6 +216,7 @@ RESERVED_WORDS = set(
'writetext',
])
+
class REAL(sqltypes.REAL):
__visit_name__ = 'REAL'
@@ -224,6 +225,7 @@ class REAL(sqltypes.REAL):
kw['precision'] = 24
super(REAL, self).__init__(**kw)
+
class TINYINT(sqltypes.Integer):
__visit_name__ = 'TINYINT'
@@ -256,6 +258,7 @@ class _MSDate(sqltypes.Date):
return value
return process
+
class TIME(sqltypes.TIME):
def __init__(self, precision=None, **kwargs):
self.precision = precision
@@ -287,6 +290,7 @@ class TIME(sqltypes.TIME):
return process
_MSTime = TIME
+
class _DateTimeBase(object):
def bind_processor(self, dialect):
def process(value):
@@ -296,12 +300,15 @@ class _DateTimeBase(object):
return value
return process
+
class _MSDateTime(_DateTimeBase, sqltypes.DateTime):
pass
+
class SMALLDATETIME(_DateTimeBase, sqltypes.DateTime):
__visit_name__ = 'SMALLDATETIME'
+
class DATETIME2(_DateTimeBase, sqltypes.DateTime):
__visit_name__ = 'DATETIME2'
@@ -317,12 +324,14 @@ class DATETIMEOFFSET(sqltypes.TypeEngine):
def __init__(self, precision=None, **kwargs):
self.precision = precision
+
class _StringType(object):
"""Base for MSSQL string types."""
def __init__(self, collation=None):
self.collation = collation
+
class TEXT(_StringType, sqltypes.TEXT):
"""MSSQL TEXT type, for variable-length text up to 2^31 characters."""
@@ -336,6 +345,7 @@ class TEXT(_StringType, sqltypes.TEXT):
_StringType.__init__(self, collation)
sqltypes.Text.__init__(self, length, **kw)
+
class NTEXT(_StringType, sqltypes.UnicodeText):
"""MSSQL NTEXT type, for variable-length unicode text up to 2^30
characters."""
@@ -381,6 +391,7 @@ class VARCHAR(_StringType, sqltypes.VARCHAR):
_StringType.__init__(self, collation)
sqltypes.VARCHAR.__init__(self, length, **kw)
+
class NVARCHAR(_StringType, sqltypes.NVARCHAR):
"""MSSQL NVARCHAR type.
@@ -398,6 +409,7 @@ class NVARCHAR(_StringType, sqltypes.NVARCHAR):
_StringType.__init__(self, collation)
sqltypes.NVARCHAR.__init__(self, length, **kw)
+
class CHAR(_StringType, sqltypes.CHAR):
"""MSSQL CHAR type, for fixed-length non-Unicode data with a maximum
of 8,000 characters."""
@@ -426,6 +438,7 @@ class CHAR(_StringType, sqltypes.CHAR):
_StringType.__init__(self, collation)
sqltypes.CHAR.__init__(self, length, **kw)
+
class NCHAR(_StringType, sqltypes.NCHAR):
"""MSSQL NCHAR type.
@@ -443,9 +456,11 @@ class NCHAR(_StringType, sqltypes.NCHAR):
_StringType.__init__(self, collation)
sqltypes.NCHAR.__init__(self, length, **kw)
+
class IMAGE(sqltypes.LargeBinary):
__visit_name__ = 'IMAGE'
+
class BIT(sqltypes.TypeEngine):
__visit_name__ = 'BIT'
@@ -453,12 +468,15 @@ class BIT(sqltypes.TypeEngine):
class MONEY(sqltypes.TypeEngine):
__visit_name__ = 'MONEY'
+
class SMALLMONEY(sqltypes.TypeEngine):
__visit_name__ = 'SMALLMONEY'
+
class UNIQUEIDENTIFIER(sqltypes.TypeEngine):
__visit_name__ = "UNIQUEIDENTIFIER"
+
class SQL_VARIANT(sqltypes.TypeEngine):
__visit_name__ = 'SQL_VARIANT'
@@ -641,6 +659,7 @@ class MSTypeCompiler(compiler.GenericTypeCompiler):
def visit_SQL_VARIANT(self, type_):
return 'SQL_VARIANT'
+
class MSExecutionContext(default.DefaultExecutionContext):
_enable_identity_insert = False
_select_lastrowid = False
@@ -718,6 +737,7 @@ class MSExecutionContext(default.DefaultExecutionContext):
else:
return engine.ResultProxy(self)
+
class MSSQLCompiler(compiler.SQLCompiler):
returning_precedes_values = True
@@ -947,6 +967,7 @@ class MSSQLCompiler(compiler.SQLCompiler):
fromhints=from_hints, **kw)
for t in [from_table] + extra_froms)
+
class MSSQLStrictCompiler(MSSQLCompiler):
"""A subclass of MSSQLCompiler which disables the usage of bind
parameters where not allowed natively by MS-SQL.
@@ -990,6 +1011,7 @@ class MSSQLStrictCompiler(MSSQLCompiler):
return super(MSSQLStrictCompiler, self).\
render_literal_value(value, type_)
+
class MSDDLCompiler(compiler.DDLCompiler):
def get_column_specification(self, column, **kwargs):
colspec = (self.preparer.format_column(column) + " "
@@ -1049,6 +1071,7 @@ class MSIdentifierPreparer(compiler.IdentifierPreparer):
result = '.'.join([self.quote(x, force) for x in schema.split('.')])
return result
+
def _db_plus_owner_listing(fn):
def wrap(dialect, connection, schema=None, **kw):
dbname, owner = _owner_plus_db(dialect, schema)
@@ -1056,6 +1079,7 @@ def _db_plus_owner_listing(fn):
dbname, owner, schema, **kw)
return update_wrapper(wrap, fn)
+
def _db_plus_owner(fn):
def wrap(dialect, connection, tablename, schema=None, **kw):
dbname, owner = _owner_plus_db(dialect, schema)
@@ -1063,6 +1087,7 @@ def _db_plus_owner(fn):
tablename, dbname, owner, schema, **kw)
return update_wrapper(wrap, fn)
+
def _switch_db(dbname, connection, fn, *arg, **kw):
if dbname:
current_db = connection.scalar("select db_name()")
@@ -1073,6 +1098,7 @@ def _switch_db(dbname, connection, fn, *arg, **kw):
if dbname:
connection.execute("use %s" % current_db)
+
def _owner_plus_db(dialect, schema):
if not schema:
return None, dialect.default_schema_name
@@ -1081,6 +1107,7 @@ def _owner_plus_db(dialect, schema):
else:
return None, schema
+
class MSDialect(default.DefaultDialect):
name = 'mssql'
supports_default_values = True