Make WordPress Core

Ticket #32029: 32029.diff

File 32029.diff, 2.4 KB (added by pento, 9 years ago)
  • src/wp-includes/wp-db.php

     
    23992399                        return true;
    24002400                }
    24012401
     2402                // We don't need to check the collation for queries that don't read data.
     2403                $query = ltrim( $query, "\r\n\t (" );
     2404                if ( preg_match( '/^(?:SHOW|DESCRIBE|DESC|EXPLAIN)\s/i', $query ) ) {
     2405                        return true;
     2406                }
     2407
    24022408                $table = $this->get_table_from_query( $query );
    24032409                if ( ! $table ) {
    24042410                        return false;
     
    24052411                }
    24062412
    24072413                $this->checking_collation = true;
    2408                 $this->get_table_charset( $table );
     2414                $collation = $this->get_table_charset( $table );
    24092415                $this->checking_collation = false;
    24102416
     2417                // Tables with no collation, or latin1 only, don't need extra checking.
     2418                if ( false === $collation || 'latin1' === $collation ) {
     2419                        return true;
     2420                }
     2421
    24112422                $table = strtolower( $table );
    24122423                if ( empty( $this->col_meta[ $table ] ) ) {
    24132424                        return false;
    24142425                }
    24152426
     2427                // If any of the columns don't have one of these collations, it needs more sanity checking.
    24162428                foreach( $this->col_meta[ $table ] as $col ) {
    24172429                        if ( empty( $col->Collation ) ) {
    24182430                                continue;
  • tests/phpunit/tests/db/charset.php

     
    505505                        $value[0] = "CREATE TABLE $this_table_name {$value[0]}";
    506506                        $value[2] = "SELECT * FROM $this_table_name";
    507507                        $value[3] = "DROP TABLE IF EXISTS $this_table_name";
     508                        $value[4] = array(
     509                                "SHOW FULL TABLES LIKE $this_table_name",
     510                                "DESCRIBE $this_table_name",
     511                                "DESC $this_table_name",
     512                                "EXPLAIN SELECT * FROM $this_table_name",
     513                        );
    508514                }
    509515                unset( $value );
    510516
     
    516522         * @dataProvider data_table_collation_check
    517523         * @ticket 21212
    518524         */
    519         function test_table_collation_check( $create, $expected, $query, $drop ) {
     525        function test_table_collation_check( $create, $expected, $query, $drop, $always_true ) {
    520526                self::$_wpdb->query( $drop );
    521527
    522528                self::$_wpdb->query( $create );
     
    524530                $return = self::$_wpdb->check_safe_collation( $query );
    525531                $this->assertEquals( $expected, $return );
    526532
     533                foreach( $always_true as $true_query ) {
     534                        $return = self::$_wpdb->check_safe_collation( $true_query );
     535                        $this->assertTrue( $return );
     536                }
     537
    527538                self::$_wpdb->query( $drop );
    528539        }
    529540}