diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-04-22 10:45:01 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-04-22 15:09:27 -0400 |
commit | 17072f8b04c6a3a989673e85ace163620f9130cd (patch) | |
tree | 559661c76a4ad19ce957b4c9248108169cf94b9b /lib/sqlalchemy/sql/compiler.py | |
parent | 72f43a8b49803cd4d4befe91635f6691965f34fb (diff) | |
download | sqlalchemy-17072f8b04c6a3a989673e85ace163620f9130cd.tar.gz |
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
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 4c591a87f..6168248ff 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -3156,7 +3156,7 @@ class SQLCompiler(Compiled): entry["select_0"] = select elif compound_index: select_0 = entry["select_0"] - numcols = len(select_0.selected_columns) + numcols = len(select_0._all_selected_columns) if len(compile_state.columns_plus_names) != numcols: raise exc.CompileError( @@ -3168,7 +3168,7 @@ class SQLCompiler(Compiled): 1, numcols, compound_index + 1, - len(select.selected_columns), + len(select._all_selected_columns), ) ) |