]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug where reflection of foreign key
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 10 Apr 2011 14:49:08 +0000 (10:49 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 10 Apr 2011 14:49:08 +0000 (10:49 -0400)
created as "REFERENCES <tablename>" without
col name would fail.  [ticket:2115]

CHANGES
lib/sqlalchemy/dialects/sqlite/base.py
test/dialect/test_sqlite.py

diff --git a/CHANGES b/CHANGES
index 9a5ea3a3715e1b84e4beb34420170a44de4d99ff..fcc94ff4b1c0a8123ec4fc6b7e733cbc3ab1aa77 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -86,6 +86,11 @@ CHANGES
     and Pypy.  Thanks to Jaimy Azle for spotting
     this.  [ticket:2102]
 
+- sqlite
+  - Fixed bug where reflection of foreign key
+    created as "REFERENCES <tablename>" without
+    col name would fail.  [ticket:2115]
+
 - postgresql
   - When explicit sequence execution derives the name 
     of the auto-generated sequence of a SERIAL column, 
index 01e9d25be3dfce16c93617f50eedafa4c086cdf5..e2f5f23159f623a5d178cd25d8036fc85a2c597c 100644 (file)
@@ -654,6 +654,10 @@ class SQLiteDialect(default.DefaultDialect):
             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)
index f4871969a4df9ed20538e2c406f5fd5a9ea391ab..9a091530336de497a13a73d51bf8233ad2bacb4b 100644 (file)
@@ -636,3 +636,22 @@ class TestAutoIncrement(TestBase, AssertsCompiledSQL):
                             'CREATE TABLE noautoinctable (id INTEGER '
                             'NOT NULL, x INTEGER, PRIMARY KEY (id))',
                             dialect=sqlite.dialect())
+
+
+class ReflectHeadlessFKsTest(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)
+
+