? table_cache_1.patch
? table_cache_2.patch
Index: release/package-release-nodes.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/package-release-nodes.php,v
retrieving revision 1.18
diff -u -p -r1.18 package-release-nodes.php
--- release/package-release-nodes.php	14 Jul 2007 15:17:13 -0000	1.18
+++ release/package-release-nodes.php	31 Jul 2007 12:26:26 -0000
@@ -153,6 +153,14 @@ else {
   drupal_exec("$rm -rf $tmp_dir");
 }
 
+if ($task == 'branch') {
+  // Clear any cached data set to expire.
+  cache_clear_all(NULL, 'cache_project_release');
+}
+elseif ($task == 'check' || $task == 'repair') {
+  // Clear any cached data set to expire.
+  cache_clear_all('*', 'cache_project_release', TRUE);
+}
 
 // ------------------------------------------------------------
 // Functions: main work
@@ -209,6 +217,10 @@ function package_releases($type, $projec
     }
     $num_considered++;
   }
+  if ($num_built && !empty($project_id)) {
+    // Clear cached data for this project
+    cache_clear_all($project_id .':', 'cache_project_release', TRUE);
+  }
   if ($num_built || $type == 'branch') {
     if (!empty($project_id)) {
       wd_msg(t("Done packaging releases for @uri from !plural: !num_built built, !num_considered considered.", array('@uri' => $uri, '!plural' => $plural, '!num_built' => $num_built, '!num_considered' => $num_considered)));
Index: release/project_release.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.install,v
retrieving revision 1.7
diff -u -p -r1.7 project_release.install
--- release/project_release.install	13 Jul 2007 03:23:59 -0000	1.7
+++ release/project_release.install	31 Jul 2007 12:26:26 -0000
@@ -36,6 +36,15 @@ function project_release_install() {
           major int unsigned NOT NULL default '0',
           PRIMARY KEY (nid, tid)
         ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
+      db_query("CREATE TABLE {cache_project_release} (
+        cid varchar(255) BINARY NOT NULL default '',
+        data longblob,
+        expire int NOT NULL default '0',
+        created int NOT NULL default '0',
+        headers text,
+        PRIMARY KEY (cid),
+        INDEX expire (expire)
+      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
       break;
 
     case 'pgsql':
@@ -75,6 +84,17 @@ function project_release_install() {
             PRIMARY KEY (nid, tid)
           );"); 
       }
+      if (!db_table_exists('cache_project_release')) {
+        db_query("CREATE TABLE {cache_project_release} (
+          cid varchar(255) NOT NULL default '',
+          data bytea,
+          expire int NOT NULL default '0',
+          created int NOT NULL default '0',
+          headers text,
+          PRIMARY KEY (cid)
+        )");
+        db_query("CREATE INDEX {cache_project_release}_expire_idx ON {cache_project_release} (expire)");
+      }
       break;
   }
   db_query("UPDATE {system} SET weight = 2 WHERE name = 'project_release'");
@@ -144,3 +164,36 @@ function project_release_update_2() {
   }
   return $ret;
 }
+
+/**
+ * Add a cache table {cache_project_release}.
+ */
+function project_release_update_5000() {
+  $ret = array();
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $ret[] = update_sql("CREATE TABLE {cache_project_release} (
+        cid varchar(255) BINARY NOT NULL default '',
+        data longblob,
+        expire int NOT NULL default '0',
+        created int NOT NULL default '0',
+        headers text,
+        PRIMARY KEY (cid),
+        INDEX expire (expire)
+      ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ");
+      break;
+    case 'pgsql':
+      $ret[] = update_sql("CREATE TABLE {cache_project_release} (
+        cid varchar(255) NOT NULL default '',
+        data bytea,
+        expire int NOT NULL default '0',
+        created int NOT NULL default '0',
+        headers text,
+        PRIMARY KEY (cid)
+      )");
+      $ret[] = update_sql("CREATE INDEX {cache_project_release}_expire_idx ON {cache_project_release} (expire)");
+      break;
+  }
+  return $ret;
+}
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.35
diff -u -p -r1.35 project_release.module
--- release/project_release.module	14 Jul 2007 17:19:09 -0000	1.35
+++ release/project_release.module	31 Jul 2007 12:26:26 -0000
@@ -1521,6 +1521,11 @@ function project_release_table($project,
   if (empty($title)) {
     $title = t('Version');
   }
+  // Generate the cache ID.
+  $cid = 'table:'. $project->nid .':'. $table_type .':'. $release_type .':'. $title .':'. (int)$print_size;
+  if ($cached = cache_get($cid, 'cache_project_release')) {
+    return $cached->data;
+  } 
   $select = $join = $where = $order_by = '';
   $tids = project_release_compatibility_list();
   if ($tids) {
@@ -1664,6 +1669,8 @@ function project_release_table($project,
   if (!empty($rows)) {
     $output = theme('table', $header, $rows, array('class' => 'releases'));
   }
+  // Default cache time is 12 hours - will be cleared by the packaging script
+  cache_set($cid, 'cache_project_release', $output, time() + 43200);
   return $output;
 }
 
