diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-09-02 11:48:15 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-09-02 11:48:15 -0400 |
commit | 9a6947427af58eeb6ebf09ec6de2a1b7ec12d828 (patch) | |
tree | 963379c329e48e7dfb82ef49a3a24bc514ffb254 /lib/sqlalchemy/sql/compiler.py | |
parent | f6022839c29f7f96cb9d279aaf2e44e81cafb661 (diff) | |
download | sqlalchemy-9a6947427af58eeb6ebf09ec6de2a1b7ec12d828.tar.gz |
Allow stringify compiler to render unnamed column
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-Id: I76f637c5eb4cfdb1b526964cb001565b97e296da
Fixes: #3789
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 85d5ff6da..a7954f10a 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -660,12 +660,15 @@ class SQLCompiler(Compiled): 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): @@ -2203,6 +2206,9 @@ class StrSQLCompiler(SQLCompiler): """ + 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), @@ -2210,7 +2216,6 @@ class StrSQLCompiler(SQLCompiler): ) def returning_clause(self, stmt, returning_cols): - columns = [ self._label_select_column(None, c, True, False, {}) for c in elements._select_iterables(returning_cols) |