? links-cache.patch Index: links.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/links/links.inc,v retrieving revision 1.20.2.4 diff -u -F^f -r1.20.2.4 links.inc --- links.inc 27 Apr 2007 22:12:07 -0000 1.20.2.4 +++ links.inc 29 Jul 2007 15:51:37 -0000 @@ -867,41 +867,49 @@ function links_save_links_for_node(&$nod * This is used, among other things, for legacy compatibility with weblink.module. */ function links_load_links_for_node($nid, $module='links', $lid=0, $firstonly=FALSE, $indexedby = NULL) { - $links = array(); - if ($lid) { - $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d AND l.lid=%d"; - if (! empty($module)) { - $sql .= " AND module='" . $module . "' "; + static $links_cache = array(); + + if (!is_array($links_cache[$module][$nid])) { + $links = array(); + if ($lid) { + $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d AND l.lid=%d"; + if (! empty($module)) { + $sql .= " AND module='" . $module . "' "; + } + $sql .= " ORDER BY weight, l.link_title"; + $result = db_query($sql, array($nid, $lid)); + } else { + $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d"; + if (! empty($module)) { + $sql .= " AND module='" . $module . "' "; + } + $sql .= " ORDER BY weight, l.link_title"; + $result = db_query($sql, array($nid)); } - $sql .= " ORDER BY weight, l.link_title"; - $result = db_query($sql, array($nid, $lid)); - } else { - $sql = "SELECT l.lid, ln.nid, url, url_md5, weight, clicks, module, l.link_title AS link_link_title, ln.link_title AS node_link_title FROM {links_node} ln LEFT JOIN {links} l ON l.lid=ln.lid WHERE ln.nid=%d"; - if (! empty($module)) { - $sql .= " AND module='" . $module . "' "; + if (db_error($result)) { + watchdog("error",t("links failed on query ").$sql); } - $sql .= " ORDER BY weight, l.link_title"; - $result = db_query($sql, array($nid)); - } - if (db_error($result)) { - watchdog("error",t("links failed on query ").$sql); - } else { - while ($row = db_fetch_array($result)) { - $row['link_title'] = trim($row['link_title']); - $row['link_title'] = trim(empty($row['node_link_title']) ? $row['link_link_title'] : $row['node_link_title']); - if($indexedby){ - $links[$row[$indexedby]] = $row; - } - else { - $links[] = $row; - } - if ($firstonly) { - break; + else { + while ($row = db_fetch_array($result)) { + $row['link_title'] = trim($row['link_title']); + $row['link_title'] = trim(empty($row['node_link_title']) ? $row['link_link_title'] : $row['node_link_title']); + if($indexedby){ + $links[$row[$indexedby]] = $row; + } + else { + $links[] = $row; + } + if ($firstonly) { + break; + } } } + if (!$lid && !$firstonly && empty($indexedby)) { + $links_cache[$module][$nid] = $links; + } + return $links; } - return $links; -} + return $links_cache[$module][$nid];} /*! * @}