diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqlalchemy/schema.py | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 17 |
2 files changed, 15 insertions, 8 deletions
diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 2fb542a43..4f3655a1d 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -1114,7 +1114,8 @@ class Column(SchemaItem, expression.ColumnClause): c.dispatch._update(self.dispatch) return c - def _make_proxy(self, selectable, name=None, key=None): + def _make_proxy(self, selectable, name=None, key=None, + name_is_truncatable=False, **kw): """Create a *proxy* for this column. This is a copy of this ``Column`` referenced by a different parent @@ -1130,7 +1131,8 @@ class Column(SchemaItem, expression.ColumnClause): "been assigned.") try: c = self._constructor( - expression._as_truncated(name or self.name), + expression._as_truncated(name or self.name) if \ + name_is_truncatable else (name or self.name), self.type, key=key if key else name if name else self.key, primary_key=self.primary_key, diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 706549518..ee6f134b4 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -2320,7 +2320,7 @@ class ColumnElement(ClauseElement, ColumnOperators): return hasattr(other, 'name') and hasattr(self, 'name') and \ other.name == self.name - def _make_proxy(self, selectable, name=None, **kw): + def _make_proxy(self, selectable, name=None, name_is_truncatable=False, **kw): """Create a new :class:`.ColumnElement` representing this :class:`.ColumnElement` as it appears in the select list of a descending selectable. @@ -2331,7 +2331,7 @@ class ColumnElement(ClauseElement, ColumnOperators): key = str(self) else: key = name - co = ColumnClause(_as_truncated(name), + co = ColumnClause(_as_truncated(name) if name_is_truncatable else name, selectable, type_=getattr(self, 'type', None)) @@ -4490,12 +4490,15 @@ class ColumnClause(Immutable, ColumnElement): _compared_to_type=self.type, unique=True) - def _make_proxy(self, selectable, name=None, attach=True, **kw): + def _make_proxy(self, selectable, name=None, attach=True, + name_is_truncatable=False, **kw): # 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 = self._constructor( - _as_truncated(name if name else self.name), + _as_truncated(name or self.name) if \ + name_is_truncatable else \ + (name or self.name), selectable=selectable, type_=self.type, is_literal=is_literal @@ -5727,7 +5730,8 @@ class Select(HasPrefixes, SelectBase): if hasattr(c, '_make_proxy'): c._make_proxy(self, name=c._label if self.use_labels else None, - key=c._key_label if self.use_labels else None) + key=c._key_label if self.use_labels else None, + name_is_truncatable=True) def _refresh_for_new_column(self, column): for fromclause in self._froms: @@ -5738,7 +5742,8 @@ class Select(HasPrefixes, SelectBase): if our_label not in self.c: return col._make_proxy(self, name=col._label if self.use_labels else None, - key=col._key_label if self.use_labels else None) + key=col._key_label if self.use_labels else None, + name_is_truncatable=True) return None return None |