diff options
author | Federico Caselli <cfederico87@gmail.com> | 2022-11-08 22:12:47 +0100 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-11-26 18:49:06 -0500 |
commit | 61443aa62bbef158274ae393db399fec7f054c2d (patch) | |
tree | 18d8794c2da57295f7b48530457ca9e71a60dfdb /lib/sqlalchemy/sql/compiler.py | |
parent | 5cc3825da3cdda6bd80e4fe7250b795c15ca4be3 (diff) | |
download | sqlalchemy-61443aa62bbef158274ae393db399fec7f054c2d.tar.gz |
Implement ScalarValue
Added :class:`_expression.ScalarValues` that can be used as a column
element allowing using :class:`_expression.Values` inside IN clauses
or in conjunction with ``ANY`` or ``ALL`` collection aggregates.
This new class is generated using the method
:meth:`_expression.Values.scalar_values`.
The :class:`_expression.Values` instance is now coerced to a
:class:`_expression.ScalarValues` when used in a ``IN`` or ``NOT IN``
operation.
Fixes: #6289
Change-Id: Iac22487ccb01553684b908e54d01c0687fa739f1
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 17aafddad..9e4422fbd 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -3612,9 +3612,9 @@ class SQLCompiler(Compiled): return text - def visit_values(self, element, asfrom=False, from_linter=None, **kw): + def _render_values(self, element, **kw): kw.setdefault("literal_binds", element.literal_binds) - v = "VALUES %s" % ", ".join( + tuples = ", ".join( self.process( elements.Tuple( types=element._column_types, *elem @@ -3624,6 +3624,10 @@ class SQLCompiler(Compiled): for chunk in element._data for elem in chunk ) + return f"VALUES {tuples}" + + def visit_values(self, element, asfrom=False, from_linter=None, **kw): + v = self._render_values(element, **kw) if element._unnamed: name = None @@ -3661,6 +3665,9 @@ class SQLCompiler(Compiled): v = "%s(%s)" % (lateral, v) return v + def visit_scalar_values(self, element, **kw): + return f"({self._render_values(element, **kw)})" + def get_render_as_alias_suffix(self, alias_name_text): return " AS " + alias_name_text |