From b17fa2513e412b8f9aa1f62c0acc7fa3805e632b Mon Sep 17 00:00:00 2001 From: Nicolas Rolin Date: Fri, 25 May 2018 13:27:22 -0400 Subject: Add support of empty list in exanding of bindparam Added new logic to the "expanding IN" bound parameter feature whereby if the given list is empty, a special "empty set" expression that is specific to different backends is generated, thus allowing IN expressions to be fully dynamic including empty IN expressions. Fixes: #4271 Change-Id: Icc3c73bbd6005206b9d06baaeb14a097af5edd36 Pull-request: https://github.com/zzzeek/sqlalchemy/pull/432 --- lib/sqlalchemy/engine/default.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 915812a4f..aa524cd51 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -734,10 +734,12 @@ class DefaultExecutionContext(interfaces.ExecutionContext): if parameter.expanding: values = compiled_params.pop(name) if not values: - raise exc.InvalidRequestError( - "'expanding' parameters can't be used with an " - "empty list" + to_update = [] + replacement_expressions[name] = ( + self.compiled.visit_empty_set_expr( + type_=parameter.type) ) + elif isinstance(values[0], (tuple, list)): to_update = [ ("%s_%s_%s" % (name, i, j), value) -- cgit v1.2.1