+ /**
+ * This function is called to rebuild prev next cache using full sql in case of core search ( excluding custom search)
+ *
+ * @param int $start start for limit clause
+ * @param int $end end for limit clause
+ * @param $object $sort sort object
+ * @param string $cacheKey cache key
+ *
+ * @return void
+ */
+ function rebuildPreNextCache($start, $end, $sort, $cacheKey) {
+ // generate full SQL
+ $sql = $this->_query->searchQuery($start, $end, $sort, FALSE, $this->_query->_includeContactIds,
+ FALSE, FALSE, TRUE);
+
+ $dao = CRM_Core_DAO::executeQuery($sql);
+
+ // build insert query, note that currently we build cache for 500 contact records at a time, hence below approach
+ $insertValues = array();
+ while($dao->fetch()) {
+ $insertValues[] = "('civicrm_contact', {$dao->contact_id}, {$dao->contact_id}, '{$cacheKey}', '{$dao->sort_name}')";
+ }
+
+ //update pre/next cache using single insert query
+ if (!empty($insertValues)) {
+ $sql = 'INSERT INTO civicrm_prevnext_cache ( entity_table, entity_id1, entity_id2, cacheKey, data ) VALUES
+'.implode(',', $insertValues);
+
+ $result = CRM_Core_DAO::executeQuery($sql);
+ }
+ }
+