From eff7b4f29d2a98ef4ccd95b693c7d653eaa543eb Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 21 Feb 2016 22:46:31 -0500 Subject: - additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (cherry picked from commit aa9ce3f521f254da9879ede011e520ec35b8270e) --- lib/sqlalchemy/sql/compiler.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index b75dc1c07..8600dbaeb 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -1640,7 +1640,10 @@ class SQLCompiler(Compiled): # rewrite the targeted columns in the result map translate = dict( - zip(select.inner_columns, select_wraps_for.inner_columns) + zip( + [name for (key, name) in select._columns_plus_names], + [name for (key, name) in + select_wraps_for._columns_plus_names]) ) self._result_columns = [ -- cgit v1.2.1