summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/expression.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-12-08 19:25:04 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-12-08 19:25:04 -0500
commit33bafcb132ed959f072f98fa488b05e5628f097b (patch)
tree977e71fe9c8cc42270f94d05759073f4d93727ed /lib/sqlalchemy/sql/expression.py
parentc183aa098bbbe9298090df9dcf6adad0be38f6c7 (diff)
downloadsqlalchemy-33bafcb132ed959f072f98fa488b05e5628f097b.tar.gz
Fixed bug whereby using a label_length on dialect that was smaller
than the size of actual column identifiers would fail to render the columns correctly in a SELECT statement. [ticket:2610]
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
-rw-r--r--lib/sqlalchemy/sql/expression.py17
1 files changed, 11 insertions, 6 deletions
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