diff --git a/core/modules/block/block.install b/core/modules/block/block.install index 470d3bc..a5bd3c4 100644 --- a/core/modules/block/block.install +++ b/core/modules/block/block.install @@ -368,10 +368,15 @@ function block_update_8005() { // Take over the extracted and serialized value in {_d7_users_data} as-is. $query->addField('ud', 'value'); $query->addExpression('1', 'serialized'); + $query->condition('name', 'block'); db_insert('users_data') ->from($query) ->execute(); + + db_delete('_d7_users_data') + ->condition('name', 'block') + ->execute(); } /** diff --git a/core/modules/contact/contact.install b/core/modules/contact/contact.install index 845aa1f..879c6ab 100644 --- a/core/modules/contact/contact.install +++ b/core/modules/contact/contact.install @@ -91,6 +91,7 @@ function contact_update_8003() { $query->addExpression("'contact'", 'module'); $query->addExpression("'enabled'", 'name'); $query->condition('value', $serialized_setting); + $query->condition('name', 'contact'); $query->addExpression($enabled, 'value'); $query->addExpression(0, 'serialized'); @@ -98,6 +99,9 @@ function contact_update_8003() { ->from($query) ->execute(); } + db_delete('_d7_users_data') + ->condition('name', 'contact') + ->execute(); } /** diff --git a/core/modules/overlay/overlay.install b/core/modules/overlay/overlay.install index a2ef679..c8e9f3a 100644 --- a/core/modules/overlay/overlay.install +++ b/core/modules/overlay/overlay.install @@ -41,6 +41,7 @@ function overlay_update_8000() { $query->addExpression("'overlay'", 'module'); $query->addExpression("'enabled'", 'name'); $query->condition('value', $serialized_setting); + $query->condition('name', 'overlay'); $query->addExpression($enabled, 'value'); $query->addExpression(0, 'serialized'); @@ -54,10 +55,15 @@ function overlay_update_8000() { $query->addExpression("'overlay'", 'module'); $query->addExpression("'message_dismissed'", 'name'); $query->condition('value', serialize('1')); + $query->condition('name', 'overlay_message_dismissed'); $query->addExpression(1, 'value'); $query->addExpression(0, 'serialized'); db_insert('users_data') ->from($query) ->execute(); + + db_delete('_d7_users_data') + ->condition('name', array('overlay', 'overlay_message_dismissed')) + ->execute(); } diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilledStandardUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilledStandardUpgradePathTest.php index e1df73e..1644265 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilledStandardUpgradePathTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilledStandardUpgradePathTest.php @@ -29,6 +29,7 @@ public function setUp() { // Path to the database dump files. $this->databaseDumpFiles = array( drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz', + drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.user_data.database.php', ); parent::setUp(); } @@ -96,5 +97,28 @@ public function testFilledStandardUpgrade() { $blog_type = node_type_load('blog'); $this->assertEqual($blog_type->module, 'node', "Content type 'blog' has been reassigned from the blog module to the node module."); $this->assertEqual($blog_type->base, 'node_content', "The base string used to construct callbacks corresponding to content type 'Blog' has been reassigned to 'node_content'."); + + // Check that user data has been migrated correctly. + $query = db_query('SELECT * FROM {users_data}'); + + $userdata = array(); + $i = 0; + foreach ($query as $row) { + $i++; + $userdata[$row->uid][$row->module][$row->name] = $row; + } + // Check that the correct amount of rows exist. + $this->assertEqual($i, 5); + // Check that the data has been converted correctly. + $this->assertEqual($userdata[1]['contact']['enabled']->value, 1); + $this->assertEqual($userdata[1]['contact']['enabled']->serialized, 0); + $this->assertEqual($userdata[2]['contact']['enabled']->value, 0); + $this->assertEqual($userdata[1]['overlay']['enabled']->value, 1); + $this->assertEqual($userdata[2]['overlay']['enabled']->value, 1); + $this->assertEqual($userdata[1]['overlay']['message_dismissed']->value, 1); + $this->assertFalse(isset($userdata[2]['overlay']['message_dismissed'])); + + // Make sure that only the garbage is remaining in the helper table. + $this->assertEqual(db_query('SELECT COUNT(*) FROM {_d7_users_data}')->fetchField(), 2); } } diff --git a/core/modules/system/tests/upgrade/drupal-7.user_data.database.php b/core/modules/system/tests/upgrade/drupal-7.user_data.database.php new file mode 100644 index 0000000..b17fc64 --- /dev/null +++ b/core/modules/system/tests/upgrade/drupal-7.user_data.database.php @@ -0,0 +1,35 @@ +condition('uid', 1) + ->fields(array( + 'data' => serialize(array( + 'contact' => '1', + 'overlay_message_dismissed' => '1', + 'overlay' => '1', + 'garbage' => 'data', + )), + )) + ->execute(); + +db_update('users') + ->condition('uid', 2) + ->fields(array( + 'data' => serialize(array( + 'contact' => '0', + 'overlay' => '1', + 'more' => array('garbage', 'data'), + )), + )) + ->execute(); diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 480092e..7b2dd8a 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -735,7 +735,7 @@ function user_update_8010() { 'serialize' => TRUE, ), ), - 'primary key' => array('uid'), + 'primary key' => array('uid', 'name'), 'foreign keys' => array( 'uid' => array('users' => 'uid'), ),