.. changelog::
:version: 1.1.0
+ .. change::
+ :tags: bug, sql
+ :tickets: 3789
+
+ Stringify of expression with unnamed :class:`.Column` objects, as
+ occurs in lots of situations including ORM error reporting,
+ will now render the name in string context as "<name unknown>"
+ rather than raising a compile error.
+
.. change::
:tags: bug, sql
:tickets: 3786
return label.element._compiler_dispatch(
self, within_columns_clause=False, **kw)
+ def _fallback_column_name(self, column):
+ raise exc.CompileError("Cannot compile Column object until "
+ "its 'name' is assigned.")
+
def visit_column(self, column, add_to_result_map=None,
include_table=True, **kwargs):
name = orig_name = column.name
if name is None:
- raise exc.CompileError("Cannot compile Column object until "
- "its 'name' is assigned.")
+ name = self._fallback_column_name(column)
is_literal = column.is_literal
if not is_literal and isinstance(name, elements._truncated_label):
"""
+ def _fallback_column_name(self, column):
+ return "<name unknown>"
+
def visit_getitem_binary(self, binary, operator, **kw):
return "%s[%s]" % (
self.process(binary.left, **kw),
)
def returning_clause(self, stmt, returning_cols):
-
columns = [
self._label_select_column(None, c, True, False, {})
for c in elements._select_iterables(returning_cols)
assert_raises_message(
exc.CompileError,
"Cannot compile Column object until its 'name' is assigned.",
- str, sel2
+ sel2.compile,
+ dialect=default.DefaultDialect()
)
sel3 = select([my_str]).as_scalar()
assert_raises_message(
exc.CompileError,
"Cannot compile Column object until its 'name' is assigned.",
- str, sel3
+ sel3.compile,
+ dialect=default.DefaultDialect()
)
my_str.name = 'foo'
"FROM mytable WHERE mytable.myid = :myid_1"
)
+ def test_unnamed_column(self):
+ stmt = Column(Integer) == 5
+ eq_ignore_whitespace(
+ str(stmt),
+ '"<name unknown>" = :param_1'
+ )
+
def test_cte(self):
# stringify of these was supported anyway by defaultdialect.
stmt = select([table1.c.myid]).cte()