WordPress.org

Make WordPress Core

Ticket #20263: 20263.4.diff

File 20263.4.diff, 3.9 KB (added by ocean90, 5 years ago)
  • src/wp-admin/includes/upgrade.php

     
    22012201                                case 'unique':
    22022202                                case 'key':
    22032203                                        $validfield = false;
    2204                                         $indices[] = trim(trim($fld), ", \n");
     2204                                        $indices[] = trim( trim( $fld ), ", \n" );
    22052205                                        break;
    22062206                        }
    22072207                        $fld = trim( $fld );
     
    22422242
    22432243                                        if ( $do_change ) {
    22442244                                                // Add a query to change the column type.
    2245                                                 $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[ $tablefield_field_lowercased ];
     2245                                                $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN `{$tablefield->Field}` " . $cfields[ $tablefield_field_lowercased ];
    22462246                                                $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}";
    22472247                                        }
    22482248                                }
     
    22522252                                        $default_value = $matches[1];
    22532253                                        if ($tablefield->Default != $default_value) {
    22542254                                                // Add a query to change the column's default value
    2255                                                 $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'";
     2255                                                $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN `{$tablefield->Field}` SET DEFAULT '{$default_value}'";
    22562256                                                $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}";
    22572257                                        }
    22582258                                }
     
    23122312                                        if ($index_columns != '') $index_columns .= ',';
    23132313
    23142314                                        // Add the field to the column list string.
    2315                                         $index_columns .= $column_data['fieldname'];
     2315                                        $index_columns .= '`' . $column_data['fieldname'] . '`';
    23162316                                        if ($column_data['subpart'] != '') {
    23172317                                                $index_columns .= '('.$column_data['subpart'].')';
    23182318                                        }
  • tests/phpunit/tests/dbdelta.php

     
    488488
    489489                $this->assertEmpty( $updates );
    490490        }
     491
     492        /**
     493         * @ticket 20263
     494         */
     495        function test_query_with_backticks_does_not_cause_a_query_to_alter_all_columns_and_indices_to_run_even_if_none_have_changed() {
     496                global $wpdb;
     497
     498                $schema = "
     499                        CREATE TABLE {$wpdb->prefix}dbdelta_test2 (
     500                                `id` bigint(20) NOT NULL AUTO_INCREMENT,
     501                                `references` varchar(255) NOT NULL,
     502                                PRIMARY KEY  (`id`),
     503                                KEY `compound_key` (`id`,`references`)
     504                        )
     505                ";
     506
     507                $wpdb->query( $schema );
     508
     509                $updates = dbDelta( $schema );
     510
     511                $table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test2" );
     512                $compound_key_index = wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key' ) );
     513
     514                $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test2" );
     515
     516                $this->assertCount( 2, $compound_key_index );
     517                $this->assertEmpty( $updates );
     518        }
     519
     520        /**
     521         * @group 20263
     522         */
     523        function test_query_with_reserved_keywords_does_not_explode() {
     524                global $wpdb;
     525
     526                $updates = dbDelta(
     527                        "
     528                        CREATE TABLE {$wpdb->prefix}dbdelta_test (
     529                                id bigint(20) NOT NULL AUTO_INCREMENT,
     530                                column_1 varchar(255) NOT NULL,
     531                                column_2 text,
     532                                column_3 blob,
     533                                `references` varchar(255) NOT NULL,
     534                                PRIMARY KEY  (id),
     535                                KEY key_1 (column_1),
     536                                KEY compound_key (id,column_1),
     537                                KEY compound_key2 (id,`references`)
     538                                FULLTEXT KEY fulltext_key (column_1)
     539                        ) ENGINE=MyISAM
     540                        "
     541                );
     542
     543                $table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test" );
     544
     545                $this->assertCount( 2, wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key2' ) , 'AND' ) );
     546
     547                $this->assertSame(
     548                        array(
     549                                "{$wpdb->prefix}dbdelta_test.references" => "Added column {$wpdb->prefix}dbdelta_test.references",
     550                                0 => "Added index {$wpdb->prefix}dbdelta_test KEY compound_key2 (id,`references`)",
     551                        ),
     552                        $updates
     553                );
     554        }
    491555}