Comments: Update comment cache in the upgrade routine for changing the comment_type DB field value in comments table.

This ensures that comment object cache is cleared after changing the comment type to `comment` instead of an empty string.

Add a unit test for `_wp_batch_update_comment_type()`.

Follow-up to [47597], [47626], [48225], [48227].

Props imath, westonruter.
Reviewed by desrosj, SergeyBiryukov.
Merges [48748] and [48751] to the 5.5 branch.
Fixes #49236.

git-svn-id: https://develop.svn.wordpress.org/branches/5.5@48752 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2020-08-07 16:33:39 +00:00
parent a2b00b87ee
commit ed42560f33
4 changed files with 74 additions and 8 deletions

View File

@ -2174,9 +2174,6 @@ function upgrade_550() {
global $wp_current_db_version;
if ( $wp_current_db_version < 48121 ) {
update_option( 'finished_updating_comment_type', 0 );
wp_schedule_single_event( time() + ( 1 * MINUTE_IN_SECONDS ), 'wp_update_comment_type_batch' );
$comment_previously_approved = get_option( 'comment_whitelist', '' );
update_option( 'comment_previously_approved', $comment_previously_approved );
delete_option( 'comment_whitelist' );
@ -2198,6 +2195,11 @@ function upgrade_550() {
delete_option( 'blacklist_keys' );
delete_option( 'blocklist_keys' );
}
if ( $wp_current_db_version < 48748 ) {
update_option( 'finished_updating_comment_type', 0 );
wp_schedule_single_event( time() + ( 1 * MINUTE_IN_SECONDS ), 'wp_update_comment_type_batch' );
}
}
/**

View File

@ -3839,11 +3839,11 @@ function _wp_batch_update_comment_type() {
*/
$comment_batch_size = (int) apply_filters( 'wp_update_comment_type_batch_size', 100 );
// Update the `comment_type` field value to be `comment` for the next batch of comments.
$wpdb->query(
// Get the IDs of the comments to update.
$comment_ids = $wpdb->get_col(
$wpdb->prepare(
"UPDATE {$wpdb->comments}
SET comment_type = 'comment'
"SELECT comment_ID
FROM {$wpdb->comments}
WHERE comment_type = ''
ORDER BY comment_ID DESC
LIMIT %d",
@ -3851,6 +3851,21 @@ function _wp_batch_update_comment_type() {
)
);
if ( $comment_ids ) {
$comment_id_list = implode( ',', $comment_ids );
// Update the `comment_type` field value to be `comment` for the next batch of comments.
$wpdb->query(
"UPDATE {$wpdb->comments}
SET comment_type = 'comment'
WHERE comment_type = ''
AND comment_ID IN ({$comment_id_list})" // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
);
// Make sure to clean the comment cache.
clean_comment_cache( $comment_ids );
}
delete_option( $lock_name );
}

View File

@ -20,7 +20,7 @@ $wp_version = '5.5-RC2-48739-src';
*
* @global int $wp_db_version
*/
$wp_db_version = 48575;
$wp_db_version = 48748;
/**
* Holds the TinyMCE version.

View File

@ -0,0 +1,49 @@
<?php
/**
* @group comment
* @covers ::_wp_batch_update_comment_type
*/
class Tests_Batch_Update_Comment_Type extends WP_UnitTestCase {
/**
* @ticket 49236
*/
public function test__wp_batch_update_comment_type() {
global $wpdb;
$comment_ids = self::factory()->comment->create_many( 3 );
$comment_id_list = implode( ',', $comment_ids );
$wpdb->query(
"UPDATE {$wpdb->comments}
SET comment_type = ''
WHERE comment_type = 'comment'
AND comment_ID in ({$comment_id_list})" // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
);
clean_comment_cache( $comment_ids );
foreach ( $comment_ids as $comment_id ) {
$comment = get_comment( $comment_id );
$this->assertEmpty( $comment->comment_type );
}
add_filter( 'wp_update_comment_type_batch_size', array( $this, 'filter_comment_type_batch_size' ) );
add_filter( 'schedule_event', '__return_null' );
_wp_batch_update_comment_type();
remove_filter( 'wp_update_comment_type_batch_size', array( $this, 'filter_comment_type_batch_size' ) );
remove_filter( 'schedule_event', '__return_null' );
foreach ( $comment_ids as $comment_id ) {
$updated_comment = get_comment( $comment_id );
$this->assertEquals( 'comment', $updated_comment->comment_type );
}
}
public function filter_comment_type_batch_size() {
return 3;
}
}