.. changelog::
:version: 0.9.8
+ .. change::
+ :tags: bug, sql
+ :versions: 1.0.0
+ :tickets: 3195
+
+ Fixed bug where a fair number of SQL elements within
+ the sql package would fail to ``__repr__()`` successfully,
+ due to a missing ``description`` attribute that would then invoke
+ a recursion overflow when an internal AttributeError would then
+ re-invoke ``__repr__()``.
+
.. change::
:tags: bug, declarative, orm
:versions: 1.0.0
is_selectable = False
is_clause_element = True
+ description = None
_order_by_label_element = None
_is_from_container = False
__nonzero__ = __bool__
def __repr__(self):
- friendly = getattr(self, 'description', None)
+ friendly = self.description
if friendly is None:
return object.__repr__(self)
else:
from sqlalchemy import *
from sqlalchemy.testing import fixtures, AssertsCompiledSQL, \
AssertsExecutionResults
+from sqlalchemy.sql import elements
from sqlalchemy import testing
from sqlalchemy.sql import util as sql_util, visitors, expression
from sqlalchemy import exc
assert (c2 == 5).left._annotations == {"foo": "bar", "bat": "hoho"}
+class ReprTest(fixtures.TestBase):
+ def test_ensure_repr_elements(self):
+ for obj in [
+ elements.Cast(1, 2),
+ elements.TypeClause(String()),
+ elements.ColumnClause('x'),
+ elements.BindParameter('q'),
+ elements.Null(),
+ elements.True_(),
+ elements.False_(),
+ elements.ClauseList(),
+ elements.BooleanClauseList.and_(),
+ elements.Tuple(),
+ elements.Case([]),
+ elements.Extract('foo', column('x')),
+ elements.UnaryExpression(column('x')),
+ elements.Grouping(column('x')),
+ elements.Over(func.foo()),
+ elements.Label('q', column('x')),
+ ]:
+ repr(obj)
+
+
class WithLabelsTest(fixtures.TestBase):
def _assert_labels_warning(self, s):