diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php index 2bed3f6..9d13fcd 100644 --- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php +++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php @@ -867,22 +867,22 @@ public function onInstanceDelete(FieldInstanceInterface $instance) { * {@inheritdoc} */ public function onBundleRename($bundle, $bundle_new) { - // We need to account for deleted or inactive fields and instances. - $instances = field_read_instances(array('entity_type' => $this->entityType, 'bundle' => $bundle_new), array('include_deleted' => TRUE, 'include_inactive' => TRUE)); + // We need to account for deleted or inactive fields and instances. The + // method runs before the instance definitions are updated, so we need to + // fetch them using the old bundle name. + $instances = field_read_instances(array('entity_type' => $this->entityType, 'bundle' => $bundle), array('include_deleted' => TRUE, 'include_inactive' => TRUE)); foreach ($instances as $instance) { $field = $instance->getField(); - if ($field['storage']['type'] == 'field_sql_storage') { - $table_name = static::_fieldTableName($field); - $revision_name = static::_fieldRevisionTableName($field); - $this->database->update($table_name) - ->fields(array('bundle' => $bundle_new)) - ->condition('bundle', $bundle) - ->execute(); - $this->database->update($revision_name) - ->fields(array('bundle' => $bundle_new)) - ->condition('bundle', $bundle) - ->execute(); - } + $table_name = static::_fieldTableName($field); + $revision_name = static::_fieldRevisionTableName($field); + $this->database->update($table_name) + ->fields(array('bundle' => $bundle_new)) + ->condition('bundle', $bundle) + ->execute(); + $this->database->update($revision_name) + ->fields(array('bundle' => $bundle_new)) + ->condition('bundle', $bundle) + ->execute(); } } diff --git a/core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerInterface.php b/core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerInterface.php index 31d59ab..a52a5ad 100644 --- a/core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerInterface.php +++ b/core/lib/Drupal/Core/Entity/FieldableEntityStorageControllerInterface.php @@ -81,6 +81,9 @@ public function onBundleCreate($bundle); /** * Allows reaction to a bundle being renamed. * + * This method runs before field instance definitions are updated with the new + * bundle name. + * * @param string $bundle * The name of the bundle being renamed. * @param string $bundle_new @@ -91,6 +94,8 @@ public function onBundleRename($bundle, $bundle_new); /** * Allows reaction to a bundle being deleted. * + * This method runs before field and instance definitions are deleted. + * * @param string $bundle * The name of the bundle being deleted. */ diff --git a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php index 145ca53..414a284 100644 --- a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php +++ b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php @@ -30,7 +30,7 @@ * * @var array */ - public static $modules = array('entity', 'entity_test', 'entity_reference', 'field', 'field_sql_storage', 'hal', 'language', 'rest', 'serialization', 'system', 'text', 'user', 'filter'); + public static $modules = array('entity', 'entity_test', 'entity_reference', 'field', 'hal', 'language', 'rest', 'serialization', 'system', 'text', 'user', 'filter'); /** * The mock serializer. diff --git a/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportChangeTest.php b/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportChangeTest.php index 8f162e0..d50d6ce 100644 --- a/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportChangeTest.php +++ b/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportChangeTest.php @@ -19,7 +19,7 @@ class NodeImportChangeTest extends DrupalUnitTestBase { * * @var array */ - public static $modules = array('node', 'entity', 'field', 'text', 'field_sql_storage', 'system', 'node_test_config'); + public static $modules = array('node', 'entity', 'field', 'text', 'system', 'node_test_config'); /** * Set the default field storage backend for fields created during tests. diff --git a/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportCreateTest.php b/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportCreateTest.php index cd117bb..0a1db9c 100644 --- a/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportCreateTest.php +++ b/core/modules/node/lib/Drupal/node/Tests/Config/NodeImportCreateTest.php @@ -19,7 +19,7 @@ class NodeImportCreateTest extends DrupalUnitTestBase { * * @var array */ - public static $modules = array('node', 'entity', 'field', 'text', 'field_sql_storage', 'system'); + public static $modules = array('node', 'entity', 'field', 'text', 'system'); /** * Set the default field storage backend for fields created during tests. diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php index 4fbdffd..4e598bf 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php @@ -108,7 +108,7 @@ function testEnableModulesInstall() { */ function testEnableModulesInstallContainer() { // Install Node module. - $this->enableModules(array('field_sql_storage', 'field', 'node')); + $this->enableModules(array('field', 'node')); $this->installSchema('node', array('node', 'node_field_data')); // Perform an entity query against node. @@ -206,12 +206,12 @@ function testEnableModulesFixedList() { $this->assertTrue(TRUE == entity_get_info('entity_test')); // Load some additional modules; entity_test should still exist. - $this->enableModules(array('entity', 'field', 'field_sql_storage', 'text', 'entity_test')); + $this->enableModules(array('entity', 'field', 'text', 'entity_test')); $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE); $this->assertTrue(TRUE == entity_get_info('entity_test')); // Install some other modules; entity_test should still exist. - $this->container->get('module_handler')->install(array('field', 'field_sql_storage', 'field_test'), FALSE); + $this->container->get('module_handler')->install(array('field', 'field_test'), FALSE); $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE); $this->assertTrue(TRUE == entity_get_info('entity_test')); diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php index 9349484..7f7d2c4 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryAggregateTest.php @@ -6,9 +6,6 @@ */ namespace Drupal\system\Tests\Entity; -use Drupal\field_sql_storage\Entity\ConditionAggregate; -use Drupal\simpletest\DrupalUnitTestBase; - /** * Defines a test for testing aggregation support for entity query. * diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php index 9f95373..4a417f8 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryRelationshipTest.php @@ -20,7 +20,7 @@ class EntityQueryRelationshipTest extends EntityUnitTestBase { public static $modules = array('taxonomy', 'options'); /** - * @var \Drupal\field_sql_storage\Entity\QueryFactory + * @var \Drupal\Core\Entity\Query\QueryFactory */ protected $factory; diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php index 384c815..7395dfa 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldAccessTest.php @@ -19,7 +19,7 @@ class FieldAccessTest extends DrupalUnitTestBase { * * @var array */ - public static $modules = array('entity', 'entity_test', 'field', 'field_sql_storage', 'system', 'text', 'filter', 'user'); + public static $modules = array('entity', 'entity_test', 'field', 'system', 'text', 'filter', 'user'); /** * Holds the currently active global user ID that initiated the test run. diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php index 4988b49..34818e0 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/FieldSqlStorageTest.php @@ -26,7 +26,7 @@ class FieldSqlStorageTest extends EntityUnitTestBase { * * @var array */ - public static $modules = array('field', 'field_test', 'text', 'number', 'entity_test'); + public static $modules = array('system', 'field', 'field_test', 'text', 'number', 'entity_test'); /** * The name of the created field. @@ -67,6 +67,7 @@ public static function getInfo() { function setUp() { parent::setUp(); $this->installSchema('entity_test', array('entity_test_rev', 'entity_test_rev_revision')); + $this->installSchema('system', array('variable')); $entity_type = 'entity_test_rev'; $this->field_name = strtolower($this->randomName()); @@ -459,6 +460,34 @@ function testFieldSqlStorageForeignKeys() { } /** + * Tests reacting to a bundle being renamed. + */ + function testFieldSqlStorageBundleRename() { + $entity_type = $bundle = 'entity_test_rev'; + + // Create an entity. + $value = mt_rand(1, 127); + $entity = entity_create($entity_type, array( + 'type' => $bundle, + $this->field->name => $value, + )); + $entity->save(); + + // Rename the bundle. + $bundle_new = $bundle . '_renamed'; + entity_test_rename_bundle($bundle, $bundle_new, $entity_type); + + // Check that the 'bundle' column has been updated in storage. + $row = db_select($this->table, 't') + ->fields('t', array('bundle', $this->field->name . '_value')) + ->condition('entity_id', $entity->id()) + ->execute() + ->fetch(); + $this->assertEqual($row->bundle, $bundle_new); + $this->assertEqual($row->{$this->field->name . '_value'}, $value); + } + + /** * Tests table name generation. */ public function testTableNames() { diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module index 6e2082a..c45e713 100644 --- a/core/modules/system/tests/modules/entity_test/entity_test.module +++ b/core/modules/system/tests/modules/entity_test/entity_test.module @@ -79,7 +79,7 @@ function entity_test_entity_info_alter(&$info) { * 'entity_test'. */ function entity_test_create_bundle($bundle, $text = NULL, $entity_type = 'entity_test') { - $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array('entity_test' => array('label' => 'Entity Test Bundle')); + $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array($entity_type => array('label' => 'Entity Test Bundle')); $bundles += array($bundle => array('label' => $text ? $text : $bundle)); \Drupal::state()->set($entity_type . '.bundles', $bundles); @@ -98,7 +98,7 @@ function entity_test_create_bundle($bundle, $text = NULL, $entity_type = 'entity * 'entity_test'. */ function entity_test_rename_bundle($bundle_old, $bundle_new, $entity_type = 'entity_test') { - $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array('entity_test' => array('label' => 'Entity Test Bundle')); + $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array($entity_type => array('label' => 'Entity Test Bundle')); $bundles[$bundle_new] = $bundles[$bundle_old]; unset($bundles[$bundle_old]); \Drupal::state()->set($entity_type . '.bundles', $bundles); @@ -116,7 +116,7 @@ function entity_test_rename_bundle($bundle_old, $bundle_new, $entity_type = 'ent * 'entity_test'. */ function entity_test_delete_bundle($bundle, $entity_type = 'entity_test') { - $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array('entity_test' => array('label' => 'Entity Test Bundle')); + $bundles = \Drupal::state()->get($entity_type . '.bundles') ?: array($entity_type => array('label' => 'Entity Test Bundle')); unset($bundles[$bundle]); \Drupal::state()->set($entity_type . '.bundles', $bundles);