summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r--lib/sqlalchemy/sql/compiler.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 400ac2749..8bd2249e2 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -1799,18 +1799,26 @@ class SQLCompiler(Compiled):
column_clause_args,
name=None,
within_columns_clause=True,
+ need_column_expressions=False,
):
"""produce labeled columns present in a select()."""
impl = column.type.dialect_impl(self.dialect)
- if impl._has_column_expression and populate_result_map:
+
+ if impl._has_column_expression and (
+ need_column_expressions or populate_result_map
+ ):
col_expr = impl.column_expression(column)
- def add_to_result_map(keyname, name, objects, type_):
- self._add_to_result_map(
- keyname, name, (column,) + objects, type_
- )
+ if populate_result_map:
+ def add_to_result_map(keyname, name, objects, type_):
+ self._add_to_result_map(
+ keyname, name, (column,) + objects, type_
+ )
+
+ else:
+ add_to_result_map = None
else:
col_expr = column
if populate_result_map:
@@ -2085,15 +2093,15 @@ class SQLCompiler(Compiled):
toplevel = not self.stack
entry = self._default_stack_entry if toplevel else self.stack[-1]
- populate_result_map = (
+ populate_result_map = need_column_expressions = (
toplevel
- or (
- compound_index == 0
- and entry.get("need_result_map_for_compound", False)
- )
+ or entry.get("need_result_map_for_compound", False)
or entry.get("need_result_map_for_nested", False)
)
+ if compound_index > 0:
+ populate_result_map = False
+
# this was first proposed as part of #3372; however, it is not
# reached in current tests and could possibly be an assertion
# instead.
@@ -2138,6 +2146,7 @@ class SQLCompiler(Compiled):
asfrom,
column_clause_args,
name=name,
+ need_column_expressions=need_column_expressions,
)
for name, column in select._columns_plus_names
]