diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-07 20:58:23 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-07 20:58:23 -0400 |
| commit | cbb0a03a560fd33933971e7b4c9293918612a2cf (patch) | |
| tree | 11d1941cf09de593ef4e4c0ae31aebc7a28ce1e7 /lib/sqlalchemy/sql | |
| parent | 9d6cb72791502e7a704a244093d6daca9697dd3c (diff) | |
| download | sqlalchemy-cbb0a03a560fd33933971e7b4c9293918612a2cf.tar.gz | |
- the _Label construct, i.e. the one that is produced
whenever you say somecol.label(), now counts itself
in its "proxy_set" unioned with that of it's
contained column's proxy set, instead of
directly returning that of the contained column.
This allows column correspondence
operations which depend on the identity of the
_Labels themselves to return the correct result
- fixes ORM bug [ticket:1852].
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/expression.py | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 4b8df74c6..0a5edb42f 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -3187,7 +3187,8 @@ class _Label(ColumnElement): self._element = element self._type = type_ self.quote = element.quote - + self.proxies = [element] + @util.memoized_property def type(self): return sqltypes.to_instance( @@ -3198,17 +3199,13 @@ class _Label(ColumnElement): def element(self): return self._element.self_group(against=operators.as_) - def _proxy_attr(name): - get = attrgetter(name) - def attr(self): - return get(self.element) - return property(attr) + @property + def primary_key(self): + return self.element.primary_key - proxies = _proxy_attr('proxies') - base_columns = _proxy_attr('base_columns') - proxy_set = _proxy_attr('proxy_set') - primary_key = _proxy_attr('primary_key') - foreign_keys = _proxy_attr('foreign_keys') + @property + def foreign_keys(self): + return self.element.foreign_keys def get_children(self, **kwargs): return self.element, @@ -3225,6 +3222,7 @@ class _Label(ColumnElement): e = self.element._make_proxy(selectable, name=self.name) else: e = column(self.name)._make_proxy(selectable=selectable) + e.proxies.append(self) return e |
