Make WordPress Core

Changeset 13324


Ignore:
Timestamp:
02/23/2010 09:06:50 AM (17 years ago)
Author:
nacin
Message:

Improvements and fixes to wpdb::tables(). See #12083 see #11644

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/maint/repair.php

    r13229 r13324  
    3232        $okay = true;
    3333
    34         $tables = $wpdb->tables( 'all', true );
     34        $tables = $wpdb->tables( 'all' );
    3535        // Loop over the WP tables, checking and repairing as needed.
    3636        foreach ( $tables as $table ) {
  • trunk/wp-includes/wp-db.php

    r13314 r13324  
    9696         * @var int
    9797         */
    98         var $num_rows = 0; 
     98        var $num_rows = 0;
    9999
    100100        /**
     
    364364
    365365        /**
    366          * List of Multisite global tables
     366         * List of WordPress global tables
    367367         *
    368368         * @since 3.0.0
     
    371371         * @var array
    372372         */
    373         var $ms_tables = array( 'blogs', 'signups', 'site', 'sitemeta',
    374                 'sitecategories', 'registration_log', 'blog_versions' );
    375 
    376         /**
    377          * List of WordPress global tables
     373        var $global_tables = array( 'users', 'usermeta' );
     374
     375        /**
     376         * List of Multisite global tables
    378377         *
    379378         * @since 3.0.0
     
    382381         * @var array
    383382         */
    384         var $global_tables = array( 'users', 'usermeta' );
     383        var $ms_global_tables = array( 'blogs', 'signups', 'site', 'sitemeta',
     384                'sitecategories', 'registration_log', 'blog_versions' );
    385385
    386386        /**
    387387         * Format specifiers for DB columns. Columns not listed here default to %s. Initialized during WP load.
    388          * 
     388         *
    389389         * Keys are column names, values are format types: 'ID' => '%d'
    390390         *
     
    534534         * Sets the table prefix for the WordPress tables.
    535535         *
    536          * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to
    537          * override the WordPress users and usersmeta tables that would otherwise be determined by the $prefix.
    538          *
    539536         * @since 2.5.0
    540537         *
     
    552549                        $old_prefix = $this->base_prefix;
    553550                $this->base_prefix = $prefix;
    554                 foreach ( $this->tables( 'global' ) as $table )
    555                         $this->$table = $prefix . $table;
     551                foreach ( $this->tables( 'global' ) as $table => $prefixed_table )
     552                        $this->$table = $prefixed_table;
    556553
    557554                if ( defined( 'VHOST' ) && empty( $this->blogid ) )
     
    560557                $this->prefix = $this->get_blog_prefix( $this->blogid );
    561558
    562                 foreach ( (array) $this->tables( 'blog' ) as $table )
    563                         $this->$table = $this->prefix . $table;
    564 
    565                 foreach ( (array) $this->tables( 'old' ) as $table )
    566                         $this->$table = $this->prefix . $table;
    567 
    568                 if ( defined( 'CUSTOM_USER_TABLE' ) )
    569                         $this->users = CUSTOM_USER_TABLE;
    570 
    571                 if ( defined( 'CUSTOM_USER_META_TABLE' ) )
    572                         $this->usermeta = CUSTOM_USER_META_TABLE;
     559                foreach ( (array) $this->tables( 'blog' ) as $table => $prefixed_table )
     560                        $this->$table = $prefixed_table;
     561
     562                foreach ( (array) $this->tables( 'old' ) as $table => $prefixed_table )
     563                        $this->$table = $prefixed_table;
    573564
    574565                return $old_prefix;
     
    583574         * @param string $site_id. Optional.
    584575         * @return string previous blog id
    585          */     
     576         */
    586577        function set_blog_id( $blog_id, $site_id = '' ) {
    587578                if ( ! empty( $site_id ) )
     
    593584                $this->prefix = $this->get_blog_prefix( $this->blogid );
    594585
    595                 foreach ( $this->tables( 'blog' ) as $table )
    596                         $this->$table = $this->prefix . $table;
    597 
    598                 foreach ( $this->tables( 'old' ) as $table )
    599                         $this->$table = $this->prefix . $table;
     586                foreach ( $this->tables( 'blog' ) as $table => $prefixed_table )
     587                        $this->$table = $prefixed_table;
     588
     589                foreach ( $this->tables( 'old' ) as $table => $prefixed_table )
     590                        $this->$table = $prefixed_table;
    600591
    601592                return $old_blog_id;
     
    624615         * Returns an array of WordPress tables.
    625616         *
     617         * Also allows for the CUSTOM_USER_TABLE and CUSTOM_USER_META_TABLE to
     618         * override the WordPress users and usersmeta tables that would otherwise
     619         * be determined by the prefix.
     620         *
    626621         * @since 3.0.0
    627622         * @uses wpdb::tables
    628623         * @uses wpdb::old_tables
    629624         * @uses wpdb::global_tables
     625         * @uses wpdb::ms_global_tables
    630626         * @uses is_multisite()
    631627         *
    632628         * @param string $scope Can be all, global, blog, or old tables. Default all.
    633          *      All returns all global tables and the blog tables for the queried blog.
    634          * @param bool $prefix Whether to include the blog prefix. Default false.
    635          * @param int $blog_id The blog_id to prefix. Defaults to main blog.
    636          * @return array Table names.
    637          */
    638         function tables( $scope = 'all', $prefix = false, $blog_id = 0 ) {
     629         *      All returns the blog tables for the queried blog and all global tables.
     630         * @param bool $prefix Whether to include table prefixes. Default false. If blog
     631         *      prefix is requested, then the custom users and usermeta tables will be mapped.
     632         * @param int $blog_id The blog_id to prefix. Defaults to main blog. Used only when prefix is requested.
     633         * @return array Table names. When a prefix is requested, the key is the
     634         *      unprefixed table name.
     635         */
     636        function tables( $scope = 'all', $prefix = true, $blog_id = 0 ) {
    639637                switch ( $scope ) {
    640638                        case 'old' :
     
    645643                                break;
    646644                        case 'global' :
    647                                 $tables = array_merge( $this->global_tables, $this->ms_tables );
     645                                $tables = $this->global_tables;
     646                                if ( is_multisite() )
     647                                        $tables = array_merge( $tables, $this->ms_global_tables );
    648648                                break;
    649649                        case 'all' :
    650650                                $tables = array_merge( $this->global_tables, $this->tables );
    651651                                if ( is_multisite() )
    652                                         $tables = array_merge( $tables, $this->ms_tables );
     652                                        $tables = array_merge( $tables, $this->ms_global_tables );
    653653                                break;
    654654                }
     
    656656                if ( $prefix ) {
    657657                        $prefix = $this->get_blog_prefix( $blog_id );
     658                        $base_prefix = $this->base_prefix;
     659                        $global_tables = array_merge( $this->global_tables, $this->ms_global_tables );
    658660                        foreach ( $tables as $k => $table ) {
    659                                 $tables[$k] = $prefix . $table;
     661                                if ( in_array( $table, $global_tables ) )
     662                                        $tables[ $table ] = $base_prefix . $table;
     663                                else
     664                                        $tables[ $table ] = $prefix . $table;
     665                                unset( $tables[ $k ] );
    660666                        }
     667
     668                        if ( isset( $tables['users'] ) && defined( 'CUSTOM_USER_TABLE' ) )
     669                                $tables['users'] = CUSTOM_USER_TABLE;
     670
     671                        if ( isset( $tables['usermeta'] ) && defined( 'CUSTOM_USER_META_TABLE' ) )
     672                                $tables['usermeta'] = CUSTOM_USER_META_TABLE;
    661673                }
    662674
     
    786798         * Prepares a SQL query for safe execution.  Uses sprintf()-like syntax.
    787799         *
    788          * The following directives can be used in the query format string: 
    789          *   %d (decimal number) 
     800         * The following directives can be used in the query format string:
     801         *   %d (decimal number)
    790802         *   %s (string)
    791          *   %% (literal percentage sign - no argument needed) 
    792          *
    793          * Both %d and %s are to be left unquoted in the query string and   
     803         *   %% (literal percentage sign - no argument needed)
     804         *
     805         * Both %d and %s are to be left unquoted in the query string and
    794806         * they need an argument passed for them. Literals (%) as parts of
    795807         * the query must be properly written as %%.
Note: See TracChangeset for help on using the changeset viewer.