From: eileen Date: Tue, 13 Dec 2016 21:12:32 +0000 (+1300) Subject: CRM-19752 Fix slow query on contribution dash. X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=370b4d883b91ca37aac252343b69594d9c43a815;p=civicrm-core.git CRM-19752 Fix slow query on contribution dash. The ACL where clause & from slows down this query :-( --- diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index a508aea8a1..a744aae599 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -929,13 +929,18 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { if ($endDate) { $where[] = "receive_date <= '" . CRM_Utils_Type::escape($endDate, 'Timestamp') . "'"; } - CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes); - if ($financialTypes) { - $where[] = "c.financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; - $where[] = "i.financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; - } - else { - $where[] = "c.financial_type_id IN (0)"; + $financialTypeACLJoin = ''; + if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()) { + $financialTypeACLJoin = " LEFT JOIN civicrm_line_item i ON (i.contribution_id = c.id AND i.entity_table = 'civicrm_contribution') "; + $financialTypes = CRM_Contribute_PseudoConstant::financialType(); + CRM_Financial_BAO_FinancialType::getAvailableFinancialTypes($financialTypes); + if ($financialTypes) { + $where[] = "c.financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; + $where[] = "i.financial_type_id IN (" . implode(',', array_keys($financialTypes)) . ")"; + } + else { + $where[] = "c.financial_type_id IN (0)"; + } } $whereCond = implode(' AND ', $where); @@ -946,7 +951,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { currency FROM civicrm_contribution c INNER JOIN civicrm_contact contact ON ( contact.id = c.contact_id ) -LEFT JOIN civicrm_line_item i ON ( i.contribution_id = c.id AND i.entity_table = 'civicrm_contribution' ) + $financialTypeACLJoin WHERE $whereCond AND ( is_test = 0 OR is_test IS NULL ) AND contact.is_deleted = 0