diff options
Diffstat (limited to 'lib/sqlalchemy/dialects')
| -rw-r--r-- | lib/sqlalchemy/dialects/firebird/base.py | 27 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mssql/base.py | 22 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/base.py | 34 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 19 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/postgresql/base.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 16 |
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, |
