? 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];}
 
 /*!
  * @}
