From 9d27f8b951e6c71ccdacf2370cc93c6b48af949b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 22 Mar 2024 22:40:09 +0100 Subject: [PATCH] Do not use sub-query with target table of Many2One for id only clause Closes #13121 --- trytond/trytond/model/fields/many2one.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/trytond/trytond/model/fields/many2one.py b/trytond/trytond/model/fields/many2one.py index 0e3a9a1816..bd70fbf390 100644 --- a/trytond/trytond/model/fields/many2one.py +++ b/trytond/trytond/model/fields/many2one.py @@ -264,17 +264,16 @@ class Many2One(Field): else: _, target_name = name.split('.', 1) target_domain = [(target_name,) + tuple(domain[1:])] - if Target.estimated_count() < _subquery_threshold: + rule_domain = Rule.domain_get(Target.__name__, mode='read') + if not rule_domain and target_name == 'id': + # No need to join with the target table + return super().convert_domain( + (self.name, operator, value), tables, Model) + elif Target.estimated_count() < _subquery_threshold: query = Target.search(target_domain, order=[], query=True) return column.in_(query) else: - rule_domain = Rule.domain_get(Target.__name__, mode='read') - if rule_domain: - target_domain = [target_domain, rule_domain] - elif target_name == 'id': - # No need to join with the target table - return super().convert_domain( - (self.name, operator, value), tables, Model) + target_domain = [target_domain, rule_domain] target_tables = self._get_target_tables(tables) target_table, _ = target_tables[None] _, expression = Target.search_domain(