All pastes #135058 Raw Edit

variable_cache

public php v1 · immutable
#135058 ·published 2006-08-16 17:34 UTC
rendered paste body
=== modified file 'includes/bootstrap.inc'--- includes/bootstrap.inc	+++ includes/bootstrap.inc	@@ -28,6 +28,9 @@ define('DRUPAL_BOOTSTRAP_FULL', 6); define('DRUPAL_ANONYMOUS_RID', 1); define('DRUPAL_AUTHENTICATED_RID', 2); +define('VARIABLE_SHORT_CACHE', 1);+define('VARIABLE_LONG_CACHE', 2);+ /**  * Start the timer with the specified name. If you start and stop  * the same timer multiple times, the measured intervals will be@@ -240,15 +243,15 @@ function drupal_get_filename($type, $nam  */ function variable_init($conf = array()) {   // NOTE: caching the variables improves performance with 20% when serving cached pages.-  if ($cached = cache_get('variables')) {+  if ($cached = cache_get('variables_short')) {     $variables = unserialize($cached->data);   }   else {-    $result = db_query('SELECT * FROM {variable}');+    $result = db_query('SELECT * FROM {variable} WHERE delta = 1');     while ($variable = db_fetch_object($result)) {       $variables[$variable->name] = unserialize($variable->value);     }-    cache_set('variables', serialize($variables));+    cache_set('variables_short', serialize($variables));   }    foreach ($conf as $name => $value) {@@ -265,12 +268,28 @@ function variable_init($conf = array())   *   The name of the variable to return.  * @param $default  *   The default value to use if this variable has never been set.+ * @param $delta+ *   Which variable cache the variable belongs to. Options are: VARIABLE_SHORT_CACHE, VARIABLE_LONG_CACHE.  * @return  *   The value of the variable.  */-function variable_get($name, $default) {+function variable_get($name, $default, $delta = VARIABLE_SHORT_CACHE) {   global $conf;+  static $long_cache_loaded = NULL; +  if ($delta == VARIABLE_LONG_CACHE && !isset($long_cache_loaded)) {+    if ($cached = cache_get('variables_long')) {+      $variables = unserialize($cached->data);+    }+    else {+      $result = db_query('SELECT * FROM {variable} WHERE delta = 2');+      while ($variable = db_fetch_object($result)) {+        $variables[$variable->name] = unserialize($variable->value);+      }+      cache_set('variables_long', serialize($variables));+    }+    $conf += $variables;+  }   return isset($conf[$name]) ? $conf[$name] : $default; } @@ -282,16 +301,24 @@ function variable_get($name, $default) {  * @param $value  *   The value to set. This can be any PHP data type; these functions take care  *   of serialization as necessary.+ * @param $delta+ *   Which variable cache to insert the variable into. Options are: VARIABLE_SHORT_CACHE, VARIABLE_LONG_CACHE.  */-function variable_set($name, $value) {+function variable_set($name, $value, $delta = VARIABLE_SHORT_CACHE) {   global $conf;    db_lock_table('variable');   db_query("DELETE FROM {variable} WHERE name = '%s'", $name);-  db_query("INSERT INTO {variable} (name, value) VALUES ('%s', '%s')", $name, serialize($value));+  db_query("INSERT INTO {variable} (name, value, delta) VALUES ('%s', '%s', %d)", $name, serialize($value), $delta);   db_unlock_tables(); -  cache_clear_all('variables');+  if ($delta == VARIABLE_LONG_CACHE) {+    $cache = 'variables_long';+  }+  else {+    $cache = 'variables_short';+  }+  cache_clear_all($cache);    $conf[$name] = $value; }