]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed reflection of mysql empty string column defaults.
authorJason Kirtland <jek@discorporate.us>
Tue, 8 Jan 2008 07:46:37 +0000 (07:46 +0000)
committerJason Kirtland <jek@discorporate.us>
Tue, 8 Jan 2008 07:46:37 +0000 (07:46 +0000)
CHANGES
lib/sqlalchemy/databases/mysql.py
test/dialect/mysql.py

diff --git a/CHANGES b/CHANGES
index 568b47d21f24676a6c682c4fdf3342eca80f0897..3e6b8ab8ddb982090a36966572e8ee0ca1c94558 100644 (file)
--- 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.  
 
index 4f7f10a78a95486a8328d6929190811c90788919..41b35156ea3ecd4f27795bd46eb91c4e6987298e 100644 (file)
@@ -2332,7 +2332,7 @@ class MySQLSchemaReflector(object):
             r'(?: +COLLATE +(P<collate>\w+))?'
             r'(?: +(?P<notnull>NOT NULL))?'
             r'(?: +DEFAULT +(?P<default>'
-              r'(?:NULL|\x27(?:\x27\x27|[^\x27])+\x27|\w+)'
+              r'(?:NULL|\x27(?:\x27\x27|[^\x27])*\x27|\w+)'
               r'(?:ON UPDATE \w+)?'
             r'))?'
             r'(?: +(?P<autoincr>AUTO_INCREMENT))?'
index 11c721e1d986ad5335fb1b44bf00cc7fb01e799f..5f5c4a750737b88528f79663506cb7a3acb0dc70 100644 (file)
@@ -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)