]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- put a generic regexp for chopping foreign key specs along the "."
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 18 Jul 2007 18:30:01 +0000 (18:30 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 18 Jul 2007 18:30:01 +0000 (18:30 +0000)
[ticket:667]

lib/sqlalchemy/schema.py
test/dialect/postgres.py

index a504111a73630bab609a49ad9f1f3b071dd41792..afb433e1e4d40b3c2dacc8070ed1367da824326a 100644 (file)
@@ -707,7 +707,7 @@ class ForeignKey(SchemaItem):
                         break
                 else:
                     raise exceptions.ArgumentError("Parent column '%s' does not descend from a table-attached Column" % str(self.parent))
-                m = re.match(r"^([\w_-]+)(?:\.([\w_-]+))?(?:\.([\w_-]+))?$", self._colspec, re.UNICODE)
+                m = re.match(r"^(.+?)(?:\.(.+?))?(?:\.(.+?))?$", self._colspec, re.UNICODE)
                 if m is None:
                     raise exceptions.ArgumentError("Invalid foreign key column specification: " + self._colspec)
                 if m.group(3) is None:
index f5bd4a55faec4b7ebcdd76de3cdf8612f2aa12fa..8b939eea0e760360907c86bf7ee6293f1e19c460 100644 (file)
@@ -79,6 +79,27 @@ class MiscTest(AssertMixin):
         finally:
             m1.drop_all()
 
+    @testbase.supported('postgres')
+    def test_pg_weirdchar_reflection(self):
+        meta1 = MetaData(testbase.db)
+        subject = Table("subject", meta1,
+                        Column("id$", Integer, primary_key=True),
+                        )
+
+        referer = Table("referer", meta1,
+                        Column("id", Integer, primary_key=True),
+                        Column("ref", Integer, ForeignKey('subject.id$')),
+                        )
+        meta1.create_all()
+        try:
+            meta2 = MetaData(testbase.db)
+            subject = Table("subject", meta2, autoload=True)
+            referer = Table("referer", meta2, autoload=True)
+            print str(subject.join(referer).onclause)
+            self.assert_((subject.c['id$']==referer.c.ref).compare(subject.join(referer).onclause))
+        finally:
+            meta1.drop_all()
+        
     @testbase.supported('postgres')
     def test_checksfor_sequence(self):
         meta1 = MetaData(testbase.db)