From: Mike Bayer Date: Wed, 19 Jul 2006 16:10:15 +0000 (+0000) Subject: fix to typing in clause construction which specifically helps X-Git-Tag: rel_0_2_6~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d2513a54eb62f5e217eb738ecacb3b2058472228;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fix to typing in clause construction which specifically helps type issues with polymorphic_union (CAST/ColumnClause propigates its type to proxy columns) --- diff --git a/CHANGES b/CHANGES index 9f3250224b..8875727c29 100644 --- a/CHANGES +++ b/CHANGES @@ -32,6 +32,9 @@ a flush() under some circumstances, this was fixed - added "synonym()" function, applied to properties to have a propname the same as another, for the purposes of overriding props and allowing the original propname to be accessible in select_by(). +- fix to typing in clause construction which specifically helps +type issues with polymorphic_union (CAST/ColumnClause propigates +its type to proxy columns) 0.2.5 - fixed endless loop bug in select_by(), if the traversal hit diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 8109d8cd52..e0b8866f62 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -985,7 +985,15 @@ class Cast(ColumnElement): visitor.visit_cast(self) def _get_from_objects(self): return self.clause._get_from_objects() - + def _make_proxy(self, selectable, name=None): + if name is not None: + co = ColumnClause(name, selectable, type=self.type) + co.orig_set = self.orig_set + selectable.columns[name]= co + return co + else: + return self + class FunctionGenerator(object): """generates Function objects based on getattr calls""" def __init__(self, engine=None): @@ -1210,7 +1218,7 @@ class ColumnClause(ColumnElement): def _bind_param(self, obj): return BindParamClause(self._label, obj, shortname = self.name, type=self.type) def _make_proxy(self, selectable, name = None): - c = ColumnClause(name or self.name, selectable, hidden=self.hidden) + c = ColumnClause(name or self.name, selectable, hidden=self.hidden, type=self.type) c.orig_set = self.orig_set if not self.hidden: selectable.columns[c.name] = c @@ -1349,7 +1357,6 @@ class CompoundSelect(SelectBaseMixin, FromClause): col = column._make_proxy(self, name=column._label) else: col = column._make_proxy(self, name=column.name) - try: colset = self._col_map[col.name] except KeyError: