From bf8d288d04759970a884c8f3998acd7448adea2d Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 11 Sep 2019 15:25:54 +0000 Subject: [PATCH] [FIX] base: simplify computation of `commercial_partner_id` The computation was using an SQL query to speed it up, but the recent changes in the ORM have made this optimization useless. We have benchmarked an import of 10000 partners linked to the same parent, in a database with Sales and Stock installed. The import is slightly faster without the SQL query (7 min vs 8 min). closes odoo/odoo#36768 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/models/res_partner.py | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index 7be6deab206..268494fb1a0 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -273,32 +273,8 @@ class Partner(models.Model): @api.depends('is_company', 'parent_id.commercial_partner_id') def _compute_commercial_partner(self): - self.env.cr.execute(""" - WITH RECURSIVE cpid(id, parent_id, commercial_partner_id, final) AS ( - SELECT - id, parent_id, id, - (coalesce(is_company, false) OR parent_id IS NULL) as final - FROM res_partner - WHERE id = ANY(%s) - UNION - SELECT - cpid.id, p.parent_id, p.id, - (coalesce(is_company, false) OR p.parent_id IS NULL) as final - FROM res_partner p - JOIN cpid ON (cpid.parent_id = p.id) - WHERE NOT cpid.final - ) - SELECT cpid.id, cpid.commercial_partner_id - FROM cpid - WHERE final AND id = ANY(%s); - """, [self.ids, self.ids]) - - d = dict(self.env.cr.fetchall()) for partner in self: - fetched = d.get(partner.id) - if fetched is not None: - partner.commercial_partner_id = fetched - elif partner.is_company or not partner.parent_id: + if partner.is_company or not partner.parent_id: partner.commercial_partner_id = partner else: partner.commercial_partner_id = partner.parent_id.commercial_partner_id