WordPress.org

Make WordPress Core

Ticket #20838: lazy-col-info.diff

File lazy-col-info.diff, 2.1 KB (added by pento, 6 years ago)
  • wp-includes/wp-db.php

     
    137137         * @access private
    138138         * @var array
    139139         */
    140         var $col_info;
     140        private $col_info;
    141141
    142142        /**
    143143         * Saved queries that were executed
     
    514514        function __destruct() {
    515515                return true;
    516516        }
     517       
     518        /**
     519         * PHP5 style magic getter, used to lazy-load expensive data.
     520         *
     521         * @since 3.5.0
     522         * @param string $var The private member to get, and optionally process
     523         * @return mixed The private member
     524         */
     525        function __get( $var ) {
     526                if ( 'col_info' == $var )
     527                        $this->load_col_info();
     528               
     529                return $this->$var;
     530        }
    517531
    518532        /**
    519533         * Set $this->charset and $this->collate
     
    10251039                $this->last_result = array();
    10261040                $this->col_info    = null;
    10271041                $this->last_query  = null;
     1042                @mysql_free_result( $this->result );
    10281043        }
    10291044
    10301045        /**
     
    11171132                        // Return number of rows affected
    11181133                        $return_val = $this->rows_affected;
    11191134                } else {
    1120                         $i = 0;
    1121                         while ( $i < @mysql_num_fields( $this->result ) ) {
    1122                                 $this->col_info[$i] = @mysql_fetch_field( $this->result );
    1123                                 $i++;
    1124                         }
    11251135                        $num_rows = 0;
    11261136                        while ( $row = @mysql_fetch_object( $this->result ) ) {
    11271137                                $this->last_result[$num_rows] = $row;
    11281138                                $num_rows++;
    11291139                        }
    11301140
    1131                         @mysql_free_result( $this->result );
    1132 
    11331141                        // Log number of rows the query returned
    11341142                        // and return number of rows selected
    11351143                        $this->num_rows = $num_rows;
     
    14561464                }
    14571465                return null;
    14581466        }
     1467       
     1468        /**
     1469         * Load the column metadata from the last query.
     1470         *
     1471         * @since 3.5.0
     1472         */
     1473        function load_col_info() {
     1474                if( empty( $this->col_info ) ) {
     1475                        for ( $i = 0; $i < @mysql_num_fields( $this->result ); $i++ )
     1476                                $this->col_info[$i] = @mysql_fetch_field( $this->result, $i );
     1477                }
     1478        }
    14591479
    14601480        /**
    14611481         * Retrieve column metadata from the last query.
     
    14671487         * @return mixed Column Results
    14681488         */
    14691489        function get_col_info( $info_type = 'name', $col_offset = -1 ) {
     1490                $this->load_col_info();
     1491               
    14701492                if ( $this->col_info ) {
    14711493                        if ( $col_offset == -1 ) {
    14721494                                $i = 0;