From 8f3528a200004c9228b0266799d0a3a14e82c802 Mon Sep 17 00:00:00 2001 From: eileenmcnaugton Date: Mon, 29 Feb 2016 18:48:46 +1300 Subject: [PATCH] CRM-18120 make acl query less debilitating Change-Id: Id95307aeb9abb4ec67c0418d744798abbd666388 --- CRM/Contact/BAO/Contact/Permission.php | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/CRM/Contact/BAO/Contact/Permission.php b/CRM/Contact/BAO/Contact/Permission.php index 432339166b7a..a09c1fb8cc55 100644 --- a/CRM/Contact/BAO/Contact/Permission.php +++ b/CRM/Contact/BAO/Contact/Permission.php @@ -234,19 +234,14 @@ public static function cache($userID, $type = CRM_Core_Permission::VIEW, $force $permission = CRM_ACL_API::whereClause($type, $tables, $whereTables, $userID); $from = CRM_Contact_BAO_Query::fromClause($whereTables); - - // FIXME: don't use 'ON DUPLICATE KEY UPDATE' CRM_Core_DAO::executeQuery(" INSERT INTO civicrm_acl_contact_cache ( user_id, contact_id, operation ) -SELECT $userID as user_id, contact_a.id as contact_id, '$operation' as operation +SELECT DISTINCT $userID as user_id, contact_a.id as contact_id, '{$operation}' as operation $from -WHERE $permission -GROUP BY contact_a.id -ON DUPLICATE KEY UPDATE - user_id=VALUES(user_id), - contact_id=VALUES(contact_id), - operation=VALUES(operation)" - ); + LEFT JOIN civicrm_acl_contact_cache ac ON ac.user_id = $userID AND ac.contact_id = contact_a.id AND ac.operation = '{$operation}' +WHERE $permission) +AND ac.user_id IS NULL +"); $_processed[$type][$userID] = 1; }