Skip to content

Commit

Permalink
Make it possible to configure cacheMethodHashAlgo in DboSource
Browse files Browse the repository at this point in the history
  • Loading branch information
tersmitten committed Nov 11, 2016
1 parent f46f042 commit 15ccf05
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions lib/Cake/Model/Datasource/DboSource.php
Expand Up @@ -51,22 +51,35 @@ class DboSource extends DataSource {
public $alias = 'AS ';

/**
* Caches result from query parsing operations. Cached results for both DboSource::name() and
* DboSource::conditions() will be stored here. Method caching uses `md5()`. If you have
* problems with collisions, set DboSource::$cacheMethods to false.
* Caches result from query parsing operations. Cached results for both DboSource::name(), DboSource::fields() and
* DboSource::conditions() will be stored here.
*
* Method caching uses `md5` (by default) to construct cache keys.
* If you have problems with collisions, try a different hashing algorithm in DboSource::$cacheMethodHashAlgo or
* set DboSource::$cacheMethods to false.
*
* @var array
*/
public static $methodCache = array();

/**
* Whether or not to cache the results of DboSource::name() and DboSource::conditions()
* Whether or not to cache the results of DboSource::name(), DboSource::fields() and DboSource::conditions()
* into the memory cache. Set to false to disable the use of the memory cache.
*
* @var bool
*/
public $cacheMethods = true;

/**
* Method caching uses `md5` (by default) to construct cache keys. If you have problems with collisions,
* try a different hashing algorithm or set DboSource::$cacheMethods to false.
*
* @var string
* @see http://php.net/manual/en/function.hash-algos.php
* @see http://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed
*/
public $cacheMethodHashAlgo = 'md5';

/**
* Flag to support nested transactions. If it is set to false, you will be able to use
* the transaction methods (begin/commit/rollback), but just the global transaction will
Expand Down Expand Up @@ -815,7 +828,7 @@ public function name($data) {
}
return $data;
}
$cacheKey = md5($this->startQuote . $data . $this->endQuote);
$cacheKey = hash($this->cacheMethodHashAlgo, $this->startQuote . $data . $this->endQuote);
if ($return = $this->cacheMethod(__FUNCTION__, $cacheKey)) {
return $return;
}
Expand Down Expand Up @@ -2533,7 +2546,7 @@ public function fields(Model $Model, $alias = null, $fields = array(), $quote =
$Model->schemaName,
$Model->table
);
$cacheKey = md5(serialize($cacheKey));
$cacheKey = hash($this->cacheMethodHashAlgo, serialize($cacheKey));
if ($return = $this->cacheMethod(__FUNCTION__, $cacheKey)) {
return $return;
}
Expand Down

0 comments on commit 15ccf05

Please sign in to comment.