diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-08 00:26:23 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-08 00:26:23 +0000 |
| commit | 7a25be0f4214720198029e85c2f1d18f4fc8bad3 (patch) | |
| tree | a7036d2b53881c858e75cd0229e712798989ef53 /lib/sqlalchemy/sql/expression.py | |
| parent | 004345d7c9add3647fa9b04b5c8c8c6c77be3173 (diff) | |
| download | sqlalchemy-7a25be0f4214720198029e85c2f1d18f4fc8bad3.tar.gz | |
- identified some cases where Alias needs to be cloned; but still cant clone
when its an alias of a Table; added some test coverage for one particular
case from the doctests
- fixed "having" example in doctests, updated eager load example
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
| -rw-r--r-- | lib/sqlalchemy/sql/expression.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 479ce6425..6276f33bd 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -842,7 +842,6 @@ class ClauseElement(object): part of the "deep" copy afforded by a traversal that combines the _copy_internals() method. """ - c = self.__class__.__new__(self.__class__) c.__dict__ = self.__dict__.copy() return c @@ -2396,11 +2395,21 @@ class Alias(FromClause): return self.selectable.columns def _clone(self): - # Alias is immutable - return self + # TODO: need test coverage to assert ClauseAdapter behavior + # here; must identify non-ORM failure cases when a. _clone() returns 'self' in all + # cases and b. when _clone() does an actual _clone() in all cases. + if isinstance(self.selectable, TableClause): + return self + else: + return super(Alias, self)._clone() def _copy_internals(self, clone=_clone): - pass + self._clone_from_clause() + self.selectable = _clone(self.selectable) + baseselectable = self.selectable + while isinstance(baseselectable, Alias): + baseselectable = baseselectable.selectable + self.original = baseselectable def get_children(self, **kwargs): for c in self.c: |
