WordPress.org

Make WordPress Core

Ticket #12257: wp-db.php.diff

File wp-db.php.diff, 5.5 KB (added by joelhardi, 4 years ago)

patch to wp-db trunk r15628 that uses mysql client funcs to manipulate query result instead of copying into array (see my comment)

  • wp-db.php

     
    125125        var $last_query; 
    126126 
    127127        /** 
    128          * Results of the last query made 
     128         * MySQL result resource of the last query made 
    129129         * 
    130          * @since 1.0.0 
     130         * @since 3.?.? 
    131131         * @access private 
    132          * @var array|null 
     132         * @var resource|null 
    133133         */ 
    134         var $last_result; 
     134        var $mysql_last_result; 
    135135 
    136136        /** 
    137137         * Saved info on the table column 
     
    10151015         * @return void 
    10161016         */ 
    10171017        function flush() { 
    1018                 $this->last_result = array(); 
     1018                @mysql_free_result( $this->mysql_last_result ); 
    10191019                $this->col_info    = null; 
    10201020                $this->last_query  = null; 
    10211021        } 
     
    10781078                if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) 
    10791079                        $this->timer_start(); 
    10801080 
    1081                 $this->result = @mysql_query( $query, $this->dbh ); 
     1081                $this->mysql_last_result = @mysql_query( $query, $this->dbh ); 
    10821082                $this->num_queries++; 
    10831083 
    10841084                if ( defined( 'SAVEQUERIES' ) && SAVEQUERIES ) 
     
    11001100                        $return_val = $this->rows_affected; 
    11011101                } else { 
    11021102                        $i = 0; 
    1103                         while ( $i < @mysql_num_fields( $this->result ) ) { 
    1104                                 $this->col_info[$i] = @mysql_fetch_field( $this->result ); 
     1103                        while ( $i < @mysql_num_fields( $this->mysql_last_result ) ) { 
     1104                                $this->col_info[$i] = @mysql_fetch_field( $this->mysql_last_result ); 
    11051105                                $i++; 
    11061106                        } 
    1107                         $num_rows = 0; 
    1108                         while ( $row = @mysql_fetch_object( $this->result ) ) { 
    1109                                 $this->last_result[$num_rows] = $row; 
    1110                                 $num_rows++; 
    1111                         } 
    11121107 
    1113                         @mysql_free_result( $this->result ); 
    1114  
    11151108                        // Log number of rows the query returned 
    11161109                        // and return number of rows selected 
    1117                         $this->num_rows = $num_rows; 
    1118                         $return_val     = $num_rows; 
     1110                        $this->num_rows = @mysql_num_rows( $this->mysql_last_result ); 
     1111                        $return_val     = $this->num_rows; 
    11191112                } 
    11201113 
    11211114                return $return_val; 
     
    12741267                if ( $query ) 
    12751268                        $this->query( $query ); 
    12761269 
    1277                 // Extract var out of cached results based x,y vals 
    1278                 if ( !empty( $this->last_result[$y] ) ) { 
    1279                         $values = array_values( get_object_vars( $this->last_result[$y] ) ); 
     1270                // Extract var from result resource based x,y vals 
     1271                if ( $this->num_rows > $y ) { 
     1272                        @mysql_data_seek( $this->mysql_last_result, $y ); 
     1273                        $values = @mysql_fetch_row( $this->mysql_last_result ); 
    12801274                } 
    12811275 
    12821276                // If there is a value return it else return null 
     
    13031297                else 
    13041298                        return null; 
    13051299 
    1306                 if ( !isset( $this->last_result[$y] ) ) 
     1300                if ( $this->num_rows <= $y ) 
    13071301                        return null; 
    13081302 
     1303                @mysql_data_seek( $this->mysql_last_result, $y ); 
     1304 
    13091305                if ( $output == OBJECT ) { 
    1310                         return $this->last_result[$y] ? $this->last_result[$y] : null; 
     1306                        return @mysql_fetch_object( $this->mysql_last_result ); 
    13111307                } elseif ( $output == ARRAY_A ) { 
    1312                         return $this->last_result[$y] ? get_object_vars( $this->last_result[$y] ) : null; 
     1308                        return @mysql_fetch_assoc( $this->mysql_last_result ); 
    13131309                } elseif ( $output == ARRAY_N ) { 
    1314                         return $this->last_result[$y] ? array_values( get_object_vars( $this->last_result[$y] ) ) : null; 
     1310                        return @mysql_fetch_row( $this->mysql_last_result ); 
    13151311                } else { 
    13161312                        $this->print_error(/*WP_I18N_DB_GETROW_ERROR*/" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N"/*/WP_I18N_DB_GETROW_ERROR*/); 
    13171313                } 
     
    13361332 
    13371333                $new_array = array(); 
    13381334                // Extract the column values 
    1339                 for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) { 
    1340                         $new_array[$i] = $this->get_var( null, $x, $i ); 
     1335                @mysql_data_seek( $this->mysql_last_result, 0 ); 
     1336                for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { 
     1337                        $values = @mysql_fetch_row( $this->mysql_last_result ); 
     1338                        if ( isset( $values[$x] ) && $values[$x] !== '' ) 
     1339                                $new_array[$i] = $values[$x]; 
     1340                        else 
     1341                                $new_array[$i] = null;                   
    13411342                } 
    13421343                return $new_array; 
    13431344        } 
     
    13631364                else 
    13641365                        return null; 
    13651366 
     1367                if ( $this->num_rows == 0 ) 
     1368                        return null; 
     1369 
    13661370                $new_array = array(); 
     1371                @mysql_data_seek( $this->mysql_last_result, 0 ); 
    13671372                if ( $output == OBJECT ) { 
    13681373                        // Return an integer-keyed array of row objects 
    1369                         return $this->last_result; 
     1374                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { 
     1375                                $new_array[] = @mysql_fetch_object( $this->mysql_last_result ); 
     1376                        } 
    13701377                } elseif ( $output == OBJECT_K ) { 
    13711378                        // Return an array of row objects with keys from column 1 
    13721379                        // (Duplicates are discarded) 
    1373                         foreach ( $this->last_result as $row ) { 
     1380                        while ( $row = @mysql_fetch_object( $this->mysql_last_result ) ) { 
    13741381                                $key = array_shift( $var_by_ref = get_object_vars( $row ) ); 
    13751382                                if ( ! isset( $new_array[ $key ] ) ) 
    13761383                                        $new_array[ $key ] = $row; 
    13771384                        } 
    1378                         return $new_array; 
    1379                 } elseif ( $output == ARRAY_A || $output == ARRAY_N ) { 
    1380                         // Return an integer-keyed array of... 
    1381                         if ( $this->last_result ) { 
    1382                                 foreach( (array) $this->last_result as $row ) { 
    1383                                         if ( $output == ARRAY_N ) { 
    1384                                                 // ...integer-keyed row arrays 
    1385                                                 $new_array[] = array_values( get_object_vars( $row ) ); 
    1386                                         } else { 
    1387                                                 // ...column name-keyed row arrays 
    1388                                                 $new_array[] = get_object_vars( $row ); 
    1389                                         } 
    1390                                 } 
     1385                } elseif ( $output == ARRAY_A ) { 
     1386                        // Return an integer-keyed array of column name-keyed row arrays 
     1387                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { 
     1388                                $new_array[] = @mysql_fetch_assoc( $this->mysql_last_result ); 
    13911389                        } 
    1392                         return $new_array; 
     1390                } elseif ( $output == ARRAY_N ) { 
     1391                        // Return an integer-keyed array of integer-keyed row arrays 
     1392                        for ( $i = 0, $j = $this->num_rows; $i < $j; $i++ ) { 
     1393                                $new_array[] = @mysql_fetch_row( $this->mysql_last_result ); 
     1394                        } 
    13931395                } 
    1394                 return null; 
     1396 
     1397                return $new_array; 
    13951398        } 
    13961399 
    13971400        /**