From db72be7683715021a15a1672a13ca99d95a39b5f Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Wed, 16 Jul 2014 12:28:59 +0100 Subject: [PATCH] Issue #2302843 by claudiu.cristea: {cache_tags} conflicts with cache bin database table names. --- .../lib/Drupal/Core/Cache/DatabaseBackend.php | 22 +++++++++---------- .../Tests/Cache/DatabaseBackendTagTest.php | 8 +++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/lib/Drupal/Core/Cache/DatabaseBackend.php b/core/lib/Drupal/Core/Cache/DatabaseBackend.php index 47aa02cd20d2..93866101036f 100644 --- a/core/lib/Drupal/Core/Cache/DatabaseBackend.php +++ b/core/lib/Drupal/Core/Cache/DatabaseBackend.php @@ -324,14 +324,14 @@ public function deleteTags(array $tags) { $deleted_tags[$tag] = TRUE; unset($tag_cache[$tag]); try { - $this->connection->merge('cache_tags') + $this->connection->merge('cachetags') ->insertFields(array('deletions' => 1)) ->expression('deletions', 'deletions + 1') ->key('tag', $tag) ->execute(); } catch (\Exception $e) { - $this->catchException($e, 'cache_tags'); + $this->catchException($e, 'cachetags'); } } } @@ -393,7 +393,7 @@ public function invalidateTags(array $tags) { } $invalidated_tags[$tag] = TRUE; unset($tag_cache[$tag]); - $this->connection->merge('cache_tags') + $this->connection->merge('cachetags') ->insertFields(array('invalidations' => 1)) ->expression('invalidations', 'invalidations + 1') ->key('tag', $tag) @@ -401,7 +401,7 @@ public function invalidateTags(array $tags) { } } catch (\Exception $e) { - $this->catchException($e, 'cache_tags'); + $this->catchException($e, 'cachetags'); } } @@ -485,7 +485,7 @@ protected function checksumTags($flat_tags) { $query_tags = array_diff($flat_tags, array_keys($tag_cache)); if ($query_tags) { - $db_tags = $this->connection->query('SELECT tag, invalidations, deletions FROM {cache_tags} WHERE tag IN (:tags)', array(':tags' => $query_tags))->fetchAllAssoc('tag', \PDO::FETCH_ASSOC); + $db_tags = $this->connection->query('SELECT tag, invalidations, deletions FROM {cachetags} WHERE tag IN (:tags)', array(':tags' => $query_tags))->fetchAllAssoc('tag', \PDO::FETCH_ASSOC); $tag_cache += $db_tags; // Fill static cache with empty objects for tags not found in the database. @@ -522,8 +522,8 @@ protected function ensureBinExists() { $schema_definition = $this->schemaDefinition(); $database_schema->createTable($this->bin, $schema_definition['bin']); // If the bin doesn't exist, the cache tags table may also not exist. - if (!$database_schema->tableExists('cache_tags')) { - $database_schema->createTable('cache_tags', $schema_definition['cache_tags']); + if (!$database_schema->tableExists('cachetags')) { + $database_schema->createTable('cachetags', $schema_definition['cachetags']); } return TRUE; } @@ -540,14 +540,14 @@ protected function ensureBinExists() { /** * Act on an exception when cache might be stale. * - * If the cache_tags table does not yet exist, that's fine but if the table + * If the {cachetags} table does not yet exist, that's fine but if the table * exists and yet the query failed, then the cache is stale and the * exception needs to propagate. * * @param $e * The exception. * @param string|null $table_name - * The table name, defaults to $this->bin. Can be cache_tags. + * The table name, defaults to $this->bin. Can be cachetags. */ protected function catchException(\Exception $e, $table_name = NULL) { if ($this->connection->schema()->tableExists($table_name ?: $this->bin)) { @@ -576,7 +576,7 @@ protected function normalizeCid($cid) { } /** - * Defines the schema for the cache bin and cache_tags table. + * Defines the schema for the {cache_*} bin and {cachetags} tables. */ public function schemaDefinition() { $schema['bin'] = array( @@ -640,7 +640,7 @@ public function schemaDefinition() { ), 'primary key' => array('cid'), ); - $schema['cache_tags'] = array( + $schema['cachetags'] = array( 'description' => 'Cache table for tracking cache tags related to the cache bin.', 'fields' => array( 'tag' => array( diff --git a/core/modules/system/src/Tests/Cache/DatabaseBackendTagTest.php b/core/modules/system/src/Tests/Cache/DatabaseBackendTagTest.php index e110d9ebcb98..2112a602c68b 100644 --- a/core/modules/system/src/Tests/Cache/DatabaseBackendTagTest.php +++ b/core/modules/system/src/Tests/Cache/DatabaseBackendTagTest.php @@ -48,7 +48,7 @@ public function testTagInvalidations() { $this->assertTrue($bin->get('test'), 'Cache item was set in bin.'); } - $invalidations_before = intval(db_select('cache_tags')->fields('cache_tags', array('invalidations'))->condition('tag', 'test_tag:2')->execute()->fetchField()); + $invalidations_before = intval(db_select('cachetags')->fields('cachetags', array('invalidations'))->condition('tag', 'test_tag:2')->execute()->fetchField()); Cache::invalidateTags(array('test_tag' => array(2))); // Test that cache entry has been invalidated in multiple bins. @@ -58,7 +58,7 @@ public function testTagInvalidations() { } // Test that only one tag invalidation has occurred. - $invalidations_after = intval(db_select('cache_tags')->fields('cache_tags', array('invalidations'))->condition('tag', 'test_tag:2')->execute()->fetchField()); + $invalidations_after = intval(db_select('cachetags')->fields('cachetags', array('invalidations'))->condition('tag', 'test_tag:2')->execute()->fetchField()); $this->assertEqual($invalidations_after, $invalidations_before + 1, 'Only one addition cache tag invalidation has occurred after invalidating a tag used in multiple bins.'); } @@ -72,7 +72,7 @@ public function testTagDeletetions() { $this->assertTrue($bin->get('test'), 'Cache item was set in bin.'); } - $deletions_before = intval(db_select('cache_tags')->fields('cache_tags', array('deletions'))->condition('tag', 'test_tag:2')->execute()->fetchField()); + $deletions_before = intval(db_select('cachetags')->fields('cachetags', array('deletions'))->condition('tag', 'test_tag:2')->execute()->fetchField()); Cache::deleteTags(array('test_tag' => array(2))); // Test that cache entry has been deleted in multiple bins. @@ -82,7 +82,7 @@ public function testTagDeletetions() { } // Test that only one tag deletion has occurred. - $deletions_after = intval(db_select('cache_tags')->fields('cache_tags', array('deletions'))->condition('tag', 'test_tag:2')->execute()->fetchField()); + $deletions_after = intval(db_select('cachetags')->fields('cachetags', array('deletions'))->condition('tag', 'test_tag:2')->execute()->fetchField()); $this->assertEqual($deletions_after, $deletions_before + 1, 'Only one addition cache tag deletion has occurred after deleting a tag used in multiple bins.'); } -- GitLab