X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/fcaa67f093b5c83deea7a361a8cf8c6ac4e832d3..refs/tags/wordpress-4.2.3:/wp-admin/includes/upgrade.php diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index 9803f88b..cb2188b4 100644 --- a/wp-admin/includes/upgrade.php +++ b/wp-admin/includes/upgrade.php @@ -524,11 +524,11 @@ function upgrade_all() { if ( $wp_current_db_version < 29630 ) upgrade_400(); - if ( $wp_current_db_version < 31351 ) - upgrade_420(); + if ( $wp_current_db_version < 31534 ) + upgrade_422(); - if ( $wp_current_db_version < 31533 ) - upgrade_421(); + if ( $wp_current_db_version < 31536 ) + upgrade_423(); maybe_disable_link_manager(); @@ -1423,19 +1423,6 @@ function upgrade_400() { * @since 4.2.0 */ function upgrade_420() { - global $wp_current_db_version, $wpdb; - - if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { - if ( is_multisite() ) { - $tables = $wpdb->tables( 'blog' ); - } else { - $tables = $wpdb->tables( 'all' ); - } - - foreach ( $tables as $table ) { - maybe_convert_table_to_utf8mb4( $table ); - } - } } /** @@ -1444,19 +1431,48 @@ function upgrade_420() { * @since 4.2.1 */ function upgrade_421() { +} + +/** + * Execute changes made in WordPress 4.2.2. + * + * @since 4.2.2 + */ +function upgrade_422() { global $wp_current_db_version, $wpdb; - if ( $wp_current_db_version < 31533 ) { + if ( $wp_current_db_version < 31534 ) { $content_length = $wpdb->get_col_length( $wpdb->comments, 'comment_content' ); - if ( ! $content_length ) { - $content_length = 65535; + + if ( is_wp_error( $content_length ) ) { + return; + } + + if ( false === $content_length ) { + $content_length = array( + 'type' => 'byte', + 'length' => 65535, + ); + } elseif ( ! is_array( $content_length ) ) { + $length = (int) $content_length > 0 ? (int) $content_length : 65535; + $content_length = array( + 'type' => 'byte', + 'length' => $length + ); } + if ( 'byte' !== $content_length['type'] || 0 === $content_length['length'] ) { + // Sites with malformed DB schemas are on their own. + return; + } + + $allowed_length = intval( $content_length['length'] ) - 10; + $comments = $wpdb->get_results( - "SELECT comment_ID FROM $wpdb->comments - WHERE comment_date_gmt > '2015-04-26' - AND CHAR_LENGTH( comment_content ) >= $content_length - AND ( comment_content LIKE '%<%' OR comment_content LIKE '%>%' )" + "SELECT `comment_ID` FROM `{$wpdb->comments}` + WHERE `comment_date_gmt` > '2015-04-26' + AND LENGTH( `comment_content` ) >= {$allowed_length} + AND ( `comment_content` LIKE '%<%' OR `comment_content` LIKE '%>%' )" ); foreach ( $comments as $comment ) { @@ -1465,6 +1481,31 @@ function upgrade_421() { } } +/** + * Execute changes made in WordPress 4.2.0. + * + * @since 4.2.3 + */ +function upgrade_423() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 31536 && $wpdb->charset === 'utf8mb4' ) { + if ( is_multisite() ) { + $tables = $wpdb->tables( 'blog' ); + } else { + $tables = $wpdb->tables( 'all' ); + if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $global_tables = $wpdb->tables( 'global' ); + $tables = array_diff_assoc( $tables, $global_tables ); + } + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } +} + /** * Executes network-level upgrade routines. * @@ -1564,11 +1605,11 @@ function upgrade_network() { // 4.2 if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { - if ( ! ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) && DO_NOT_UPGRADE_GLOBAL_TABLES ) ) { + if ( ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { $wpdb->query( "ALTER TABLE $wpdb->usermeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); $wpdb->query( "ALTER TABLE $wpdb->site DROP INDEX domain, ADD INDEX domain(domain(140),path(51))" ); $wpdb->query( "ALTER TABLE $wpdb->sitemeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); - $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain, ADD INDEX domain(domain(140),path(51))" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); $tables = $wpdb->tables( 'global' ); @@ -1577,6 +1618,35 @@ function upgrade_network() { } } } + + // 4.2.2 + if ( $wp_current_db_version < 31535 && 'utf8mb4' === $wpdb->charset ) { + if ( ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $upgrade = false; + $indexes = $wpdb->get_results( "SHOW INDEXES FROM $wpdb->signups" ); + foreach( $indexes as $index ) { + if ( 'domain_path' == $index->Key_name && 'domain' == $index->Column_name && 140 != $index->Sub_part ) { + $upgrade = true; + break; + } + } + + if ( $upgrade ) { + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); + } + } + } + + // 4.2.3 + if ( $wp_current_db_version < 31536 && $wpdb->charset === 'utf8mb4' ) { + if ( ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $tables = $wpdb->tables( 'global' ); + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } + } } // @@ -1709,6 +1779,17 @@ function maybe_convert_table_to_utf8mb4( $table ) { } } + $table_details = $wpdb->get_row( "SHOW TABLE STATUS LIKE '$table'" ); + if ( ! $table_details ) { + return false; + } + + list( $table_charset ) = explode( '_', $table_details->Collation ); + $table_charset = strtolower( $table_charset ); + if ( 'utf8mb4' === $table_charset ) { + return true; + } + return $wpdb->query( "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" ); } @@ -2396,14 +2477,9 @@ function pre_schema_upgrade() { } } - if ( $wp_current_db_version < 30133 ) { - // dbDelta() can recreate but can't drop the index. - $wpdb->query( "ALTER TABLE $wpdb->terms DROP INDEX slug" ); - } - // Upgrade versions prior to 4.2. if ( $wp_current_db_version < 31351 ) { - if ( ! is_multisite() ) { + if ( ! is_multisite() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { $wpdb->query( "ALTER TABLE $wpdb->usermeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); } $wpdb->query( "ALTER TABLE $wpdb->terms DROP INDEX slug, ADD INDEX slug(slug(191))" );