Make WordPress Core

Changeset 18899


Ignore:
Timestamp:
10/06/2011 12:21:24 AM (15 years ago)
Author:
ryan
Message:

Introduce wp_get_db_schema() for rerieving the various flavors of the WP db schema. Eliminates need to use global. Allows multiple calls to wpmu_create_blog(). see #12028

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/schema.php

    r18878 r18899  
    88 * @subpackage Administration
    99 */
     10
     11// Declare these as global in case schema.php is included from a function.
     12global $wpdb, $wp_queries, $charset_collate;
    1013
    1114/**
    … …  
    1720$charset_collate = '';
    1821
    19 // Declare these as global in case schema.php is included from a function.
    20 global $wpdb, $wp_queries;
    21 
    22 if ( ! empty($wpdb->charset) )
     22if ( ! empty( $wpdb->charset ) )
    2323        $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
    24 if ( ! empty($wpdb->collate) )
     24if ( ! empty( $wpdb->collate ) )
    2525        $charset_collate .= " COLLATE $wpdb->collate";
    2626
    27 /** Create WordPress database tables SQL */
    28 $wp_queries = "CREATE TABLE $wpdb->terms (
     27/**
     28 * Retrieve the SQL for creating database tables.
     29 *
     30 * @since 3.3.0
     31 *
     32 * @param string $scope Optional. The tables for which to retrieve SQL. Can be all, global, ms_global, or blog tables. Defaults to all.
     33 * @param int $blog_id Optional. The blog ID for which to retrieve SQL.  Default is the current blog ID.
     34 * @return string The SQL needed to create the requested tables.
     35 */
     36function wp_get_db_schema( $scope = 'all', $blog_id = null ) {
     37        global $wpdb;
     38
     39        if ( ! empty($wpdb->charset) )
     40                $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
     41        if ( ! empty($wpdb->collate) )
     42                $charset_collate .= " COLLATE $wpdb->collate";
     43
     44        if ( $blog_id && $blog_id != $wpdb->blogid )
     45                $old_blog_id = $wpdb->set_blog_id( $blog_id );
     46
     47        // Engage multisite if in the middle of turning it on from network.php.
     48        $is_multisite = is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK );
     49
     50        // Blog specific tables.
     51        $blog_tables = "CREATE TABLE $wpdb->terms (
    2952 term_id bigint(20) unsigned NOT NULL auto_increment,
    3053 name varchar(200) NOT NULL default '',
    … …  
    149172  KEY post_parent (post_parent),
    150173  KEY post_author (post_author)
    151 ) $charset_collate;
    152 CREATE TABLE $wpdb->users (
     174) $charset_collate;\n";
     175
     176        // Single site users table. The multisite flavor of the users table is handled below.
     177        $users_single_table = "CREATE TABLE $wpdb->users (
    153178  ID bigint(20) unsigned NOT NULL auto_increment,
    154179  user_login varchar(60) NOT NULL default '',
    … …  
    164189  KEY user_login_key (user_login),
    165190  KEY user_nicename (user_nicename)
    166 ) $charset_collate;
    167 CREATE TABLE $wpdb->usermeta (
     191) $charset_collate;\n";
     192
     193        // Multisite users table
     194        $users_multi_table = "CREATE TABLE $wpdb->users (
     195  ID bigint(20) unsigned NOT NULL auto_increment,
     196  user_login varchar(60) NOT NULL default '',
     197  user_pass varchar(64) NOT NULL default '',
     198  user_nicename varchar(50) NOT NULL default '',
     199  user_email varchar(100) NOT NULL default '',
     200  user_url varchar(100) NOT NULL default '',
     201  user_registered datetime NOT NULL default '0000-00-00 00:00:00',
     202  user_activation_key varchar(60) NOT NULL default '',
     203  user_status int(11) NOT NULL default '0',
     204  display_name varchar(250) NOT NULL default '',
     205  spam tinyint(2) NOT NULL default '0',
     206  deleted tinyint(2) NOT NULL default '0',
     207  PRIMARY KEY  (ID),
     208  KEY user_login_key (user_login),
     209  KEY user_nicename (user_nicename)
     210) $charset_collate;\n";
     211
     212        // usermeta
     213        $usermeta_table = "CREATE TABLE $wpdb->usermeta (
    168214  umeta_id bigint(20) unsigned NOT NULL auto_increment,
    169215  user_id bigint(20) unsigned NOT NULL default '0',
    … …  
    173219  KEY user_id (user_id),
    174220  KEY meta_key (meta_key)
     221) $charset_collate;\n";
     222
     223        // Global tables
     224        if ( $is_multisite )
     225                $global_tables = $users_multi_table . $usermeta_table;
     226        else
     227                $global_tables = $users_single_table . $usermeta_table;
     228
     229        // Multisite global tables.
     230        $ms_global_tables = "CREATE TABLE $wpdb->blogs (
     231  blog_id bigint(20) NOT NULL auto_increment,
     232  site_id bigint(20) NOT NULL default '0',
     233  domain varchar(200) NOT NULL default '',
     234  path varchar(100) NOT NULL default '',
     235  registered datetime NOT NULL default '0000-00-00 00:00:00',
     236  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
     237  public tinyint(2) NOT NULL default '1',
     238  archived enum('0','1') NOT NULL default '0',
     239  mature tinyint(2) NOT NULL default '0',
     240  spam tinyint(2) NOT NULL default '0',
     241  deleted tinyint(2) NOT NULL default '0',
     242  lang_id int(11) NOT NULL default '0',
     243  PRIMARY KEY  (blog_id),
     244  KEY domain (domain(50),path(5)),
     245  KEY lang_id (lang_id)
     246) $charset_collate;
     247CREATE TABLE $wpdb->blog_versions (
     248  blog_id bigint(20) NOT NULL default '0',
     249  db_version varchar(20) NOT NULL default '',
     250  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
     251  PRIMARY KEY  (blog_id),
     252  KEY db_version (db_version)
     253) $charset_collate;
     254CREATE TABLE $wpdb->registration_log (
     255  ID bigint(20) NOT NULL auto_increment,
     256  email varchar(255) NOT NULL default '',
     257  IP varchar(30) NOT NULL default '',
     258  blog_id bigint(20) NOT NULL default '0',
     259  date_registered datetime NOT NULL default '0000-00-00 00:00:00',
     260  PRIMARY KEY  (ID),
     261  KEY IP (IP)
     262) $charset_collate;
     263CREATE TABLE $wpdb->site (
     264  id bigint(20) NOT NULL auto_increment,
     265  domain varchar(200) NOT NULL default '',
     266  path varchar(100) NOT NULL default '',
     267  PRIMARY KEY  (id),
     268  KEY domain (domain,path)
     269) $charset_collate;
     270CREATE TABLE $wpdb->sitemeta (
     271  meta_id bigint(20) NOT NULL auto_increment,
     272  site_id bigint(20) NOT NULL default '0',
     273  meta_key varchar(255) default NULL,
     274  meta_value longtext,
     275  PRIMARY KEY  (meta_id),
     276  KEY meta_key (meta_key),
     277  KEY site_id (site_id)
     278) $charset_collate;
     279CREATE TABLE $wpdb->signups (
     280  domain varchar(200) NOT NULL default '',
     281  path varchar(100) NOT NULL default '',
     282  title longtext NOT NULL,
     283  user_login varchar(60) NOT NULL default '',
     284  user_email varchar(100) NOT NULL default '',
     285  registered datetime NOT NULL default '0000-00-00 00:00:00',
     286  activated datetime NOT NULL default '0000-00-00 00:00:00',
     287  active tinyint(1) NOT NULL default '0',
     288  activation_key varchar(50) NOT NULL default '',
     289  meta longtext,
     290  KEY activation_key (activation_key),
     291  KEY domain (domain)
    175292) $charset_collate;";
     293
     294        switch ( $scope ) {
     295                case 'blog' :
     296                        $queries = $blog_tables;
     297                        break;
     298                case 'global' :
     299                        $queries = $global_tables;
     300                        if ( $is_multisite )
     301                                $queries .= $ms_global_tables;
     302                        break;
     303                case 'ms_global' :
     304                        $queries = $ms_global_tables;
     305                        break;
     306                default:
     307                case 'all' :
     308                        $queries = $global_tables . $blog_tables;
     309                        if ( $is_multisite )
     310                                $queries .= $ms_global_tables;
     311                        break;
     312        }
     313
     314        if ( isset( $old_blog_id ) )
     315                $wpdb->set_blog_id( $old_blog_id );
     316
     317        return $queries;
     318}
     319
     320// Populate for back compat.
     321$wp_queries = wp_get_db_schema( 'all' );
    176322
    177323/**
    … …  
    625771
    626772/**
     773 * Install Network.
     774 *
     775 * @since 3.0.0
     776 *
     777 */
     778if ( !function_exists( 'install_network' ) ) :
     779function install_network() {
     780        if ( ! defined( 'WP_INSTALLING_NETWORK' ) )
     781                define( 'WP_INSTALLING_NETWORK', true );
     782
     783        dbDelta( wp_get_db_schema( 'global' ) );
     784}
     785endif;
     786
     787/**
    627788 * populate network settings
    628789 *
  • trunk/wp-admin/includes/upgrade.php

    r18821 r18899  
    14251425 * @return unknown
    14261426 */
    1427 function dbDelta($queries, $execute = true) {
     1427function dbDelta( $queries = '', $execute = true ) {
    14281428        global $wpdb;
     1429
     1430        if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) )
     1431            $queries = wp_get_db_schema( $queries );
    14291432
    14301433        // Separate individual queries into an array
    … …  
    16321635 * @since 1.5.0
    16331636 */
    1634 function make_db_current() {
    1635         global $wp_queries;
    1636 
    1637         $alterations = dbDelta($wp_queries);
     1637function make_db_current( $tables = 'all' ) {
     1638        $alterations = dbDelta( $tables );
    16381639        echo "<ol>\n";
    16391640        foreach($alterations as $alteration) echo "<li>$alteration</li>\n";
    … …  
    16481649 * @since 1.5.0
    16491650 */
    1650 function make_db_current_silent() {
    1651         global $wp_queries;
    1652 
    1653         $alterations = dbDelta($wp_queries);
     1651function make_db_current_silent(  $tables = 'all' ) {
     1652        $alterations = dbDelta( $tables );
    16541653}
    16551654
    … …  
    19341933
    19351934/**
    1936  * Install Network.
    1937  *
    1938  * @since 3.0.0
    1939  *
    1940  */
    1941 if ( !function_exists( 'install_network' ) ) :
    1942 function install_network() {
    1943         global $wpdb, $charset_collate;
    1944         $ms_queries = "
    1945 CREATE TABLE $wpdb->users (
    1946   ID bigint(20) unsigned NOT NULL auto_increment,
    1947   user_login varchar(60) NOT NULL default '',
    1948   user_pass varchar(64) NOT NULL default '',
    1949   user_nicename varchar(50) NOT NULL default '',
    1950   user_email varchar(100) NOT NULL default '',
    1951   user_url varchar(100) NOT NULL default '',
    1952   user_registered datetime NOT NULL default '0000-00-00 00:00:00',
    1953   user_activation_key varchar(60) NOT NULL default '',
    1954   user_status int(11) NOT NULL default '0',
    1955   display_name varchar(250) NOT NULL default '',
    1956   spam tinyint(2) NOT NULL default '0',
    1957   deleted tinyint(2) NOT NULL default '0',
    1958   PRIMARY KEY  (ID),
    1959   KEY user_login_key (user_login),
    1960   KEY user_nicename (user_nicename)
    1961 ) $charset_collate;
    1962 CREATE TABLE $wpdb->blogs (
    1963   blog_id bigint(20) NOT NULL auto_increment,
    1964   site_id bigint(20) NOT NULL default '0',
    1965   domain varchar(200) NOT NULL default '',
    1966   path varchar(100) NOT NULL default '',
    1967   registered datetime NOT NULL default '0000-00-00 00:00:00',
    1968   last_updated datetime NOT NULL default '0000-00-00 00:00:00',
    1969   public tinyint(2) NOT NULL default '1',
    1970   archived enum('0','1') NOT NULL default '0',
    1971   mature tinyint(2) NOT NULL default '0',
    1972   spam tinyint(2) NOT NULL default '0',
    1973   deleted tinyint(2) NOT NULL default '0',
    1974   lang_id int(11) NOT NULL default '0',
    1975   PRIMARY KEY  (blog_id),
    1976   KEY domain (domain(50),path(5)),
    1977   KEY lang_id (lang_id)
    1978 ) $charset_collate;
    1979 CREATE TABLE $wpdb->blog_versions (
    1980   blog_id bigint(20) NOT NULL default '0',
    1981   db_version varchar(20) NOT NULL default '',
    1982   last_updated datetime NOT NULL default '0000-00-00 00:00:00',
    1983   PRIMARY KEY  (blog_id),
    1984   KEY db_version (db_version)
    1985 ) $charset_collate;
    1986 CREATE TABLE $wpdb->registration_log (
    1987   ID bigint(20) NOT NULL auto_increment,
    1988   email varchar(255) NOT NULL default '',
    1989   IP varchar(30) NOT NULL default '',
    1990   blog_id bigint(20) NOT NULL default '0',
    1991   date_registered datetime NOT NULL default '0000-00-00 00:00:00',
    1992   PRIMARY KEY  (ID),
    1993   KEY IP (IP)
    1994 ) $charset_collate;
    1995 CREATE TABLE $wpdb->site (
    1996   id bigint(20) NOT NULL auto_increment,
    1997   domain varchar(200) NOT NULL default '',
    1998   path varchar(100) NOT NULL default '',
    1999   PRIMARY KEY  (id),
    2000   KEY domain (domain,path)
    2001 ) $charset_collate;
    2002 CREATE TABLE $wpdb->sitemeta (
    2003   meta_id bigint(20) NOT NULL auto_increment,
    2004   site_id bigint(20) NOT NULL default '0',
    2005   meta_key varchar(255) default NULL,
    2006   meta_value longtext,
    2007   PRIMARY KEY  (meta_id),
    2008   KEY meta_key (meta_key),
    2009   KEY site_id (site_id)
    2010 ) $charset_collate;
    2011 CREATE TABLE $wpdb->signups (
    2012   domain varchar(200) NOT NULL default '',
    2013   path varchar(100) NOT NULL default '',
    2014   title longtext NOT NULL,
    2015   user_login varchar(60) NOT NULL default '',
    2016   user_email varchar(100) NOT NULL default '',
    2017   registered datetime NOT NULL default '0000-00-00 00:00:00',
    2018   activated datetime NOT NULL default '0000-00-00 00:00:00',
    2019   active tinyint(1) NOT NULL default '0',
    2020   activation_key varchar(50) NOT NULL default '',
    2021   meta longtext,
    2022   KEY activation_key (activation_key),
    2023   KEY domain (domain)
    2024 ) $charset_collate;
    2025 ";
    2026 // now create tables
    2027         dbDelta( $ms_queries );
    2028 }
    2029 endif;
    2030 
    2031 /**
    20321935 * Install global terms.
    20331936 *
  • trunk/wp-admin/network.php

    r18841 r18899  
    1111 */
    1212
    13 define( 'WP_NETWORK_ADMIN_PAGE', true );
     13define( 'WP_INSTALLING_NETWORK', true );
    1414
    1515/** WordPress Administration Bootstrap */
  • trunk/wp-includes/l10n.php

    r18827 r18899  
    383383        load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
    384384
    385         if ( is_multisite() || ( defined( 'WP_NETWORK_ADMIN_PAGE' ) && WP_NETWORK_ADMIN_PAGE ) ) {
     385        if ( is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) {
    386386                load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
    387387        }
  • trunk/wp-includes/ms-functions.php

    r18841 r18899  
    11731173
    11741174        // Set everything up
    1175         make_db_current_silent();
     1175        make_db_current_silent( 'blog' );
    11761176        populate_options();
    11771177        populate_roles();
Note: See TracChangeset for help on using the changeset viewer.