? imagecache_presetcache.patch
Index: imagecache.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/imagecache/imagecache.module,v
retrieving revision 1.9.2.16
diff -u -r1.9.2.16 imagecache.module
--- imagecache.module	30 Nov 2006 05:58:50 -0000	1.9.2.16
+++ imagecache.module	11 Jan 2007 22:08:13 -0000
@@ -151,12 +151,32 @@
   }
 }
 
-function _imagecache_get_presets() {
+function _imagecache_get_presets($reset = FALSE) {
+  static $presets = array();
+ 
+  // Check caches if $reset is FALSE; 
+  if (!$reset) {
+    if (!empty($presets)) {
+      return $presets;
+    }
+
+    // Grab from cache saves building the array. Plus its a frequently used table. 
+    $presets =  cache_get('imagecache:presets');
+    
+    // Fall through if presets is empty.
+    if (is_array($presets)) {
+      return $presets = cache_get('imagecache:presets');    
+    }
+  }
+ 
+  // Load Data from the database on reset or if we get invalid data from the array.
   $presets = array();
   $result = db_query('SELECT presetid, presetname FROM {imagecache_preset} ORDER BY presetname');
   while($row = db_fetch_array($result)) {
     $presets[$row['presetid']] = $row['presetname'];
+    $presets[$row['presetname']] = $row['presetid'];
   }
+  cache_set('imagecache:presets', 'cache', $presets);
   return $presets;
 }
 
@@ -297,8 +317,8 @@
  *    preset id.
  */
 function _imagecache_preset_load($id) {
-  $result = db_query('SELECT presetid, presetname FROM {imagecache_preset} WHERE presetid = %d', $id);
-  return db_fetch_array($result);
+  $presets = _imagecache_get_presets();
+  return $presets[$id];
 }
 
 /** 
@@ -306,10 +326,9 @@
  *  @param name
  *    preset name
  */
-
 function _imagecache_preset_load_by_name($name) {
-  $result = db_query('SELECT presetid, presetname FROM {imagecache_preset} WHERE presetname = \'%s\'', $name);
-  return db_fetch_array($result);
+  $presets = _imagecache_get_presets();
+  return $presets[$name];
 }
 
 /** 
@@ -320,6 +339,8 @@
 function _imagecache_preset_create($name) {
   $next_id = db_next_id('{imagecache_preset}_presetid');
   db_query('INSERT INTO {imagecache_preset} (presetid, presetname) VALUES (%d, \'%s\')', $next_id, $name);
+  // reset presets cache.
+  _imagecache_get_presets(TRUE);
   $_REQUEST['destination'] = 'admin/imagecache/preset/'.$next_id;
 }
 
@@ -336,6 +357,8 @@
   _imagecache_preset_flush($id);
   db_query('UPDATE {imagecache_preset} SET presetname =\'%s\' WHERE presetid = %d', $name, $id);
   drupal_set_message(t('Updated preset "%name" (ID: @id)', array('%name' => $name, '@id' => $id)));
+  // reset presets cache.
+  _imagecache_get_presets(TRUE);
   $_REQUEST['destination'] = 'admin/imagecache/preset/'.$id;
 }
 
@@ -344,6 +367,8 @@
   db_query('DELETE FROM {imagecache_action} where presetid = %d', $id);
   db_query('DELETE FROM {imagecache_preset} where presetid = %d', $id);
   drupal_set_message(t('Preset "%name" (ID: @id) deleted.', array('%name' => $name, '@id' => $id)));
+  // reset presets cache.
+  _imagecache_get_presets(TRUE);
 }
 
 /**
