]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
omit text from selected_columns; clear memoizations
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Apr 2021 14:45:01 +0000 (10:45 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Apr 2021 19:09:27 +0000 (15:09 -0400)
commit17072f8b04c6a3a989673e85ace163620f9130cd
tree559661c76a4ad19ce957b4c9248108169cf94b9b
parent72f43a8b49803cd4d4befe91635f6691965f34fb
omit text from selected_columns; clear memoizations

Fixed regression where usage of the :func:`_sql.text` construct inside the
columns clause of a :class:`_sql.Select` construct, which is better handled
by using a :func:`_sql.literal_column` construct, would nonetheless prevent
constructs like :func:`_sql.union` from working correctly. Other use cases,
such as constructing subuqeries, continue to work the same as in prior
versions where the :func:`_sql.text` construct is silently omitted from the
collection of exported columns. Also repairs similar use within the
ORM.

This adds a new internal method _all_selected_columns.  The existing
"selected_columns" collection can't store a TextClause and this never
worked, so they are omitted.  The TextClause is also not "exported",
i.e. available for SELECT from a subquery, as was already the case
in 1.3, so the "exported_columns" and "exported_columns_iterator"
accessors are where we now omit TextClause.

Fixed regression involving legacy methods such as
:meth:`_sql.Select.append_column` where internal assertions would fail.

Fixes: #6343
Fixes: #6261
Change-Id: I7c2e5b9ae5d94131c77599a020f4310dcf812bcf
doc/build/changelog/unreleased_14/6343.rst [new file with mode: 0644]
lib/sqlalchemy/orm/context.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/selectable.py
lib/sqlalchemy/testing/__init__.py
lib/sqlalchemy/testing/schema.py
test/orm/test_core_compilation.py
test/sql/test_selectable.py
test/sql/test_text.py