mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-10-06 07:36:58 +00:00
dbDelta: Ignore index subparts when checking for duplicate indices.
If index lengths change in table definitions, we don't recreate the index - instead, we throw a database error, as `dbDelta()` tries to create a new index with the same name. It's better to leave the index as is, MySQL doesn't have an efficient process for resizing indices, and dropping/creating is a slow process which we don't want to trigger automatically. Fixes #34870. git-svn-id: https://develop.svn.wordpress.org/trunk@39921 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -825,6 +825,106 @@ class Tests_dbDelta extends WP_UnitTestCase {
|
||||
$this->assertEmpty( $updates );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 34870
|
||||
*/
|
||||
function test_unchanged_key_lengths_do_not_recreate_index() {
|
||||
global $wpdb;
|
||||
|
||||
$updates = dbDelta(
|
||||
"
|
||||
CREATE TABLE {$wpdb->prefix}dbdelta_test (
|
||||
id bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
column_1 varchar(255) NOT NULL,
|
||||
column_2 text,
|
||||
column_3 blob,
|
||||
PRIMARY KEY (id),
|
||||
KEY key_1 (column_1(255)),
|
||||
KEY compound_key (id,column_1),
|
||||
FULLTEXT KEY fulltext_key (column_1)
|
||||
) ENGINE=MyISAM
|
||||
", false );
|
||||
|
||||
$this->assertEmpty( $updates );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 34870
|
||||
*/
|
||||
function test_changed_key_lengths_do_not_recreate_index() {
|
||||
global $wpdb;
|
||||
|
||||
$updates = dbDelta(
|
||||
"
|
||||
CREATE TABLE {$wpdb->prefix}dbdelta_test (
|
||||
id bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
column_1 varchar(255) NOT NULL,
|
||||
column_2 text,
|
||||
column_3 blob,
|
||||
PRIMARY KEY (id),
|
||||
KEY key_1 (column_1),
|
||||
KEY compound_key (id,column_1),
|
||||
KEY changing_key_length (column_1(20)),
|
||||
FULLTEXT KEY fulltext_key (column_1)
|
||||
) ENGINE=MyISAM
|
||||
" );
|
||||
|
||||
$this->assertSame( array(
|
||||
"Added index {$wpdb->prefix}dbdelta_test KEY `changing_key_length` (`column_1`(20))"
|
||||
), $updates );
|
||||
|
||||
$updates = dbDelta(
|
||||
"
|
||||
CREATE TABLE {$wpdb->prefix}dbdelta_test (
|
||||
id bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
column_1 varchar(255) NOT NULL,
|
||||
column_2 text,
|
||||
column_3 blob,
|
||||
PRIMARY KEY (id),
|
||||
KEY key_1 (column_1),
|
||||
KEY compound_key (id,column_1),
|
||||
KEY changing_key_length (column_1(50)),
|
||||
FULLTEXT KEY fulltext_key (column_1)
|
||||
) ENGINE=MyISAM
|
||||
" );
|
||||
|
||||
$this->assertEmpty( $updates );
|
||||
|
||||
$updates = dbDelta(
|
||||
"
|
||||
CREATE TABLE {$wpdb->prefix}dbdelta_test (
|
||||
id bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
column_1 varchar(255) NOT NULL,
|
||||
column_2 text,
|
||||
column_3 blob,
|
||||
PRIMARY KEY (id),
|
||||
KEY key_1 (column_1),
|
||||
KEY compound_key (id,column_1),
|
||||
KEY changing_key_length (column_1(1)),
|
||||
FULLTEXT KEY fulltext_key (column_1)
|
||||
) ENGINE=MyISAM
|
||||
" );
|
||||
|
||||
$this->assertEmpty( $updates );
|
||||
|
||||
$updates = dbDelta(
|
||||
"
|
||||
CREATE TABLE {$wpdb->prefix}dbdelta_test (
|
||||
id bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
column_1 varchar(255) NOT NULL,
|
||||
column_2 text,
|
||||
column_3 blob,
|
||||
PRIMARY KEY (id),
|
||||
KEY key_1 (column_1),
|
||||
KEY compound_key (id,column_1),
|
||||
KEY changing_key_length (column_1),
|
||||
FULLTEXT KEY fulltext_key (column_1)
|
||||
) ENGINE=MyISAM
|
||||
" );
|
||||
|
||||
$this->assertEmpty( $updates );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 31679
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user