diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2021-04-16 22:07:34 +0200 |
|---|---|---|
| committer | Federico Caselli <cfederico87@gmail.com> | 2021-04-16 22:28:16 +0200 |
| commit | 91562f56185e1e69676712ccb109865a6622a538 (patch) | |
| tree | f901b04f7e1a569936f827122ad4222edcd19dd3 /lib/sqlalchemy/sql | |
| parent | b73fc8f874da94c9c5b2d94feb6b1b45b7f4f02b (diff) | |
| download | sqlalchemy-91562f56185e1e69676712ccb109865a6622a538.tar.gz | |
Fit literal compile of empty in on a tuple
Fixed regression where an empty in statement on a tuple would result
in an error when compiled with the option ``literal_binds=True``.
Fixes: #6290
Change-Id: Ic0dff8f4a874cccdb201b6d9dcd3c2e7b7884cbb
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/elements.py | 4 |
2 files changed, 10 insertions, 6 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 0c701cb52..a466216e3 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -1914,10 +1914,14 @@ class SQLCompiler(Compiled): ): if not values: - assert not parameter.type._is_tuple_type - replacement_expression = self.visit_empty_set_expr( - [parameter.type] - ) + if parameter.type._is_tuple_type: + replacement_expression = ( + "VALUES " if self.dialect.tuple_in_values else "" + ) + self.visit_empty_set_expr(parameter.type.types) + else: + replacement_expression = self.visit_empty_set_expr( + [parameter.type] + ) elif isinstance(values[0], (tuple, list)): assert parameter.type._is_tuple_type diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index e97ed252e..699a874fb 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -1407,8 +1407,8 @@ class BindParameter(roles.InElementRole, ColumnElement): self.type = type_api._resolve_value_to_type(check_value) elif isinstance(type_, type): self.type = type_() - elif type_._is_tuple_type: - if expanding and value: + elif type_._is_tuple_type and value: + if expanding: check_value = value[0] else: check_value = value |
