diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php index d7ac3ebf7d..be948639fc 100644 --- a/src/wp-admin/includes/upgrade.php +++ b/src/wp-admin/includes/upgrade.php @@ -2195,6 +2195,7 @@ function dbDelta( $queries = '', $execute = true ) { $keyname = $tableindex->Key_name; $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; + $index_ary[$keyname]['index_type'] = $tableindex->Index_type; } // For each actual index in the index array. @@ -2207,6 +2208,9 @@ function dbDelta( $queries = '', $execute = true ) { } elseif ( $index_data['unique'] ) { $index_string .= 'UNIQUE '; } + if ( 'FULLTEXT' === strtoupper( $index_data['index_type'] ) ) { + $index_string .= 'FULLTEXT '; + } $index_string .= 'KEY '; if ($index_name != 'PRIMARY') { $index_string .= $index_name; diff --git a/tests/phpunit/tests/dbdelta.php b/tests/phpunit/tests/dbdelta.php index 51bedb101c..174e7e5156 100644 --- a/tests/phpunit/tests/dbdelta.php +++ b/tests/phpunit/tests/dbdelta.php @@ -25,6 +25,7 @@ class Tests_dbDelta extends WP_UnitTestCase { global $wpdb; + // Forcing MyISAM, because InnoDB only started supporting FULLTEXT indexes in MySQL 5.7. $wpdb->query( " CREATE TABLE {$wpdb->prefix}dbdelta_test ( @@ -32,8 +33,9 @@ class Tests_dbDelta extends WP_UnitTestCase { column_1 varchar(255) NOT NULL, PRIMARY KEY (id), KEY key_1 (column_1), - KEY compoud_key (id,column_1) - ) + KEY compoud_key (id,column_1), + FULLTEXT KEY fulltext_key (column_1) + ) ENGINE=MyISAM " ); @@ -248,7 +250,30 @@ class Tests_dbDelta extends WP_UnitTestCase { $this->assertTableRowHasValue( 'column_1', 'wcphilly2015', $wpdb->prefix . 'dbdelta_test' ); } - + + /** + * Test that FULLTEXT indexes are detected. + * @ticket 14445 + */ + public function test_fulltext_index() { + global $wpdb; + + $updates = dbDelta( + " + CREATE TABLE {$wpdb->prefix}dbdelta_test ( + id bigint(20) NOT NULL AUTO_INCREMENT, + column_1 varchar(255) NOT NULL, + PRIMARY KEY (id), + KEY key_1 (column_1), + KEY compoud_key (id,column_1), + FULLTEXT KEY fulltext_key (column_1) + ) + ", false + ); + + $this->assertEmpty( $updates ); + } + // // Assertions. //