summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/firebird/base.py27
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py22
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py34
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py19
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py1
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py16
6 files changed, 13 insertions, 106 deletions
diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py
index 21fec6b51..86d6876a6 100644
--- a/lib/sqlalchemy/dialects/firebird/base.py
+++ b/lib/sqlalchemy/dialects/firebird/base.py
@@ -123,29 +123,7 @@ RESERVED_WORDS = set([
])
-class _FBBoolean(sqltypes.Boolean):
- def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- return value and True or False
- return process
-
- def bind_processor(self, dialect):
- def process(value):
- if value is True:
- return 1
- elif value is False:
- return 0
- elif value is None:
- return None
- else:
- return value and True or False
- return process
-
-
colspecs = {
- sqltypes.Boolean: _FBBoolean,
}
ischema_names = {
@@ -321,10 +299,13 @@ class FBDialect(default.DefaultDialect):
sequences_optional = False
supports_default_values = True
postfetch_lastrowid = False
-
+
+ supports_native_boolean = False
+
requires_name_normalize = True
supports_empty_insert = False
+
statement_compiler = FBCompiler
ddl_compiler = FBDDLCompiler
preparer = FBIdentifierPreparer
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index bd275d758..1060446b2 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -604,25 +604,6 @@ class IMAGE(sqltypes.Binary):
class BIT(sqltypes.TypeEngine):
__visit_name__ = 'BIT'
-class _MSBoolean(sqltypes.Boolean):
- def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- return value and True or False
- return process
-
- def bind_processor(self, dialect):
- def process(value):
- if value is True:
- return 1
- elif value is False:
- return 0
- elif value is None:
- return None
- else:
- return value and True or False
- return process
class MONEY(sqltypes.TypeEngine):
__visit_name__ = 'MONEY'
@@ -640,7 +621,6 @@ class SQL_VARIANT(sqltypes.TypeEngine):
MSNumeric = _MSNumeric
MSDateTime = _MSDateTime
MSDate = _MSDate
-MSBoolean = _MSBoolean
MSReal = REAL
MSTinyInteger = TINYINT
MSTime = TIME
@@ -667,7 +647,6 @@ colspecs = {
sqltypes.DateTime : _MSDateTime,
sqltypes.Date : _MSDate,
sqltypes.Time : TIME,
- sqltypes.Boolean : _MSBoolean,
}
ischema_names = {
@@ -1137,6 +1116,7 @@ class MSDialect(default.DefaultDialect):
colspecs = colspecs
ischema_names = ischema_names
+ supports_native_boolean = False
supports_unicode_binds = True
postfetch_lastrowid = True
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index 3a2773892..01f8b13a7 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -167,6 +167,13 @@ available.
update(..., mysql_limit=10)
+Boolean Types
+-------------
+
+MySQL's BOOL type is a synonym for SMALLINT, so is actually a numeric value,
+and additionally MySQL doesn't support CHECK constraints. Therefore SQLA's
+Boolean type cannot fully constrain values to just "True" and "False" the way it does for most other backends.
+
Troubleshooting
---------------
@@ -1080,32 +1087,7 @@ class SET(_StringType):
return value
return process
-class _MSBoolean(sqltypes.Boolean):
- """MySQL BOOLEAN type."""
-
- __visit_name__ = 'BOOLEAN'
-
- def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- return value and True or False
- return process
-
- def bind_processor(self, dialect):
- def process(value):
- if value is True:
- return 1
- elif value is False:
- return 0
- elif value is None:
- return None
- else:
- return value and True or False
- return process
-
# old names
-MSBoolean = _MSBoolean
MSTime = _MSTime
MSSet = SET
MSEnum = ENUM
@@ -1141,7 +1123,6 @@ colspecs = {
sqltypes.Numeric: NUMERIC,
sqltypes.Float: FLOAT,
sqltypes.Binary: _BinaryType,
- sqltypes.Boolean: _MSBoolean,
sqltypes.Time: _MSTime,
sqltypes.Enum: ENUM,
}
@@ -1656,7 +1637,6 @@ class MySQLDialect(default.DefaultDialect):
max_identifier_length = 255
supports_native_enum = True
- supports_native_boolean = True
supports_sane_rowcount = True
supports_sane_multi_rowcount = False
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index d13e37d60..ddcc9f460 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -158,25 +158,6 @@ class LONG(sqltypes.Text):
class _OracleBoolean(sqltypes.Boolean):
def get_dbapi_type(self, dbapi):
return dbapi.NUMBER
-
- def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- return value and True or False
- return process
-
- def bind_processor(self, dialect):
- def process(value):
- if value is True:
- return 1
- elif value is False:
- return 0
- elif value is None:
- return None
- else:
- return value and True or False
- return process
colspecs = {
sqltypes.Boolean : _OracleBoolean,
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index d0a87d282..7a9e2e710 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -525,6 +525,7 @@ class PGDialect(default.DefaultDialect):
supports_sane_rowcount = True
supports_native_enum = True
+ supports_native_boolean = True
supports_sequences = True
sequences_optional = True
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index 2b929331a..d83eb4b86 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -146,23 +146,7 @@ class TIME(_DateTimeMixin, sqltypes.Time):
def result_processor(self, dialect, coltype):
return self._result_processor(datetime.time)
-class _SLBoolean(sqltypes.Boolean):
- def bind_processor(self, dialect):
- def process(value):
- if value is None:
- return None
- return value and 1 or 0
- return process
-
- def result_processor(self, dialect, coltype):
- def process(value):
- if value is None:
- return None
- return value == 1
- return process
-
colspecs = {
- sqltypes.Boolean: _SLBoolean,
sqltypes.Date: DATE,
sqltypes.DateTime: DATETIME,
sqltypes.Float: _SLFloat,