? table_cache_1.patch
? table_cache_2.patch
? table_cache_3.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 21:50:45 -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 == 'repair') {
+  // Clear all cached data
+  cache_clear_all('*', 'cache_project_release', TRUE);
+}
 
 // ------------------------------------------------------------
 // Functions: main work
@@ -184,7 +192,7 @@ function package_releases($type, $projec
     $args[] = $project_id;
   }
 
-  $query = db_query("SELECT pp.uri, prn.nid, prn.tag, prn.version, c.directory, c.rid FROM {project_release_nodes} prn $rel_node_join INNER JOIN {project_projects} pp ON prn.pid = pp.nid INNER JOIN {node} np ON prn.pid = np.nid INNER JOIN {project_release_projects} prp ON prp.nid = prn.pid INNER JOIN {cvs_projects} c ON prn.pid = c.nid WHERE np.status = 1 AND prp.releases = 1" . $where . ' ORDER BY pp.uri', $args);
+  $query = db_query("SELECT pp.uri, prn.nid, prn.pid, prn.tag, prn.version, c.directory, c.rid FROM {project_release_nodes} prn $rel_node_join INNER JOIN {project_projects} pp ON prn.pid = pp.nid INNER JOIN {node} np ON prn.pid = np.nid INNER JOIN {project_release_projects} prp ON prp.nid = prn.pid INNER JOIN {cvs_projects} c ON prn.pid = c.nid WHERE np.status = 1 AND prp.releases = 1" . $where . ' ORDER BY pp.uri', $args);
 
   $num_built = 0;
   $num_considered = 0;
@@ -193,16 +201,17 @@ function package_releases($type, $projec
     $uri = $release->uri;
     $tag = $release->tag;
     $nid = $release->nid;
+    $pid = $release->pid;
     $rev = ($tag == 'TRUNK') ? '-r HEAD' : "-r $tag";
     $uri = escapeshellcmd($uri);
     $version = escapeshellcmd($version);
     $rev = escapeshellcmd($rev);
     if ($release->rid == 1) {
-      $built = package_release_core($nid, $uri, $version, $rev);
+      $built = package_release_core($nid, $pid, $uri, $version, $rev);
     }
     else {
       $dir = escapeshellcmd($release->directory);
-      $built = package_release_contrib($nid, $uri, $version, $rev, $dir);
+      $built = package_release_contrib($nid, $pid, $uri, $version, $rev, $dir);
     }
     if ($built) {
       $num_built++;
@@ -219,7 +228,7 @@ function package_releases($type, $projec
   }
 }
 
-function package_release_core($nid, $uri, $version, $rev) {
+function package_release_core($nid, $pid, $uri, $version, $rev) {
   global $tmp_dir, $repositories, $dest_root, $dest_rel;
   global $cvs, $tar, $gzip, $rm;
   $rid = 1;
@@ -266,6 +275,9 @@ function package_release_core($nid, $uri
   // As soon as the tarball exists, we want to update the DB about it.
   package_release_update_node($nid, $file_path);
 
+  // Clear cached data for this project
+  cache_clear_all($pid .':', 'cache_project_release', TRUE);
+
   wd_msg(t("%id has changed, re-packaged.", array('%id' => $id)), $view_link);
 
   // Don't consider failure to remove this directory a build failure.
@@ -273,7 +285,7 @@ function package_release_core($nid, $uri
   return true;
 }
 
-function package_release_contrib($nid, $uri, $version, $rev, $dir) {
+function package_release_contrib($nid, $pid, $uri, $version, $rev, $dir) {
   global $tmp_dir, $repositories, $dest_root, $dest_rel;
   global $cvs, $tar, $gzip, $rm, $ln;
   global $msgcat, $msgattrib, $msgfmt;
@@ -391,6 +403,9 @@ function package_release_contrib($nid, $
   // As soon as the tarball exists, update the DB
   package_release_update_node($nid, $file_path);
 
+  // Clear cached data for this project
+  cache_clear_all($pid .':', 'cache_project_release', TRUE);
+
   wd_msg(t("%id has changed, re-packaged.", array('%id' => $id)), $view_link);
 
   // Don't consider failure to remove this directory a build failure.
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 21:50:45 -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 IF NOT EXISTS {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,38 @@ 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 IF NOT EXISTS {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':
+      if (!db_table_exists('cache_project_release')) {
+        $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 21:50:45 -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;
 }
 
