From 59c2559e97a2bdeaf777fcb2fe3466e20d91aaae Mon Sep 17 00:00:00 2001 From: Nicolas Seinlet Date: Wed, 5 Dec 2018 12:41:32 +0000 Subject: [PATCH] [IMP] account: improved join Joining on a case is far to be optimal. doing 3 left joins and a coalesce is faster. partner_id is a required field in res.partner.bank, but some migrated database have records in res.partner.bank model without id. To keep existing behaviour, the third join (the one on the name) is kept for backward compatibility. closes odoo/odoo#29276 --- addons/account/models/reconciliation_widget.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/addons/account/models/reconciliation_widget.py b/addons/account/models/reconciliation_widget.py index ac01af809fa..0c5c2a385a0 100644 --- a/addons/account/models/reconciliation_widget.py +++ b/addons/account/models/reconciliation_widget.py @@ -82,18 +82,12 @@ class AccountReconciliation(models.AbstractModel): query = ''' SELECT st_line.id AS id, - partner.id AS partner_id + COALESCE(p1.id,p2.id,p3.id) AS partner_id FROM account_bank_statement_line st_line LEFT JOIN res_partner_bank bank ON bank.id = st_line.bank_account_id OR bank.acc_number = st_line.account_number - LEFT JOIN res_partner partner ON ( - CASE WHEN st_line.partner_id IS NOT NULL THEN - partner.id = st_line.partner_id - WHEN bank.partner_id IS NOT NULL THEN - partner.id = bank.partner_id - ELSE - partner.name ILIKE st_line.partner_name - END - ) + LEFT JOIN res_partner p1 ON st_line.partner_id=p1.id + LEFT JOIN res_partner p2 ON bank.partner_id=p2.id + LEFT JOIN res_partner p3 ON p3.name ILIKE st_line.partner_name WHERE st_line.id IN %s ''' params = [tuple(st_lines.ids)]