]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug preventing alias() of an alias() from being
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 18 Dec 2009 18:46:40 +0000 (18:46 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 18 Dec 2009 18:46:40 +0000 (18:46 +0000)
cloned or adapted (occurs frequently in ORM operations).
[ticket:1641]

CHANGES
lib/sqlalchemy/sql/expression.py
test/sql/test_generative.py

diff --git a/CHANGES b/CHANGES
index 2fa791be19210e137f0db8d5badb7171b93060e1..7b5a25031cc668af1e5ff824833f4dc0ac5b7c2a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -845,6 +845,10 @@ CHANGES
       a Text/String, PickleType/Binary, etc.  Part of 
       [ticket:1556].
 
+    - Fixed bug preventing alias() of an alias() from being
+      cloned or adapted (occurs frequently in ORM operations).
+      [ticket:1641]
+      
 - sqlite
     - sqlite dialect properly generates CREATE INDEX for a table
       that is in an alternate schema.  [ticket:1439]
index a87ef9bd1bc3feb9c99288f921f0ff7f177b2185..2f0ac90af2b7517ba6f65c25fd3d8cc6527a3914 100644 (file)
@@ -2819,7 +2819,7 @@ class Alias(FromClause):
         self.element = _clone(self.element)
         baseselectable = self.element
         while isinstance(baseselectable, Alias):
-            baseselectable = baseselectable.selectable
+            baseselectable = baseselectable.element
         self.original = baseselectable
 
     def get_children(self, column_collections=True, aliased_selectables=True, **kwargs):
index 0bff777b88017b59f9da5a5a3ace4ef05ddc7d17..66c6b6c45cd0c027ae4b807f17006c9ae6e68151 100644 (file)
@@ -338,6 +338,11 @@ class ClauseTest(TestBase, AssertsCompiledSQL):
         s4 = sql_util.ClauseAdapter(table('foo')).traverse(s3)
         assert orig == str(s) == str(s3) == str(s4)
 
+        subq = subq.alias('subq')
+        s = select([t1.c.col1, subq.c.col1], from_obj=[t1, subq, t1.join(subq, t1.c.col1==subq.c.col2)])
+        s5 = CloningVisitor().traverse(s)
+        assert orig == str(s) == str(s5)
+        
     def test_correlated_select(self):
         s = select(['*'], t1.c.col1==t2.c.col1, from_obj=[t1, t2]).correlate(t2)
         class Vis(CloningVisitor):