WordPress.org

Make WordPress Core

Ticket #20838: lazy-col-info.2.diff

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

     
    134134         * Saved info on the table column
    135135         *
    136136         * @since 1.2.0
    137          * @access private
     137         * @access protected
    138138         * @var array
    139139         */
    140         var $col_info;
     140        protected $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         * @access protected
     1474         */
     1475        protected function load_col_info() {
     1476                if( empty( $this->col_info ) ) {
     1477                        for ( $i = 0; $i < @mysql_num_fields( $this->result ); $i++ )
     1478                                $this->col_info[$i] = @mysql_fetch_field( $this->result, $i );
     1479                }
     1480        }
    14591481
    14601482        /**
    14611483         * Retrieve column metadata from the last query.
     
    14671489         * @return mixed Column Results
    14681490         */
    14691491        function get_col_info( $info_type = 'name', $col_offset = -1 ) {
     1492                $this->load_col_info();
     1493               
    14701494                if ( $this->col_info ) {
    14711495                        if ( $col_offset == -1 ) {
    14721496                                $i = 0;