Commits

Mike Bayer committed d906c55

- Fixed bug where reflection of foreign key
created as "REFERENCES <tablename>" without
col name would fail. [ticket:2115]
(also in 0.6.7)

Comments (0)

Files changed (3)

   - The "pool.manage" feature doesn't use pickle
     anymore to hash the arguments for each pool.
 
+- sqlite
+  - Fixed bug where reflection of foreign key
+    created as "REFERENCES <tablename>" without
+    col name would fail.  [ticket:2115]
+    (also in 0.6.7)
+
 - postgresql
   - Psycopg2 for Python 3 is now supported.
 

lib/sqlalchemy/dialects/sqlite/base.py

             if row is None:
                 break
             (constraint_name, rtbl, lcol, rcol) = (row[0], row[2], row[3], row[4])
+            # sqlite won't return rcol if the table
+            # was created with REFERENCES <tablename>, no col
+            if rcol is None:
+                rcol = lcol
             rtbl = re.sub(r'^\"|\"$', '', rtbl)
             lcol = re.sub(r'^\"|\"$', '', lcol)
             rcol = re.sub(r'^\"|\"$', '', rcol)

test/dialect/test_sqlite.py

                             'CREATE TABLE autoinctable (id INTEGER NOT '
                             'NULL PRIMARY KEY AUTOINCREMENT)',
                             dialect=sqlite.dialect())
+
+
+class ReflectHeadlessFKsTest(fixtures.TestBase):
+    def setup(self):
+        testing.db.execute("CREATE TABLE a (id INTEGER PRIMARY KEY)")
+        testing.db.execute("CREATE TABLE b (id INTEGER PRIMARY KEY REFERENCES a)")
+
+    def teardown(self):
+        testing.db.execute("drop table b")
+        testing.db.execute("drop table a")
+
+    def test_reflect_tables_fk_no_colref(self):
+        meta = MetaData()
+        a = Table('a', meta, autoload=True, autoload_with=testing.db)
+        b = Table('b', meta, autoload=True, autoload_with=testing.db)
+
+        assert b.c.id.references(a.c.id)
+
+