From c111f6f93dadb0376aa855583d330dce7b8715ca Mon Sep 17 00:00:00 2001 From: Jason Kirtland Date: Tue, 8 Jan 2008 07:46:37 +0000 Subject: [PATCH] Fixed reflection of mysql empty string column defaults. --- CHANGES | 8 ++++++-- lib/sqlalchemy/databases/mysql.py | 2 +- test/dialect/mysql.py | 20 +++++++++++++++++++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 568b47d21f..3e6b8ab8dd 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,13 @@ ======= CHANGES ======= + 0.4.2c ------ +- dialects + - Fixed reflection of mysql empty string column defaults. + 0.4.2b ------ - sql @@ -12,10 +16,10 @@ CHANGES when no length is present is also deprecated until 0.5; will issue a warning when used for CREATE TABLE statements (String with no length for SQL expression purposes is still fine) [ticket:912] - + - generative select.order_by(None) / group_by(None) was not managing to reset order by/group by criterion, fixed [ticket:924] - + - orm - suppressing *all* errors in InstanceState.__cleanup() now. diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py index 4f7f10a78a..41b35156ea 100644 --- a/lib/sqlalchemy/databases/mysql.py +++ b/lib/sqlalchemy/databases/mysql.py @@ -2332,7 +2332,7 @@ class MySQLSchemaReflector(object): r'(?: +COLLATE +(P\w+))?' r'(?: +(?PNOT NULL))?' r'(?: +DEFAULT +(?P' - r'(?:NULL|\x27(?:\x27\x27|[^\x27])+\x27|\w+)' + r'(?:NULL|\x27(?:\x27\x27|[^\x27])*\x27|\w+)' r'(?:ON UPDATE \w+)?' r'))?' r'(?: +(?PAUTO_INCREMENT))?' diff --git a/test/dialect/mysql.py b/test/dialect/mysql.py index 11c721e1d9..5f5c4a7507 100644 --- a/test/dialect/mysql.py +++ b/test/dialect/mysql.py @@ -585,7 +585,6 @@ class TypesTest(AssertMixin): # MySQL 3.23 can't handle an ENUM of ''.... - db = testbase.db enum_table = Table('mysql_enum', MetaData(testbase.db), Column('e1', mysql.MSEnum("'a'")), Column('e2', mysql.MSEnum("''")), @@ -608,6 +607,25 @@ class TypesTest(AssertMixin): finally: enum_table.drop() + def test_default_reflection(self): + """Test reflection of column defaults.""" + + def_table = Table('mysql_def', MetaData(testbase.db), + Column('c1', String(10), PassiveDefault('')), + Column('c2', String(10), PassiveDefault('0')), + Column('c3', String(10), PassiveDefault('abc'))) + + try: + def_table.create() + reflected = Table('mysql_def', MetaData(testbase.db), + autoload=True) + for t in def_table, reflected: + assert t.c.c1.default.arg == '' + assert t.c.c2.default.arg == '0' + assert t.c.c3.default.arg == 'abc' + finally: + def_table.drop() + @testing.exclude('mysql', '<', (5, 0, 0)) def test_type_reflection(self): # (ask_for, roundtripped_as_if_different) -- 2.47.3