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:
Gary Pendergast
2017-01-17 04:00:09 +00:00
parent 0358e8e2cf
commit 16bbc492a5
2 changed files with 114 additions and 19 deletions
+100
View File
@@ -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
*/