From 2b0d50afc4d11021d4f7607d57577655a92b45f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 12 Dec 2023 18:02:14 +0100 Subject: [PATCH] Compare leaf values only of the same type to sort domain Closes #12792 --- sao/src/common.js | 4 ---- sao/tests/sao.js | 4 +++- tryton/tryton/common/domain_inversion.py | 5 +---- trytond/trytond/tests/test_tools.py | 2 ++ trytond/trytond/tools/domain_inversion.py | 5 +---- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/sao/src/common.js b/sao/src/common.js index e05425e396..5c8581bb8f 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -2438,10 +2438,6 @@ if (!domain.length) { return [0, domain]; } else if (this.is_leaf(domain)) { - if (domain[2] === null) { - domain = domain.slice(); - domain[2] = Number.NEGATIVE_INFINITY; - } return [1, domain]; } else if (~['AND', 'OR'].indexOf(domain)) { return [0, domain]; diff --git a/sao/tests/sao.js b/sao/tests/sao.js index 9586275baf..74b36efd2a 100644 --- a/sao/tests/sao.js +++ b/sao/tests/sao.js @@ -3140,9 +3140,11 @@ ['AND', ['bar', '=', 2], ['baz', '=', 3]]], ['OR', ['foo', '=', null], ['foo', '=', 1], ['AND', ['bar', '=', 2], ['baz', '=', 3]]]], + [[['foo', '=', 'bar'], ['foo', '=', null]], + [['foo', '=', 'bar'], ['foo', '=', null]]], ]; for (const [domain, expected] of tests) { - QUnit.deepEqual(expected, sort(domain)); + QUnit.deepEqual(sort(domain), expected); } }); diff --git a/tryton/tryton/common/domain_inversion.py b/tryton/tryton/common/domain_inversion.py index 6e52d28037..02c7232a99 100644 --- a/tryton/tryton/common/domain_inversion.py +++ b/tryton/tryton/common/domain_inversion.py @@ -288,10 +288,7 @@ def _sort_key(domain): if not domain: return (0, tuple()) elif is_leaf(domain): - if domain[2] is None: - domain = list(domain).copy() - domain[2] = float('-inf') - return (1, tuple(domain)) + return (1, tuple((type(x).__name__, x) for x in domain)) elif domain in ['AND', 'OR']: return (0, domain) else: diff --git a/trytond/trytond/tests/test_tools.py b/trytond/trytond/tests/test_tools.py index 5b55839eda..4f2d8e5055 100644 --- a/trytond/trytond/tests/test_tools.py +++ b/trytond/trytond/tests/test_tools.py @@ -1146,6 +1146,8 @@ class DomainInversionTestCase(unittest.TestCase): ['AND', ('bar', '=', 2), ('baz', '=', 3)]], ['OR', ('foo', '=', None), ('foo', '=', 1), ['AND', ('bar', '=', 2), ('baz', '=', 3)]]), + ([('foo', '=', 'bar'), ('foo', '=', None)], + [('foo', '=', None), ('foo', '=', 'bar')]), ]: with self.subTest(domain=domain): self.assertEqual(sort(domain), expected) diff --git a/trytond/trytond/tools/domain_inversion.py b/trytond/trytond/tools/domain_inversion.py index 60220ca20f..46926d0fc5 100644 --- a/trytond/trytond/tools/domain_inversion.py +++ b/trytond/trytond/tools/domain_inversion.py @@ -288,10 +288,7 @@ def _sort_key(domain): if not domain: return (0, tuple()) elif is_leaf(domain): - if domain[2] is None: - domain = list(domain).copy() - domain[2] = float('-inf') - return (1, tuple(domain)) + return (1, tuple((type(x).__name__, x) for x in domain)) elif domain in ['AND', 'OR']: return (0, domain) else: