Index: customfilter/customfilter.module
===================================================================
--- customfilter/customfilter.module	(revision 1969)
+++ customfilter/customfilter.module	(working copy)
@@ -20,17 +20,20 @@
  *   Array of filter sets
  */
 function customfilter_get_sets($cols = array('sid', 'name', 'description'), $cond = '1=1') {
-  $sets = array();
-  
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
+  static $sets;
+  if (!is_array($sets)) {
+    $sets = array();
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Query & fetch
+    $result = db_query("SELECT %s FROM {customfilter_set} WHERE %s ORDER BY name", $columns, $cond);
+    while ($set = db_fetch_array($result)) {
+      $sets[] = $set;
+    };
 
-  // Query & fetch
-  $result = db_query("SELECT %s FROM {customfilter_set} WHERE %s ORDER BY name", $columns, $cond);
-  while ($set = db_fetch_array($result)) {
-    $sets[] = $set;
-  };
+  }
    
   return $sets;
 }
@@ -47,14 +50,21 @@
  *   The filter set
  */
 function customfilter_get_set($sid, $cols = array('sid', 'name', 'description')) {
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
+  static $sets;
+  if (!is_array($sets)) {
+    $sets = array();
+  }
+  if (!$sets[$sid]) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Query & Fetch
+    $set = db_fetch_array(db_query("SELECT %s FROM {customfilter_set} WHERE sid=%d", $columns, $sid));
+    $sets[$sid] = $set;
+  }
 
-  // Query & Fetch
-  $set = db_fetch_array(db_query("SELECT %s FROM {customfilter_set} WHERE sid=%d", $columns, $sid));
-
-  return $set;
+  return $sets[$sid];
 }
 
 /**
@@ -73,32 +83,36 @@
  *   Array of filters (each have ['sub'], contains subfilters if any)
  */
 function customfilter_get_filters($sid, $root = 0, $sortby = 'weight', $cols = '*') {
-  $filters = array();
-
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
-  
-  // Prepare nodes
-  $nodes = array();
-  if (is_array($root)) {
-    $nodes = $root;
+  static $filters;
+  if (!is_array($filters)) {
+    $filters = array();
   }
-  else {
-    $nodes = array($root);
-  }
+  if (!isset($filters[$sid])) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
+    
+    // Prepare nodes
+    $nodes = array();
+    if (is_array($root)) {
+      $nodes = $root;
+    }
+    else {
+      $nodes = array($root);
+    }
 
-  foreach ($nodes as $node) {
-    $result = db_query("SELECT %s FROM {customfilter_filter} WHERE sid=%d and parentid=%d ORDER BY %s", $columns, $sid, $node, $sortby);
+    foreach ($nodes as $node) {
+      $result = db_query("SELECT %s FROM {customfilter_filter} WHERE sid=%d and parentid=%d ORDER BY %s", $columns, $sid, $node, $sortby);
     
-    while ($filter = db_fetch_array($result)) {
-      $filter['sub'] = customfilter_get_filters($sid, $filter['fid'], $sortby, $cols);
+      while ($filter = db_fetch_array($result)) {
+        $filter['sub'] = customfilter_get_filters($sid, $filter['fid'], $sortby, $cols);
+        
+        $filters[$sid][$filter['fid']] = $filter;
+      };
+    };
+  }
     
-      $filters[$filter['fid']] = $filter;
-    };
-  };
-   
-  return $filters;
+  return $filters[$sid];
 }
  
 /**
@@ -113,13 +127,19 @@
  *   The filter
  */
 function customfilter_get_filter($fid, $cols = '*') {
-  // Prepare columns to select
-  if (! is_array($cols)) $cols = array($cols);
-  $columns = join(', ', $cols);
+  static $filters;
+  if (!is_arary($filters)) {
+    $filters = array();
+  }
+  if (!isset($filters[$fid])) {
+    // Prepare columns to select
+    if (! is_array($cols)) $cols = array($cols);
+    $columns = join(', ', $cols);
 
-  $filter = db_fetch_array(db_query("SELECT %s FROM {customfilter_filter} WHERE fid=%d", $columns, $fid));
-  
-  return $filter;
+    $filter = db_fetch_array(db_query("SELECT %s FROM {customfilter_filter} WHERE fid=%d", $columns, $fid));
+    $filters[$fid] = $filter;
+  }
+  return $filters[$fid];
 }
 
 /**
