diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-03-05 21:52:03 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-03-06 11:15:38 -0500 |
| commit | f62e0c0c7fc4be842a0f4dc4f59019b3c6285fee (patch) | |
| tree | 73c3523c6d4191cfedc1c20130847f9751b43ebd /lib/sqlalchemy/engine/cursor.py | |
| parent | 1f3ef9817453faa021544841d10b5b7107b57916 (diff) | |
| download | sqlalchemy-f62e0c0c7fc4be842a0f4dc4f59019b3c6285fee.tar.gz | |
improve targeting and labeling for unary() in columns clause
Fixed regression where usage of the standalone :func:`_sql.distinct()` used
in the form of being directly SELECTed would fail to be locatable in the
result set by column identity, which is how the ORM locates columns. While
standalone :func:`_sql.distinct()` is not oriented towards being directly
SELECTed (use :meth:`_sql.select.distinct` for a regular
``SELECT DISTINCT..``) , it was usable to a limited extent in this way
previously (but wouldn't work in subqueries, for example). The column
targeting for unary expressions such as "DISTINCT <col>" has been improved
so that this case works again, and an additional improvement has been made
so that usage of this form in a subquery at least generates valid SQL which
was not the case previously.
The change additionally enhances the ability to target elements in
``row._mapping`` based on SQL expression objects in ORM-enabled
SELECT statements, including whether the statement was invoked by
``connection.execute()`` or ``session.execute()``.
Fixes: #6008
Change-Id: I5cfa39435f5418861d70a7db8f52ab4ced6a792e
Diffstat (limited to 'lib/sqlalchemy/engine/cursor.py')
| -rw-r--r-- | lib/sqlalchemy/engine/cursor.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/sqlalchemy/engine/cursor.py b/lib/sqlalchemy/engine/cursor.py index a9933c7ae..b5b92b171 100644 --- a/lib/sqlalchemy/engine/cursor.py +++ b/lib/sqlalchemy/engine/cursor.py @@ -1290,7 +1290,9 @@ class BaseCursorResult(object): compiled and compiled._result_columns and context.cache_hit is context.dialect.CACHE_HIT - and not compiled._rewrites_selected_columns + and not context.execution_options.get( + "_result_disable_adapt_to_context", False + ) and compiled.statement is not context.invoked_statement ): metadata = metadata._adapt_to_context(context) |
