Make WordPress Core

Ticket #34872: 34872.patch

File 34872.patch, 2.9 KB (added by jdgrimes, 9 years ago)

Fix with unit tests

  • tests/phpunit/tests/dbdelta.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    274274                $this->assertEmpty( $updates );
    275275        }
    276276
     277        /**
     278         * @ticket 34872
     279         *
     280         * @dataProvider data_provider_schema_indexes
     281         *
     282         * @param string $schema The table schema.
     283         */
     284        public function test_no_duplicate_indexes( $schema ) {
     285
     286                // Run once to create the table and indexes.
     287                $updates = dbDelta( $schema );
     288
     289                $this->assertCount( 1, $updates );
     290                $this->assertEquals(
     291                        array( 'wptests_dbdelta_test_2' => 'Created table wptests_dbdelta_test_2' )
     292                        , $updates
     293                );
     294
     295                // Run again. Nothing should happen.
     296                $updates = dbDelta( $schema );
     297
     298                $this->assertSame( array(), $updates );
     299        }
     300
     301        /**
     302         * Provides sets of table schemas to test index detection.
     303         *
     304         * @return array
     305         */
     306        public function data_provider_schema_indexes() {
     307
     308                global $wpdb;
     309
     310                return array(
     311                        'named' => array(
     312                                "CREATE TABLE {$wpdb->prefix}dbdelta_test_2 (
     313                                        id bigint(20) NOT NULL AUTO_INCREMENT,
     314                                        KEY id (id)
     315                                )"
     316                        ),
     317                        'unnamed' => array(
     318                                "CREATE TABLE {$wpdb->prefix}dbdelta_test_2 (
     319                                        id bigint(20) NOT NULL AUTO_INCREMENT,
     320                                        KEY (id)
     321                                )"
     322                        ),
     323                        'primary' => array(
     324                                "CREATE TABLE {$wpdb->prefix}dbdelta_test_2 (
     325                                        id bigint(20) NOT NULL AUTO_INCREMENT,
     326                                        PRIMARY KEY (id)
     327                                )"
     328                        ),
     329                        'primary_extra_space' => array(
     330                                "CREATE TABLE {$wpdb->prefix}dbdelta_test_2 (
     331                                        id bigint(20) NOT NULL AUTO_INCREMENT,
     332                                        PRIMARY KEY  (id)
     333                                )"
     334                        ),
     335                );
     336        }
     337
    277338        //
    278339        // Assertions.
    279340        //
  • src/wp-admin/includes/upgrade.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    22562256                                if ( 'FULLTEXT' === strtoupper( $index_data['index_type'] ) ) {
    22572257                                        $index_string .= 'FULLTEXT ';
    22582258                                }
    2259                                 $index_string .= 'KEY ';
    2260                                 if ($index_name != 'PRIMARY') {
    2261                                         $index_string .= $index_name;
    2262                                 }
     2259                                $index_string .= 'KEY';
     2260
    22632261                                $index_columns = '';
    22642262
    22652263                                // For each column in the index.
     
    22772275                                $alt_index_columns = preg_replace( '/\([^)]*\)/', '', $index_columns );
    22782276
    22792277                                // Add the column list to the index create string.
     2278                                if ( 'PRIMARY' === $index_name ) {
     2279                                        $index_name = '';
     2280                                }
     2281
    22802282                                $index_strings = array(
    22812283                                        "$index_string ($index_columns)",
    22822284                                        "$index_string ($alt_index_columns)",
     2285                                        "$index_string $index_name ($index_columns)",
     2286                                        "$index_string $index_name ($alt_index_columns)",
    22832287                                );
    22842288
    22852289                                foreach ( $index_strings as $index_string ) {