]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- foreign key specs can have any chararcter in their identifiers
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 18 Jul 2007 18:32:48 +0000 (18:32 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 18 Jul 2007 18:32:48 +0000 (18:32 +0000)
     [ticket:667]

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

diff --git a/CHANGES b/CHANGES
index 81dd74e1ab98253ce8cd4879fa1a3b22dbea2c8b..3f7f8ed31950ba8eee179f7b5e1f0b6d45c72e27 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 - sql
     - got connection-bound metadata to work with implicit execution
     - cleanup to connection-bound sessions, SessionTransaction
+    - foreign key specs can have any chararcter in their identifiers
+     [ticket:667]
+    
 - postgres
     - fixed max identifier length (63) [ticket:571]
 
index a6e3f5f29e1ff16ed6d900c104b42966d854110c..f6ad52adc21c2dbc66535ede975b6a1428aa0b75 100644 (file)
@@ -727,7 +727,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 8d62625c9a890026ea0f7c099670d916d9f4e21a..0507b7c5b6f90a6c07e3156b624017a4b32479a4 100644 (file)
@@ -78,6 +78,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)