diff --git a/src/Database/Schema/Collection.php b/src/Database/Schema/Collection.php index 46fea5d9e48..ac740df5bad 100644 --- a/src/Database/Schema/Collection.php +++ b/src/Database/Schema/Collection.php @@ -43,6 +43,15 @@ class Collection { */ protected $_dialect; +/** + * The name of the cache config key to use for caching table metadata, + * of false if disabled. + * + * @var string|boolean + */ + protected $_cache = false; + + /** * Constructor. * @@ -51,6 +60,11 @@ class Collection { public function __construct(Connection $connection) { $this->_connection = $connection; $this->_dialect = $connection->driver()->schemaDialect(); + $config = $this->_connection->config(); + + if (!empty($config['cacheMetadata'])) { + $this->cacheMetadata(true); + } } /** @@ -80,10 +94,8 @@ public function listTables() { * @throws Cake\Database\Exception when table cannot be described. */ public function describe($name) { - $config = $this->_connection->config(); - - if (!empty($config['cacheMetadata'])) { - $cacheConfig = ($config['cacheMetadata'] === true) ? '_cake_model_' : $config['cacheMetadata']; + $cacheConfig = $this->cacheMetadata(); + if ($cacheConfig) { $cacheKey = $this->_connection->configName() . '_' . $name; $cached = Cache::read($cacheKey, $cacheConfig); if ($cached !== false) { @@ -91,6 +103,7 @@ public function describe($name) { } } + $config = $this->_connection->config(); list($sql, $params) = $this->_dialect->describeTableSql($name, $config); $statement = $this->_executeSql($sql, $params); if (count($statement) === 0) { @@ -115,12 +128,30 @@ public function describe($name) { } $statement->closeCursor(); - if (!empty($config['cacheMetadata'])) { + if (!empty($cacheConfig)) { Cache::write($cacheKey, $table, $cacheConfig); } return $table; } +/** + * Sets the cache config name to use for caching table metadata, or + * disabels it if false is passed. + * If called with no arguments it returns the current configuration name. + * + * @param boolean $enable whether or not to enable caching + * @return string|boolean + */ + public function cacheMetadata($enable = null) { + if ($enable === null) { + return $this->_cache; + } + if ($enable === true) { + $enable = '_cake_model_'; + } + return $this->_cache = $enable; + } + /** * Helper method to run queries and convert Exceptions to the correct types. * diff --git a/src/TestSuite/Fixture/FixtureManager.php b/src/TestSuite/Fixture/FixtureManager.php index deeabaca524..2e5bfc44a13 100644 --- a/src/TestSuite/Fixture/FixtureManager.php +++ b/src/TestSuite/Fixture/FixtureManager.php @@ -19,7 +19,8 @@ use Cake\Core\App; use Cake\Core\Configure; use Cake\Core\Plugin; -use Cake\DataSource\ConnectionManager; +use Cake\Database\Connection; +use Cake\Datasource\ConnectionManager; use Cake\Error; use Cake\TestSuite\Fixture\TestFixture; use Cake\TestSuite\TestCase; diff --git a/tests/TestCase/Database/ConnectionTest.php b/tests/TestCase/Database/ConnectionTest.php index 02433ec397a..c5dc0ce8a70 100644 --- a/tests/TestCase/Database/ConnectionTest.php +++ b/tests/TestCase/Database/ConnectionTest.php @@ -18,7 +18,7 @@ use Cake\Core\Configure; use Cake\Database\Connection; -use Cake\Database\ConnectionManager; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** diff --git a/tests/TestCase/Database/QueryTest.php b/tests/TestCase/Database/QueryTest.php index 502dbd615cb..c51cfdd2fe8 100644 --- a/tests/TestCase/Database/QueryTest.php +++ b/tests/TestCase/Database/QueryTest.php @@ -15,9 +15,9 @@ namespace Cake\Test\TestCase\Database; use Cake\Core\Configure; -use Cake\Database\ConnectionManager; use Cake\Database\Expression\IdentifierExpression; use Cake\Database\Query; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** diff --git a/tests/TestCase/Database/Schema/CollectionTest.php b/tests/TestCase/Database/Schema/CollectionTest.php index 7d752946539..89b21893d1b 100644 --- a/tests/TestCase/Database/Schema/CollectionTest.php +++ b/tests/TestCase/Database/Schema/CollectionTest.php @@ -19,9 +19,9 @@ use Cake\Cache\Cache; use Cake\Core\Configure; use Cake\Database\Connection; -use Cake\Database\ConnectionManager; use Cake\Database\Schema\Collection; use Cake\Database\Schema\Table; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** @@ -75,15 +75,11 @@ public function testDescribeIncorrectTable() { * @return void */ public function testDescribeCache() { + $schema = $this->connection->schemaCollection(); $table = $this->connection->schemaCollection()->describe('users'); - $config = $this->connection->config(); - $config['cacheMetadata'] = true; - - $connection = new Connection($config); - $schema = new Collection($connection); - Cache::delete('test_users', '_cake_model_'); + $schema->cacheMetadata(true); $result = $schema->describe('users'); $this->assertEquals($table, $result); diff --git a/tests/TestCase/Database/Schema/MysqlSchemaTest.php b/tests/TestCase/Database/Schema/MysqlSchemaTest.php index 5b65316e6b3..414ce8ed07e 100644 --- a/tests/TestCase/Database/Schema/MysqlSchemaTest.php +++ b/tests/TestCase/Database/Schema/MysqlSchemaTest.php @@ -15,10 +15,10 @@ namespace Cake\Test\TestCase\Database\Schema; use Cake\Core\Configure; -use Cake\Database\ConnectionManager; use Cake\Database\Schema\Collection as SchemaCollection; use Cake\Database\Schema\MysqlSchema; use Cake\Database\Schema\Table; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** diff --git a/tests/TestCase/Database/Schema/PostgresSchemaTest.php b/tests/TestCase/Database/Schema/PostgresSchemaTest.php index ee60577139c..3a00229a5d2 100644 --- a/tests/TestCase/Database/Schema/PostgresSchemaTest.php +++ b/tests/TestCase/Database/Schema/PostgresSchemaTest.php @@ -15,10 +15,10 @@ namespace Cake\Test\TestCase\Database\Schema; use Cake\Core\Configure; -use Cake\Database\ConnectionManager; use Cake\Database\Schema\Collection as SchemaCollection; use Cake\Database\Schema\PostgresSchema; use Cake\Database\Schema\Table; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** diff --git a/tests/TestCase/Database/Schema/SqliteSchemaTest.php b/tests/TestCase/Database/Schema/SqliteSchemaTest.php index a3ffce48634..68bdec04be3 100644 --- a/tests/TestCase/Database/Schema/SqliteSchemaTest.php +++ b/tests/TestCase/Database/Schema/SqliteSchemaTest.php @@ -15,10 +15,10 @@ namespace Cake\Test\TestCase\Database\Schema; use Cake\Core\Configure; -use Cake\Database\ConnectionManager; use Cake\Database\Schema\Collection as SchemaCollection; use Cake\Database\Schema\SqliteSchema; use Cake\Database\Schema\Table; +use Cake\Datasource\ConnectionManager; use Cake\TestSuite\TestCase; /** diff --git a/tests/TestCase/ORM/QueryTest.php b/tests/TestCase/ORM/QueryTest.php index 1bde52bc1d6..69cbf211ac1 100644 --- a/tests/TestCase/ORM/QueryTest.php +++ b/tests/TestCase/ORM/QueryTest.php @@ -14,10 +14,10 @@ */ namespace Cake\Test\TestCase\ORM; -use Cake\Database\ConnectionManager; use Cake\Database\Expression\IdentifierExpression; use Cake\Database\Expression\OrderByExpression; use Cake\Database\Expression\QueryExpression; +use Cake\Datasource\ConnectionManager; use Cake\ORM\Query; use Cake\ORM\ResultSet; use Cake\ORM\Table;