Make WordPress Core

Ticket #32090: 32090-37.patch

File 32090-37.patch, 2.7 KB (added by johnbillion, 10 years ago)

3.7

  • branches/3.7/src/wp-includes/wp-db.php

     
    18241824                }
    18251825
    18261826                $charsets = $columns = array();
    1827                 $results = $this->get_results( "SHOW FULL COLUMNS FROM `$table`" );
     1827
     1828                $table_parts = explode( '.', $table );
     1829                $table = '`' . implode( '`.`', $table_parts ) . '`';
     1830                $results = $this->get_results( "SHOW FULL COLUMNS FROM $table" );
    18281831                if ( ! $results ) {
    18291832                        return new WP_Error( 'wpdb_get_table_charset_failure' );
    18301833                }
     
    23912394                                . '|REPLACE(?:\s+LOW_PRIORITY|\s+DELAYED)?(?:\s+INTO)?'
    23922395                                . '|UPDATE(?:\s+LOW_PRIORITY)?(?:\s+IGNORE)?'
    23932396                                . '|DELETE(?:\s+LOW_PRIORITY|\s+QUICK|\s+IGNORE)*(?:\s+FROM)?'
    2394                                 . ')\s+`?([\w-]+)`?/is', $query, $maybe ) ) {
    2395                         return $maybe[1];
     2397                                . ')\s+((?:[0-9a-zA-Z$_.`]|[\xC2-\xDF][\x80-\xBF])+)/is', $query, $maybe ) ) {
     2398                        return str_replace( '`', '', $maybe[1] );
    23962399                }
    23972400
    23982401                // SHOW TABLE STATUS and SHOW TABLES
    23992402                if ( preg_match( '/^\s*(?:'
    24002403                                . 'SHOW\s+TABLE\s+STATUS.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
    24012404                                . '|SHOW\s+(?:FULL\s+)?TABLES.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
    2402                                 . ')\W([\w-]+)\W/is', $query, $maybe ) ) {
    2403                         return $maybe[1];
     2405                                . ')\W((?:[0-9a-zA-Z$_.`]|[\xC2-\xDF][\x80-\xBF])+)\W/is', $query, $maybe ) ) {
     2406                        return str_replace( '`', '', $maybe[1] );
    24042407                }
    24052408
    24062409                // Big pattern for the rest of the table-related queries.
     
    24182421                                . '|LOAD\s+DATA.*INFILE.*INTO\s+TABLE'
    24192422                                . '|(?:GRANT|REVOKE).*ON\s+TABLE'
    24202423                                . '|SHOW\s+(?:.*FROM|.*TABLE)'
    2421                                 . ')\s+\(*\s*`?([\w-]+)`?\s*\)*/is', $query, $maybe ) ) {
    2422                         return $maybe[1];
     2424                                . ')\s+\(*\s*((?:[0-9a-zA-Z$_.`]|[\xC2-\xDF][\x80-\xBF])+)\s*\)*/is', $query, $maybe ) ) {
     2425                        return str_replace( '`', '', $maybe[1] );
    24232426                }
    24242427
    24252428                return false;
  • branches/3.7/tests/phpunit/tests/db.php

     
    290290         */
    291291        function data_get_table_from_query() {
    292292                $table = 'a_test_table_name';
     293                $db_table = '`a_test_db`.`another_test_table`';
    293294
    294295                $queries = array(
    295296                        // Basic
     
    392393                        "SHOW INDEX FROM $table",
    393394                );
    394395
    395                 foreach ( $queries as &$query ) {
    396                         $query = array( $query, $table );
     396                $querycount = count( $queries );
     397                for ( $ii = 0; $ii < $querycount; $ii++ ) {
     398                        $db_query = str_replace( $table, $db_table, $queries[ $ii ] );
     399                        $expected_db_table = str_replace( '`', '', $db_table );
     400
     401                        $queries[ $ii ] = array( $queries[ $ii ], $table );
     402                        $queries[] = array( $db_query, $expected_db_table );
    397403                }
    398404                return $queries;
    399405        }