]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix unique constraints reflection in SQLite
authorRoman Podoliaka <rpodolyaka@mirantis.com>
Fri, 14 Feb 2014 11:04:57 +0000 (13:04 +0200)
committerRoman Podoliaka <rpodolyaka@mirantis.com>
Fri, 14 Feb 2014 12:09:21 +0000 (14:09 +0200)
Reflection of unique constraints didn't work properly, if reserved
identifiers had been used as column names. In this case column names
would be put in double quotes (e.g. the name of column asc would be
returned as "asc").

This issue is only present in 0.8.4 and not in 0.9.x.

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

index 19a35b4954aa0995ba7e14f7908bb9e27b8e01bc..328fe1caa352ebbadd2c4e59f540af7917d9eca3 100644 (file)
@@ -940,7 +940,7 @@ 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': [c.strip(' "') for c in cols.split(',')]}
             for name, cols in re.findall(UNIQUE_PATTERN, table_data)
         ]
 
index 418c080a2c84bf13365097df5d402b97d025f281..263a6ae3bde680ba3e88d97065d9468fe924a093 100644 (file)
@@ -385,6 +385,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')
         )
@@ -394,6 +395,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: