Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php
<?php
/**
 * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 * @link          https://cakephp.org CakePHP(tm) Project
 * @since         3.0.0
 * @license       https://opensource.org/licenses/mit-license.php MIT License
 */
namespace Cake\Database\Schema;

use
Cake\Cache\Cache;
use
Cake\Datasource\ConnectionInterface;

/**
 * Extends the schema collection class to provide caching
 */
class CachedCollection extends Collection
{
   
/**
     * The name of the cache config key to use for caching table metadata,
     * of false if disabled.
     *
     * @var string|bool
     */
   
protected $_cache = false;

   
/**
     * Constructor.
     *
     * @param \Cake\Datasource\ConnectionInterface $connection The connection instance.
     * @param string|bool $cacheKey The cache key or boolean false to disable caching.
     */
   
public function __construct(ConnectionInterface $connection, $cacheKey = true)
    {
       
parent::__construct($connection);
       
$this->setCacheMetadata($cacheKey);
    }

   
/**
     * {@inheritDoc}
     *
     */
   
public function describe($name, array $options = [])
    {
       
$options += ['forceRefresh' => false];
       
$cacheConfig = $this->getCacheMetadata();
       
$cacheKey = $this->cacheKey($name);

        if (!empty(
$cacheConfig) && !$options['forceRefresh']) {
           
$cached = Cache::read($cacheKey, $cacheConfig);
            if (
$cached !== false) {
                return
$cached;
            }
        }

       
$table = parent::describe($name, $options);

        if (!empty(
$cacheConfig)) {
           
Cache::write($cacheKey, $table, $cacheConfig);
        }

        return
$table;
    }

   
/**
     * Get the cache key for a given name.
     *
     * @param string $name The name to get a cache key for.
     * @return string The cache key.
     */
   
public function cacheKey($name)
    {
        return
$this->_connection->configName() . '_' . $name;
    }

   
/**
     * Sets the cache config name to use for caching table metadata, or
     * disables it if false is passed.
     *
     * @param bool $enable Whether or not to enable caching
     * @return $this
     */
   
public function setCacheMetadata($enable)
    {
        if (
$enable === true) {
           
$enable = '_cake_model_';
        }

       
$this->_cache = $enable;

        return
$this;
    }

   
/**
     * Gets the cache config name to use for caching table metadata, false means disabled.
     *
     * @return string|bool
     */
   
public function getCacheMetadata()
    {
        return
$this->_cache;
    }

   
/**
     * Sets the cache config name to use for caching table metadata, or
     * disables it if false is passed.
     * If called with no arguments it returns the current configuration name.
     *
     * @deprecated 3.4.0 Use setCacheMetadata()/getCacheMetadata()
     * @param bool|null $enable Whether or not to enable caching
     * @return string|bool
     */
   
public function cacheMetadata($enable = null)
    {
       
deprecationWarning(
           
'CachedCollection::cacheMetadata() is deprecated. ' .
           
'Use CachedCollection::setCacheMetadata()/getCacheMetadata() instead.'
       
);
        if (
$enable !== null) {
           
$this->setCacheMetadata($enable);
        }

        return
$this->getCacheMetadata();
    }
}