WordPress.org

Make WordPress Core

Ticket #17998: 17998.3.diff

File 17998.3.diff, 2.2 KB (added by nacin, 7 years ago)
  • wp-admin/includes/upgrade.php

     
    14591459        $cqueries = apply_filters( 'dbdelta_create_queries', $cqueries );
    14601460        $iqueries = apply_filters( 'dbdelta_insert_queries', $iqueries );
    14611461
    1462         // Check to see which tables and fields exist
    1463         if ($tables = $wpdb->get_col('SHOW TABLES;')) {
    1464                 // For every table in the database
    14651462                $global_tables = $wpdb->tables( 'global' );
    1466                 foreach ($tables as $table) {
     1463                foreach ( $cqueries as $table => $qry ) {
    14671464                        // Upgrade global tables only for the main site. Don't upgrade at all if DO_NOT_UPGRADE_GLOBAL_TABLES is defined.
    14681465                        if ( in_array( $table, $global_tables ) && ( !is_main_site() || defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) )
    14691466                                continue;
    14701467
    1471                         // If a table query exists for the database table...
    1472                         if ( array_key_exists(strtolower($table), $cqueries) ) {
     1468                        // Fetch the table column structure from the database
     1469                        $wpdb->suppress_errors();
     1470                        $tablefields = $wpdb->get_results("DESCRIBE {$table};");
     1471                        $wpdb->suppress_errors( false );
     1472
     1473                        if ( ! $tablefields )
     1474                                continue;
     1475
    14731476                                // Clear the field and index arrays
    14741477                                $cfields = $indices = array();
    14751478                                // Get all of the field names in the query from between the parens
    1476                                 preg_match("|\((.*)\)|ms", $cqueries[strtolower($table)], $match2);
     1479                                preg_match("|\((.*)\)|ms", $qry, $match2);
    14771480                                $qryline = trim($match2[1]);
    14781481
    14791482                                // Separate field lines into an array
     
    15081511                                        }
    15091512                                }
    15101513
    1511                                 // Fetch the table column structure from the database
    1512                                 $tablefields = $wpdb->get_results("DESCRIBE {$table};");
    1513 
    15141514                                // For every field in the table
    15151515                                foreach ($tablefields as $tablefield) {
    15161516                                        // If the table field exists in the field array...
     
    16081608                                }
    16091609
    16101610                                // Remove the original table creation query from processing
    1611                                 unset($cqueries[strtolower($table)]);
    1612                                 unset($for_update[strtolower($table)]);
    1613                         } else {
    1614                                 // This table exists in the database, but not in the creation queries?
    1615                         }
     1611                                unset( $cqueries[ $table ], $for_update[ $table ] );
    16161612                }
    1617         }
    16181613
    16191614        $allqueries = array_merge($cqueries, $iqueries);
    16201615        if ($execute) {