wordpress-develop/tests/phpunit/tests/dbdelta.php
Gary Pendergast 8f95800d52 Code is Poetry.
WordPress' code just... wasn't.
This is now dealt with.

Props jrf, pento, netweb, GaryJ, jdgrimes, westonruter, Greg Sherwood from PHPCS, and everyone who's ever contributed to WPCS and PHPCS.
Fixes #41057.



git-svn-id: https://develop.svn.wordpress.org/trunk@42343 602fd350-edb4-49c9-b593-d223f7449a82
2017-11-30 23:09:33 +00:00

1000 lines
24 KiB
PHP

<?php
/**
* Test dbDelta()
*
* @group upgrade
* @group dbdelta
*/
class Tests_dbDelta extends WP_UnitTestCase {
/**
* The maximum size of an index with utf8mb4 collation and charset with a standard
* byte limit of 767. floor(767/4) = 191 characters.
*/
protected $max_index_length = 191;
/**
* Make sure the upgrade code is loaded before the tests are run.
*/
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
}
/**
* Create a custom table to be used in each test.
*/
public function setUp() {
global $wpdb;
// Forcing MyISAM, because InnoDB only started supporting FULLTEXT indexes in MySQL 5.7.
$wpdb->query(
"
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
parent::setUp();
}
/**
* Delete the custom table on teardown.
*/
public function tearDown() {
global $wpdb;
parent::tearDown();
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test" );
}
/**
* Test table creation.
*/
public function test_creating_a_table() {
remove_filter( 'query', array( $this, '_create_temporary_tables' ) );
remove_filter( 'query', array( $this, '_drop_temporary_tables' ) );
global $wpdb;
$updates = dbDelta(
"CREATE TABLE {$wpdb->prefix}dbdelta_create_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
PRIMARY KEY (id)
);"
);
$expected = array(
"{$wpdb->prefix}dbdelta_create_test" => "Created table {$wpdb->prefix}dbdelta_create_test",
);
$this->assertEquals( $expected, $updates );
$this->assertEquals(
"{$wpdb->prefix}dbdelta_create_test", $wpdb->get_var(
$wpdb->prepare(
'SHOW TABLES LIKE %s', $wpdb->esc_like( "{$wpdb->prefix}dbdelta_create_test" )
)
)
);
$wpdb->query( "DROP TABLE {$wpdb->prefix}dbdelta_create_test" );
}
/**
* Test that it does nothing for an existing table.
*/
public function test_existing_table() {
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length))
)
"
);
$this->assertEquals( array(), $updates );
}
/**
* Test the column type is updated.
*/
public function test_column_type_change() {
global $wpdb;
// id: bigint(20) => int(11)
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id int(11) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY key_1 (column_1($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length))
)
"
);
$this->assertEquals(
array(
"{$wpdb->prefix}dbdelta_test.id"
=> "Changed type of {$wpdb->prefix}dbdelta_test.id from bigint(20) to int(11)",
), $updates
);
}
/**
* Test new column added.
*/
public function test_column_added() {
global $wpdb;
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
extra_col longtext,
PRIMARY KEY (id),
KEY key_1 (column_1($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length))
)
"
);
$this->assertEquals(
array(
"{$wpdb->prefix}dbdelta_test.extra_col"
=> "Added column {$wpdb->prefix}dbdelta_test.extra_col",
), $updates
);
$this->assertTableHasColumn( 'column_1', $wpdb->prefix . 'dbdelta_test' );
$this->assertTableHasPrimaryKey( 'id', $wpdb->prefix . 'dbdelta_test' );
}
/**
* Test that it does nothing when a column is removed.
*
* @ticket 26801
*/
public function test_columns_arent_removed() {
global $wpdb;
// No column column_1
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
KEY key_1 (column_1($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length))
)
"
);
$this->assertEquals( array(), $updates );
$this->assertTableHasColumn( 'column_1', $wpdb->prefix . 'dbdelta_test' );
}
/**
* Test that nothing happens with $execute is false.
*/
public function test_no_execution() {
global $wpdb;
// Added column extra_col
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
extra_col longtext,
PRIMARY KEY (id),
KEY key_1 (column_1({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length))
)
", false // Don't execute.
);
$this->assertEquals(
array(
"{$wpdb->prefix}dbdelta_test.extra_col"
=> "Added column {$wpdb->prefix}dbdelta_test.extra_col",
), $updates
);
$this->assertTableHasNotColumn( 'extra_col', $wpdb->prefix . 'dbdelta_test' );
}
/**
* Test inserting into the database
*/
public function test_insert_into_table() {
global $wpdb;
$insert = dbDelta(
"INSERT INTO {$wpdb->prefix}dbdelta_test (column_1) VALUES ('wcphilly2015')"
);
$this->assertEquals(
array(), $insert
);
$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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
)
", false
);
$this->assertEmpty( $updates );
}
//
// Assertions.
//
/**
* Assert that a table has a row with a value in a field.
*
* @param string $column The field name.
* @param string $value The field value.
* @param string $table The database table name.
*/
protected function assertTableRowHasValue( $column, $value, $table ) {
global $wpdb;
$table_row = $wpdb->get_row( "select $column from {$table} where $column = '$value'" );
$expected = (object) array(
$column => $value,
);
$this->assertEquals( $expected, $table_row );
}
/**
* Assert that a table has a column.
*
* @param string $column The field name.
* @param string $table The database table name.
*/
protected function assertTableHasColumn( $column, $table ) {
global $wpdb;
$table_fields = $wpdb->get_results( "DESCRIBE {$table}" );
$this->assertCount( 1, wp_list_filter( $table_fields, array( 'Field' => $column ) ) );
}
/**
* Assert that a table has a primary key.
*
* Checks for single-column primary keys. May not work for multi-column primary keys.
*
* @param string $column The column for the primary key.
* @param string $table The database table name.
*/
protected function assertTableHasPrimaryKey( $column, $table ) {
global $wpdb;
$table_indices = $wpdb->get_results( "SHOW INDEX FROM {$table}" );
$this->assertCount(
1, wp_list_filter(
$table_indices, array(
'Key_name' => 'PRIMARY',
'Column_name' => $column,
), 'AND'
)
);
}
/**
* Assert that a table doesn't have a column.
*
* @param string $column The field name.
* @param string $table The database table name.
*/
protected function assertTableHasNotColumn( $column, $table ) {
global $wpdb;
$table_fields = $wpdb->get_results( "DESCRIBE {$table}" );
$this->assertCount( 0, wp_list_filter( $table_fields, array( 'Field' => $column ) ) );
}
/**
* @ticket 31869
*/
function test_truncated_index() {
global $wpdb;
if ( ! $wpdb->has_cap( 'utf8mb4' ) ) {
$this->markTestSkipped( 'This test requires utf8mb4 support in MySQL.' );
}
// This table needs to be actually created
remove_filter( 'query', array( $this, '_create_temporary_tables' ) );
remove_filter( 'query', array( $this, '_drop_temporary_tables' ) );
$table_name = "{$wpdb->prefix}test_truncated_index";
$create = "
CREATE TABLE $table_name (
a varchar(255) COLLATE utf8mb4_unicode_ci,
KEY a_key (a)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC";
$wpdb->query( $create );
$index = $wpdb->get_row( "SHOW INDEXES FROM $table_name WHERE Key_name='a_key';" );
$actual = dbDelta( $create, false );
$wpdb->query( "DROP TABLE IF EXISTS $table_name;" );
if ( 191 != $index->Sub_part ) {
$this->markTestSkipped( 'This test requires the index to be truncated.' );
}
$this->assertSame( array(), $actual );
}
/**
* @ticket 36748
*/
function test_dont_downsize_text_fields() {
global $wpdb;
$result = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
column_2 tinytext,
column_3 blob,
PRIMARY KEY (id),
KEY key_1 (column_1({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
", false
);
$this->assertSame( array(), $result );
}
/**
* @ticket 36748
*/
function test_dont_downsize_blob_fields() {
global $wpdb;
$result = 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 tinyblob,
PRIMARY KEY (id),
KEY key_1 (column_1({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
", false
);
$this->assertSame( array(), $result );
}
/**
* @ticket 36748
*/
function test_upsize_text_fields() {
global $wpdb;
$result = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint(20) NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
column_2 bigtext,
column_3 blob,
PRIMARY KEY (id),
KEY key_1 (column_1({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
", false
);
$this->assertSame(
array(
"{$wpdb->prefix}dbdelta_test.column_2"
=> "Changed type of {$wpdb->prefix}dbdelta_test.column_2 from text to bigtext",
), $result
);
}
/**
* @ticket 36748
*/
function test_upsize_blob_fields() {
global $wpdb;
$result = 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 mediumblob,
PRIMARY KEY (id),
KEY key_1 (column_1({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
", false
);
$this->assertSame(
array(
"{$wpdb->prefix}dbdelta_test.column_3"
=> "Changed type of {$wpdb->prefix}dbdelta_test.column_3 from blob to mediumblob",
), $result
);
}
/**
* @ticket 20263
*/
function test_query_with_backticks_does_not_throw_an_undefined_index_warning() {
global $wpdb;
$schema = "
CREATE TABLE {$wpdb->prefix}dbdelta_test2 (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`column_1` varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY compound_key (id,column_1($this->max_index_length))
)
";
$wpdb->query( $schema );
$updates = dbDelta( $schema, false );
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test2" );
$this->assertEmpty( $updates );
}
/**
* @ticket 36948
*/
function test_spatial_indices() {
global $wpdb;
if ( version_compare( $wpdb->db_version(), '5.4', '<' ) ) {
$this->markTestSkipped( 'Spatial indices require MySQL 5.4 and above.' );
}
$schema =
"
CREATE TABLE {$wpdb->prefix}spatial_index_test (
non_spatial bigint(20) unsigned NOT NULL,
spatial_value geometrycollection NOT NULL,
KEY non_spatial (non_spatial),
SPATIAL KEY spatial_key (spatial_value)
) ENGINE=MyISAM;
";
$wpdb->query( $schema );
$updates = dbDelta( $schema, false );
$this->assertEmpty( $updates );
$schema =
"
CREATE TABLE {$wpdb->prefix}spatial_index_test (
non_spatial bigint(20) unsigned NOT NULL,
spatial_value geometrycollection NOT NULL,
spatial_value2 geometrycollection NOT NULL,
KEY non_spatial (non_spatial),
SPATIAL KEY spatial_key (spatial_value)
SPATIAL KEY spatial_key2 (spatial_value2)
) ENGINE=MyISAM;
";
$updates = dbDelta( $schema, false );
$this->assertSame(
array(
"{$wpdb->prefix}spatial_index_test.spatial_value2" => "Added column {$wpdb->prefix}spatial_index_test.spatial_value2",
"Added index {$wpdb->prefix}spatial_index_test SPATIAL KEY `spatial_key2` (`spatial_value2`)",
), $updates
);
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}spatial_index_test" );
}
/**
* @ticket 20263
*/
function test_query_with_backticks_does_not_cause_a_query_to_alter_all_columns_and_indices_to_run_even_if_none_have_changed() {
global $wpdb;
$schema = "
CREATE TABLE {$wpdb->prefix}dbdelta_test2 (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`references` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `compound_key` (`id`,`references`($this->max_index_length))
)
";
$wpdb->query( $schema );
$updates = dbDelta( $schema );
$table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test2" );
$compound_key_index = wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key' ) );
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test2" );
$this->assertCount( 2, $compound_key_index );
$this->assertEmpty( $updates );
}
/**
* @ticket 20263
*/
function test_index_with_a_reserved_keyword_can_be_created() {
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,
`references` varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY key_1 (column_1($this->max_index_length)),
KEY compound_key (id , column_1($this->max_index_length)),
KEY compound_key2 (id,`references`($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$table_indices = $wpdb->get_results( "SHOW INDEX FROM {$wpdb->prefix}dbdelta_test" );
$this->assertCount( 2, wp_list_filter( $table_indices, array( 'Key_name' => 'compound_key2' ), 'AND' ) );
$this->assertSame(
array(
"{$wpdb->prefix}dbdelta_test.references" => "Added column {$wpdb->prefix}dbdelta_test.references",
0 => "Added index {$wpdb->prefix}dbdelta_test KEY `compound_key2` (`id`,`references`($this->max_index_length))",
),
$updates
);
}
/**
* @ticket 20263
*/
function test_wp_get_db_schema_does_no_alter_queries_on_existing_install() {
$updates = dbDelta( wp_get_db_schema() );
$this->assertEmpty( $updates );
}
/**
* @ticket 20263
*/
function test_key_and_index_and_fulltext_key_and_fulltext_index_and_unique_key_and_unique_index_indicies() {
global $wpdb;
$schema = "
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1),
INDEX key_2 (column_1($this->max_index_length)),
UNIQUE KEY key_3 (column_1($this->max_index_length)),
UNIQUE INDEX key_4 (column_1($this->max_index_length)),
FULLTEXT INDEX key_5 (column_1),
) ENGINE=MyISAM
";
$creates = dbDelta( $schema );
$this->assertSame(
array(
0 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_2` (`column_1`($this->max_index_length))",
1 => "Added index {$wpdb->prefix}dbdelta_test UNIQUE KEY `key_3` (`column_1`($this->max_index_length))",
2 => "Added index {$wpdb->prefix}dbdelta_test UNIQUE KEY `key_4` (`column_1`($this->max_index_length))",
3 => "Added index {$wpdb->prefix}dbdelta_test FULLTEXT KEY `key_5` (`column_1`)",
),
$creates
);
$updates = dbDelta( $schema );
$this->assertEmpty( $updates );
}
/**
* @ticket 20263
*/
function test_index_and_key_are_synonyms_and_do_not_recreate_indices() {
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),
INDEX key_1 (column_1($this->max_index_length)),
INDEX compound_key (id,column_1($this->max_index_length)),
FULLTEXT INDEX fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$this->assertEmpty( $updates );
}
/**
* @ticket 20263
*/
function test_indices_with_prefix_limits_are_created_and_do_not_recreate_indices() {
global $wpdb;
$schema = "
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1),
KEY key_2 (column_1(10)),
KEY key_3 (column_2(100),column_1(10)),
) ENGINE=MyISAM
";
$creates = dbDelta( $schema );
$this->assertSame(
array(
0 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_2` (`column_1`(10))",
1 => "Added index {$wpdb->prefix}dbdelta_test KEY `key_3` (`column_2`(100),`column_1`(10))",
),
$creates
);
$updates = dbDelta( $schema );
$this->assertEmpty( $updates );
}
/**
* @ticket 34959
*/
function test_index_col_names_with_order_do_not_recreate_indices() {
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($this->max_index_length) DESC),
KEY compound_key (id,column_1($this->max_index_length) ASC),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$this->assertEmpty( $updates );
}
/**
* @ticket 34873
*/
function test_primary_key_with_single_space_does_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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$this->assertEmpty( $updates );
}
/**
* @ticket 34869
*/
function test_index_definitions_with_spaces_do_not_recreate_indices() {
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($this->max_index_length)),
KEY compound_key (id, column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$this->assertEmpty( $updates );
}
/**
* @ticket 34871
*/
function test_index_types_are_not_case_sensitive_and_do_not_recreate_indices() {
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($this->max_index_length)),
key compound_key (id,column_1($this->max_index_length)),
FULLTEXT KEY fulltext_key (column_1)
) ENGINE=MyISAM
"
);
$this->assertEmpty( $updates );
}
/**
* @ticket 34874
*/
function test_key_names_are_not_case_sensitive_and_do_not_recreate_indices() {
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($this->max_index_length)),
KEY compOUND_key (id,column_1($this->max_index_length)),
FULLTEXT KEY FULLtext_kEY (column_1)
) ENGINE=MyISAM
", false
);
$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({$this->max_index_length})),
KEY compound_key (id,column_1($this->max_index_length)),
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
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($this->max_index_length)),
KEY compound_key (id,column_1($this->max_index_length)),
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
*/
function test_column_type_change_with_hyphens_in_name() {
global $wpdb;
$schema = "
CREATE TABLE {$wpdb->prefix}dbdelta_test2 (
`foo-bar` varchar(255) DEFAULT NULL
)
";
$wpdb->query( $schema );
$schema_update = "
CREATE TABLE {$wpdb->prefix}dbdelta_test2 (
`foo-bar` text DEFAULT NULL
)
";
$updates = dbDelta( $schema_update );
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}dbdelta_test2" );
$this->assertSame(
array(
"{$wpdb->prefix}dbdelta_test2.foo-bar" => "Changed type of {$wpdb->prefix}dbdelta_test2.foo-bar from varchar(255) to text",
),
$updates
);
}
}