]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix unique constraints reflection in SQLite
authorRoman Podolyaka <roman.podolyaka@gmail.com>
Sat, 22 Jun 2013 10:31:51 +0000 (13:31 +0300)
committerRoman Podolyaka <roman.podolyaka@gmail.com>
Sun, 23 Jun 2013 07:42:03 +0000 (10:42 +0300)
If SQLite keywords are used as column names, they are
quoted. The code parsing the information about table
unique constraints should be modified so that it properly
removes double-quotes from column names.

lib/sqlalchemy/dialects/sqlite/base.py
lib/sqlalchemy/testing/suite/test_reflection.py

index 3e2a158a066437e79d562abf9c2fbe9ace702090..787fdec175db07ab3ec43e361b28363b51a67df5 100644 (file)
@@ -933,7 +933,8 @@ class SQLiteDialect(default.DefaultDialect):
 
         UNIQUE_PATTERN = 'CONSTRAINT (\w+) UNIQUE \(([^\)]+)\)'
         return [
-            {'name': name, 'column_names': [c.strip() for c in cols.split(',')]}
+            {'name': name,
+             'column_names': [col.strip(' "') for col in cols.split(',')]}
             for name, cols in re.findall(UNIQUE_PATTERN, table_data)
         ]
 
index 16061780e033f68e3c060ea9cf259f1971496f2e..7ab4097a11f9f59dc10b36882b23a3ce2084f23c 100644 (file)
@@ -373,6 +373,7 @@ class ComponentReflectionTest(fixtures.TablesTest):
                 {'name': 'unique_a_b_c', 'column_names': ['a', 'b', 'c']},
                 {'name': 'unique_a_c', 'column_names': ['a', 'c']},
                 {'name': 'unique_b_c', 'column_names': ['b', 'c']},
+                {'name': 'unique_asc_key', 'column_names': ['asc', 'key']},
             ],
             key=operator.itemgetter('name')
         )
@@ -382,6 +383,9 @@ class ComponentReflectionTest(fixtures.TablesTest):
             Column('a', sa.String(20)),
             Column('b', sa.String(30)),
             Column('c', sa.Integer),
+            # reserved identifiers
+            Column('asc', sa.String(30)),
+            Column('key', sa.String(30)),
             schema=schema
         )
         for uc in uniques: