From 7535e19feca1c25a13e463fb0a5db6db17bda096 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 27 Mar 2010 17:27:28 -0400 Subject: [PATCH] - No longer guessing that TINYINT(1) should be BOOLEAN when reflecting - TINYINT(1) is returned. Use Boolean/ BOOLEAN in table definition to get boolean conversion behavior. [ticket:1752] --- CHANGES | 6 ++++++ lib/sqlalchemy/dialects/mysql/base.py | 7 ------- test/dialect/test_mysql.py | 11 ++++++++++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGES b/CHANGES index 8022d0f3a3..38e120220e 100644 --- a/CHANGES +++ b/CHANGES @@ -87,6 +87,12 @@ CHANGES argument 'precision' to both. 'precision' and 'timezone' are correctly reflected for both TIME and TIMEZONE types. [ticket:997] + +- mysql + - No longer guessing that TINYINT(1) should be BOOLEAN + when reflecting - TINYINT(1) is returned. Use Boolean/ + BOOLEAN in table definition to get boolean conversion + behavior. [ticket:1752] - oracle - The Oracle dialect will issue VARCHAR type definitions diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index f9bb482354..6650b8388e 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -2207,13 +2207,6 @@ class MySQLTableDefinitionParser(object): name, type_, args, notnull = \ spec['name'], spec['coltype'], spec['arg'], spec['notnull'] - # Convention says that TINYINT(1) columns == BOOLEAN - if type_ == 'tinyint' and args == '1': - type_ = 'boolean' - args = None - spec['unsigned'] = None - spec['zerofill'] = None - try: col_type = self.dialect.ischema_names[type_] except KeyError: diff --git a/test/dialect/test_mysql.py b/test/dialect/test_mysql.py index 23a85b6bb9..b0859210d9 100644 --- a/test/dialect/test_mysql.py +++ b/test/dialect/test_mysql.py @@ -399,8 +399,17 @@ class TypesTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL): roundtrip([False, False, 0, 0, 0], [False, False, 0, 0, 0]) meta2 = MetaData(testing.db) - # replace with reflected table = Table('mysql_bool', meta2, autoload=True) + eq_(colspec(table.c.b3), 'b3 TINYINT(1)') + eq_(colspec(table.c.b4), 'b4 TINYINT(1) UNSIGNED') + + meta2 = MetaData(testing.db) + table = Table('mysql_bool', meta2, + Column('b1', BOOLEAN), + Column('b2', Boolean), + Column('b3', BOOLEAN), + Column('b4', BOOLEAN), + autoload=True) eq_(colspec(table.c.b3), 'b3 BOOL') eq_(colspec(table.c.b4), 'b4 BOOL') -- 2.47.3