From: Mike Bayer Date: Fri, 18 Dec 2009 18:46:40 +0000 (+0000) Subject: - Fixed bug preventing alias() of an alias() from being X-Git-Tag: rel_0_6beta1~127 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b9657c763a88921ab456992f061a52b4fe08deb2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed bug preventing alias() of an alias() from being cloned or adapted (occurs frequently in ORM operations). [ticket:1641] --- diff --git a/CHANGES b/CHANGES index 2fa791be19..7b5a25031c 100644 --- 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] diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index a87ef9bd1b..2f0ac90af2 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -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): diff --git a/test/sql/test_generative.py b/test/sql/test_generative.py index 0bff777b88..66c6b6c45c 100644 --- a/test/sql/test_generative.py +++ b/test/sql/test_generative.py @@ -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):