From 8bc793c4dbc876722dfaad0ca731938c70b54b6c Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 18 Aug 2020 14:17:06 -0400 Subject: Deliver straight BinaryExpr w/ no negate for any() / all() Adjusted the :meth:`_types.ARRAY.Comparator.any` and :meth:`_types.ARRAY.Comparator.all` methods to implement a straight "NOT" operation for negation, rather than negating the comparison operator. Fixes: #5518 Change-Id: I87ee9278c321aafe51a679fcfcbb5fbb11307fda --- lib/sqlalchemy/sql/sqltypes.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 14ddedaec..fd85d6d30 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -2699,9 +2699,13 @@ class ARRAY(SchemaEventTarget, Indexable, Concatenable, TypeEngine): """ elements = util.preloaded.sql_elements operator = operator if operator else operators.eq - return operator( + + # send plain BinaryExpression so that negate remains at None, + # leading to NOT expr for negation. + return elements.BinaryExpression( coercions.expect(roles.ExpressionElementRole, other), elements.CollectionAggregate._create_any(self.expr), + operator, ) @util.preload_module("sqlalchemy.sql.elements") @@ -2735,9 +2739,13 @@ class ARRAY(SchemaEventTarget, Indexable, Concatenable, TypeEngine): """ elements = util.preloaded.sql_elements operator = operator if operator else operators.eq - return operator( + + # send plain BinaryExpression so that negate remains at None, + # leading to NOT expr for negation. + return elements.BinaryExpression( coercions.expect(roles.ExpressionElementRole, other), elements.CollectionAggregate._create_all(self.expr), + operator, ) comparator_factory = Comparator -- cgit v1.2.1