wordpress-develop/tests/phpunit/tests/dbdelta.php
Sergey Biryukov 164b22cf6a Tests: First pass at using assertSame() instead of assertEquals() in most of the unit tests.
This ensures that not only the return values match the expected results, but also that their type is the same.

Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable.

Props johnbillion, jrf, SergeyBiryukov.
See #38266.

git-svn-id: https://develop.svn.wordpress.org/trunk@48937 602fd350-edb4-49c9-b593-d223f7449a82
2020-09-02 00:35:36 +00:00

1073 lines
27 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;
/**
* Database engine used for creating tables.
*
* Prior to MySQL 5.7, InnoDB did not support FULLTEXT indexes, so MyISAM is used instead.
*/
protected $db_engine = '';
/**
* Display width for BIGINT data type.
*
* Prior to MySQL 8.0.17, default width of 20 digits was used: BIGINT(20).
* Since MySQL 8.0.17, display width for integer data types is no longer supported.
*/
protected $bigint_display_width = '';
/**
* 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;
$db_version = $wpdb->db_version();
if ( version_compare( $db_version, '5.7', '<' ) ) {
// Prior to MySQL 5.7, InnoDB did not support FULLTEXT indexes, so MyISAM is used instead.
$this->db_engine = 'ENGINE=MyISAM';
}
if ( version_compare( $db_version, '8.0.17', '<' ) ) {
// Prior to MySQL 8.0.17, default width of 20 digits was used: BIGINT(20).
$this->bigint_display_width = '(20)';
}
$wpdb->query(
$wpdb->prepare(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (" .
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
"id bigint{$this->bigint_display_width} NOT NULL AUTO_INCREMENT,
column_1 varchar(255) NOT NULL,
column_2 text,
column_3 blob,
PRIMARY KEY (id),
KEY key_1 (column_1(%d)),
KEY compound_key (id,column_1(%d)),
FULLTEXT KEY fulltext_key (column_1)" .
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
") {$this->db_engine}
",
$this->max_index_length,
$this->max_index_length
)
);
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{$this->bigint_display_width} 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->assertSame( $expected, $updates );
$this->assertSame(
"{$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{$this->bigint_display_width} 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->assertSame( array(), $updates );
}
/**
* Test the column type is updated.
*/
public function test_column_type_change() {
global $wpdb;
// id: bigint => 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->assertSame(
array(
"{$wpdb->prefix}dbdelta_test.id"
=> "Changed type of {$wpdb->prefix}dbdelta_test.id from bigint{$this->bigint_display_width} 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{$this->bigint_display_width} 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->assertSame(
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{$this->bigint_display_width} 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->assertSame( 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{$this->bigint_display_width} 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->assertSame(
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->assertSame(
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{$this->bigint_display_width} 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;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$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;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$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;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$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;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$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";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$wpdb->query( $create );
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$index = $wpdb->get_row( "SHOW INDEXES FROM $table_name WHERE Key_name='a_key';" );
$actual = dbDelta( $create, false );
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
",
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{$this->bigint_display_width} 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)
) {$this->db_engine}
",
false
);
$this->assertSame( array(), $result );
}
/**
* @ticket 36748
*/
function test_upsize_text_fields() {
global $wpdb;
$result = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint{$this->bigint_display_width} 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)
) {$this->db_engine}
",
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{$this->bigint_display_width} 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)
) {$this->db_engine}
",
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{$this->bigint_display_width} NOT NULL AUTO_INCREMENT,
`column_1` varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY compound_key (id,column_1($this->max_index_length))
)
";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$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;
$db_version = $wpdb->db_version();
if ( version_compare( $db_version, '5.4', '<' ) ) {
$this->markTestSkipped( 'Spatial indices require MySQL 5.4 and above.' );
}
$geomcollection_name = 'geomcollection';
if ( version_compare( $db_version, '8.0.11', '<' ) ) {
// Prior to MySQL 8.0.11, GeometryCollection data type name was used.
$geomcollection_name = 'geometrycollection';
}
$schema =
"
CREATE TABLE {$wpdb->prefix}spatial_index_test (
non_spatial bigint{$this->bigint_display_width} unsigned NOT NULL,
spatial_value {$geomcollection_name} NOT NULL,
KEY non_spatial (non_spatial),
SPATIAL KEY spatial_key (spatial_value)
) {$this->db_engine};
";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$wpdb->query( $schema );
$updates = dbDelta( $schema, false );
$this->assertEmpty( $updates );
$schema =
"
CREATE TABLE {$wpdb->prefix}spatial_index_test (
non_spatial bigint{$this->bigint_display_width} unsigned NOT NULL,
spatial_value {$geomcollection_name} NOT NULL,
spatial_value2 {$geomcollection_name} NOT NULL,
KEY non_spatial (non_spatial),
SPATIAL KEY spatial_key (spatial_value)
SPATIAL KEY spatial_key2 (spatial_value2)
) {$this->db_engine};
";
$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{$this->bigint_display_width} NOT NULL AUTO_INCREMENT,
`references` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `compound_key` (`id`,`references`($this->max_index_length))
)
";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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),
) {$this->db_engine}
";
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)),
) {$this->db_engine}
";
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
",
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{$this->bigint_display_width} 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)
) {$this->db_engine}
",
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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$this->assertEmpty( $updates );
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$this->assertEmpty( $updates );
$updates = dbDelta(
"
CREATE TABLE {$wpdb->prefix}dbdelta_test (
id bigint{$this->bigint_display_width} 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)
) {$this->db_engine}
"
);
$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
)
";
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$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
);
}
}