Issue #1586542 by BTMash, carwin, xjm, gwulo: Fixed d6 to d7 upgrade stuck at update...
authorwebchick
Tue, 30 Oct 2012 01:55:12 +0000 (18:55 -0700)
committerwebchick
Tue, 30 Oct 2012 01:55:12 +0000 (18:55 -0700)
modules/simpletest/tests/upgrade/drupal-6.upload.database.php
modules/system/system.install

index c7f032e..46ebe2c 100644 (file)
@@ -416,3 +416,34 @@ db_insert('upload')->fields(array(
   'weight' => '0',
 ))
 ->execute();
+
+// Add series of entries for invalid node vids to the {upload} table.
+for ($i = 30; $i < 250; $i += 2) {
+  db_insert('upload')->fields(array(
+    'fid',
+    'nid',
+    'vid',
+    'description',
+    'list',
+    'weight',
+  ))
+  // Invalid fid, invalid vid.
+  ->values(array(
+    'fid' => $i,
+    'nid' => '40',
+    'vid' => 24 + $i,
+    'description' => 'crazy-basename.png',
+    'list' => '1',
+    'weight' => '0',
+  ))
+  // Valid fid, invalid vid.
+  ->values(array(
+    'fid' => 2,
+    'nid' => '40',
+    'vid' => 24 + $i + 1,
+    'description' => 'crazy-basename.png',
+    'list' => '1',
+    'weight' => '0',
+  ))
+  ->execute();
+}
index df0db71..b70d64f 100644 (file)
@@ -2729,6 +2729,26 @@ function system_update_7061(&$sandbox) {
   }
 
   if (!isset($sandbox['progress'])) {
+    // Delete stale rows from {upload} where the fid is not in the {files} table.
+    db_delete('upload')
+      ->notExists(
+        db_select('files', 'f')
+        ->fields('f', array('fid'))
+        ->where('f.fid = {upload}.fid')
+      )
+      ->execute();
+
+    // Delete stale rows from {upload} where the vid is not in the
+    // {node_revision} table. The table has already been renamed in
+    // node_update_7001().
+    db_delete('upload')
+      ->notExists(
+        db_select('node_revision', 'nr')
+        ->fields('nr', array('vid'))
+        ->where('nr.vid = {upload}.vid')
+      )
+      ->execute();
+
     // Retrieve a list of node revisions that have uploaded files attached.
     // DISTINCT queries are expensive, especially when paged, so we store the
     // data in its own table for the duration of the update.