Index: trunk/extensions/MoodBar/updateMoodBarFeedback.php |
— | — | @@ -31,25 +31,39 @@ |
32 | 32 | $this->output( "Updating mbf_latest_response in moodbar_feedback table...\n" ); |
33 | 33 | |
34 | 34 | // Grab the feedback record with mbf_latest_response = 0 |
35 | | - $res = $db->select( array( 'moodbar_feedback', 'moodbar_feedback_response' ), |
36 | | - array( 'MAX(mbfr_id) AS latest_mbfr_id', 'mbf_id' ), |
37 | | - array( 'mbf_id=mbfr_mbf_id', 'mbf_latest_response' => 0 ), |
38 | | - __METHOD__, |
39 | | - array( 'GROUP BY' => 'mbfr_mbf_id' ) |
40 | | - ); |
41 | | - $count = 0; |
42 | | - foreach ( $res as $row ) { |
43 | | - $count++; |
44 | | - if ( $count % 100 == 0 ) { |
45 | | - $this->output( $count . "\n" ); |
46 | | - wfWaitForSlaves(); |
| 35 | + $lastMbfId = $totalCount = 0; |
| 36 | + $batchSize = $count = 100; |
| 37 | + |
| 38 | + while ( $batchSize == $count ) { |
| 39 | + $count = 0; |
| 40 | + $res = $db->select( array( 'moodbar_feedback', 'moodbar_feedback_response' ), |
| 41 | + array( 'MAX(mbfr_id) AS latest_mbfr_id', 'mbf_id' ), |
| 42 | + array( 'mbf_id=mbfr_mbf_id', 'mbf_latest_response' => 0, 'mbf_id > ' . $lastMbfId ), |
| 43 | + __METHOD__, |
| 44 | + array( 'ORDER BY' => 'mbf_id', 'GROUP BY' => 'mbf_id', "LIMIT $batchSize" ) |
| 45 | + ); |
| 46 | + |
| 47 | + foreach ( $res as $row ) { |
| 48 | + $count++; |
| 49 | + $mbfrId = intval( $row->latest_mbfr_id ); |
| 50 | + $mbfId = intval( $row->mbf_id ); |
| 51 | + |
| 52 | + $db->update( 'moodbar_feedback', |
| 53 | + array( 'mbf_latest_response' => $mbfrId ), |
| 54 | + array( 'mbf_id' => $mbfId ), |
| 55 | + __METHOD__ ); |
| 56 | + |
| 57 | + $lastMbfId = $mbfId; |
47 | 58 | } |
48 | | - $db->update( 'moodbar_feedback', |
49 | | - array( 'mbf_latest_response' => intval( $row->latest_mbfr_id ) ), |
50 | | - array( 'mbf_id' => intval( $row->mbf_id ) ), |
51 | | - __METHOD__ ); |
| 59 | + |
| 60 | + $totalCount = $totalCount + $count; |
| 61 | + |
| 62 | + $this->output( $count . "\n" ); |
| 63 | + wfWaitForSlaves(); |
| 64 | + |
52 | 65 | } |
53 | | - $this->output( "Done, $count rows updated.\n" ); |
| 66 | + |
| 67 | + $this->output( "Done, $totalCount rows updated.\n" ); |
54 | 68 | return true; |
55 | 69 | } |
56 | 70 | } |
Index: trunk/extensions/MoodBar/sql/MoodBar.sql |
— | — | @@ -16,7 +16,7 @@ |
17 | 17 | mbf_comment varchar(255) binary, |
18 | 18 | |
19 | 19 | -- Latest response id for this feedback |
20 | | - mbf_latest_response int unsigned NOT NULL, |
| 20 | + mbf_latest_response int unsigned NOT NULL default 0, |
21 | 21 | -- Options and context |
22 | 22 | -- Whether or not the feedback item is hidden |
23 | 23 | -- 0 = No; 255 = Yes (other values reserved for partial hiding) |
Index: trunk/extensions/MoodBar/sql/mbf_latest_response.sql |
— | — | @@ -1,2 +1,2 @@ |
2 | | -ALTER TABLE /*_*/moodbar_feedback ADD COLUMN mbf_latest_response int unsigned NOT NULL; |
| 2 | +ALTER TABLE /*_*/moodbar_feedback ADD COLUMN mbf_latest_response int unsigned NOT NULL default 0; |
3 | 3 | CREATE INDEX /*i*/mbf_latest_response ON /*_*/moodbar_feedback (mbf_latest_response); |