Browse Source

Moving more code after changing ConnectionManager's namespace

Jose Lorenzo Rodriguez 12 years ago
parent
commit
dbfb3de1b5

+ 36 - 5
src/Database/Schema/Collection.php

@@ -44,6 +44,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.
  *
  * @param Cake\Database\Connection $connection
@@ -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 @@ class Collection {
  * @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 @@ class Collection {
 			}
 		}
 
+		$config = $this->_connection->config();
 		list($sql, $params) = $this->_dialect->describeTableSql($name, $config);
 		$statement = $this->_executeSql($sql, $params);
 		if (count($statement) === 0) {
@@ -115,13 +128,31 @@ class Collection {
 		}
 		$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.
  *
  * @param string $sql The sql to run.

+ 2 - 1
src/TestSuite/Fixture/FixtureManager.php

@@ -19,7 +19,8 @@ namespace Cake\TestSuite\Fixture;
 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;

+ 1 - 1
tests/TestCase/Database/ConnectionTest.php

@@ -18,7 +18,7 @@ namespace Cake\Test\TestCase\Database;
 
 use Cake\Core\Configure;
 use Cake\Database\Connection;
-use Cake\Database\ConnectionManager;
+use Cake\Datasource\ConnectionManager;
 use Cake\TestSuite\TestCase;
 
 /**

+ 1 - 1
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;
 
 /**

+ 3 - 7
tests/TestCase/Database/Schema/CollectionTest.php

@@ -19,9 +19,9 @@ namespace Cake\Test\TestCase\Database\Schema;
 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 @@ class CollectionTest extends TestCase {
  * @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);
 

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;