From ed3c159955824c4982926281be819d41ec32aa47 Mon Sep 17 00:00:00 2001 From: eileen Date: Tue, 29 May 2018 14:13:53 +1200 Subject: [PATCH] Make getWhereString function sane by not appending a limit clause --- CRM/Dedupe/Merger.php | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index a148a56ee5..f28d774aef 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -684,7 +684,8 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m // @todo stop passing these parameters in & instead calculate them in the merge function based // on the 'real' params like $isRespectExclusions $batchLimit and $isSelected. 'join' => self::getJoinOnDedupeTable(), - 'where' => self::getWhereString($batchLimit, $isSelected), + 'where' => self::getWhereString($isSelected), + 'limit' => (int) $batchLimit, ); return CRM_Dedupe_Merger::merge($dupePairs, $cacheParams, $mode, $redirectForPerformance, $checkPermissions); } @@ -707,21 +708,15 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m /** * Get where string for dedupe join. * - * @param int $batchLimit * @param bool $isSelected * * @return string */ - protected static function getWhereString($batchLimit, $isSelected) { + protected static function getWhereString($isSelected) { $where = "de.id IS NULL"; if ($isSelected === 0 || $isSelected === 1) { $where .= " AND pn.is_selected = {$isSelected}"; } - // else consider all dupe pairs - // @todo Adding limit to Where??!! - if ($batchLimit) { - $where .= " LIMIT {$batchLimit}"; - } return $where; } @@ -872,7 +867,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $cacheParams['join'], $cacheParams['where'], 0, - 0, + $cacheParams['limit'], array(), '', FALSE @@ -2006,16 +2001,16 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * Array of matches meeting the criteria. */ public static function getDuplicatePairs($rule_group_id, $group_id, $reloadCacheIfEmpty, $batchLimit, $isSelected, $orderByClause = '', $includeConflicts = TRUE, $criteria = array(), $checkPermissions = TRUE, $searchLimit = 0) { - $where = self::getWhereString($batchLimit, $isSelected); + $where = self::getWhereString($isSelected); $cacheKeyString = self::getMergeCacheKeyString($rule_group_id, $group_id, $criteria, $checkPermissions); $join = self::getJoinOnDedupeTable(); - $dupePairs = CRM_Core_BAO_PrevNextCache::retrieve($cacheKeyString, $join, $where, 0, 0, array(), $orderByClause, $includeConflicts); + $dupePairs = CRM_Core_BAO_PrevNextCache::retrieve($cacheKeyString, $join, $where, 0, $batchLimit, array(), $orderByClause, $includeConflicts); if (empty($dupePairs) && $reloadCacheIfEmpty) { // If we haven't found any dupes, probably cache is empty. // Try filling cache and give another try. We don't need to specify include conflicts here are there will not be any // until we have done some processing. CRM_Core_BAO_PrevNextCache::refillCache($rule_group_id, $group_id, $cacheKeyString, $criteria, $checkPermissions, $searchLimit); - $dupePairs = CRM_Core_BAO_PrevNextCache::retrieve($cacheKeyString, $join, $where, 0, 0, array(), $orderByClause, $includeConflicts); + $dupePairs = CRM_Core_BAO_PrevNextCache::retrieve($cacheKeyString, $join, $where, 0, $batchLimit, array(), $orderByClause, $includeConflicts); return $dupePairs; } return $dupePairs; -- 2.25.1