diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-05-10 11:37:48 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-05-10 11:37:48 -0400 |
commit | 25e7dc60dfa739692421a9576c83f2db29f73cb2 (patch) | |
tree | 3c2b88363b8e129c901514f1c7ce7f4f2dd840f0 /lib/sqlalchemy/sql | |
parent | 074ecc43761f1af1de0d29f077e93f641c73c61e (diff) | |
download | sqlalchemy-25e7dc60dfa739692421a9576c83f2db29f73cb2.tar.gz |
- the _make_proxy() method of ColumnClause and Column now use
self.__class__ to determine the class of object to be returned
instead of hardcoding to ColumnClause/Column, making it slightly
easier to produce specific subclasses of these which work in
alias/subquery situations.
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 14 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/util.py | 4 |
2 files changed, 17 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 440c11833..9ac5c1d66 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -1037,6 +1037,18 @@ class ClauseElement(Visitable): return c + @property + def _constructor(self): + """return the 'constructor' for this ClauseElement. + + This is for the purposes for creating a new object of + this type. Usually, its just the element's __class__. + However, the "Annotated" version of the object overrides + to return the class of its proxied element. + + """ + return self.__class__ + @util.memoized_property def _cloned_set(self): """Return the set consisting all cloned anscestors of this @@ -3244,7 +3256,7 @@ class ColumnClause(_Immutable, ColumnElement): # propagate the "is_literal" flag only if we are keeping our name, # otherwise its considered to be a label is_literal = self.is_literal and (name is None or name == self.name) - c = ColumnClause( + c = self._constructor( name or self.name, selectable=selectable, type_=self.type, diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index b81906396..e4ebe9538 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -265,6 +265,10 @@ class Annotated(object): def _deannotate(self): return self.__element + + @property + def _constructor(self): + return self.__element.__class__ def _clone(self): clone = self.__element._clone() |