Skip to content

Commit e41e2d2

Browse files
committed
Multisite: Enforce consistent types on ID columns in multisite database tables, to better allow for foreign keys to more reliably be defined between them.
This change adjusts the install & upgrade routines so all of ID-based database columns in the multisite database tables are `unsigned`, bringing them up-to-speed with ID-based columns in single-site tables. Additionally, the `$wp_db_version` number is bumped, and the `pre_schema_upgrade()` upgrade function is modified to accommodate & use that new version. Follow-up to [10852]. Props spacedmonkey, johnjamesjacoby. Fixes #40418. git-svn-id: https://develop.svn.wordpress.org/trunk@60497 602fd350-edb4-49c9-b593-d223f7449a82
1 parent fa40d08 commit e41e2d2

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

src/wp-admin/includes/schema.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,8 @@ function wp_get_db_schema( $scope = 'all', $blog_id = null ) {
245245

246246
// Multisite global tables.
247247
$ms_global_tables = "CREATE TABLE $wpdb->blogs (
248-
blog_id bigint(20) NOT NULL auto_increment,
249-
site_id bigint(20) NOT NULL default '0',
248+
blog_id bigint(20) unsigned NOT NULL auto_increment,
249+
site_id bigint(20) unsigned NOT NULL default '0',
250250
domain varchar(200) NOT NULL default '',
251251
path varchar(100) NOT NULL default '',
252252
registered datetime NOT NULL default '0000-00-00 00:00:00',
@@ -263,40 +263,40 @@ function wp_get_db_schema( $scope = 'all', $blog_id = null ) {
263263
) $charset_collate;
264264
CREATE TABLE $wpdb->blogmeta (
265265
meta_id bigint(20) unsigned NOT NULL auto_increment,
266-
blog_id bigint(20) NOT NULL default '0',
266+
blog_id bigint(20) unsigned NOT NULL default '0',
267267
meta_key varchar(255) default NULL,
268268
meta_value longtext,
269269
PRIMARY KEY (meta_id),
270270
KEY meta_key (meta_key($max_index_length)),
271271
KEY blog_id (blog_id)
272272
) $charset_collate;
273273
CREATE TABLE $wpdb->registration_log (
274-
ID bigint(20) NOT NULL auto_increment,
274+
ID bigint(20) unsigned NOT NULL auto_increment,
275275
email varchar(255) NOT NULL default '',
276276
IP varchar(30) NOT NULL default '',
277-
blog_id bigint(20) NOT NULL default '0',
277+
blog_id bigint(20) unsigned NOT NULL default '0',
278278
date_registered datetime NOT NULL default '0000-00-00 00:00:00',
279279
PRIMARY KEY (ID),
280280
KEY IP (IP)
281281
) $charset_collate;
282282
CREATE TABLE $wpdb->site (
283-
id bigint(20) NOT NULL auto_increment,
283+
id bigint(20) unsigned NOT NULL auto_increment,
284284
domain varchar(200) NOT NULL default '',
285285
path varchar(100) NOT NULL default '',
286286
PRIMARY KEY (id),
287287
KEY domain (domain(140),path(51))
288288
) $charset_collate;
289289
CREATE TABLE $wpdb->sitemeta (
290-
meta_id bigint(20) NOT NULL auto_increment,
291-
site_id bigint(20) NOT NULL default '0',
290+
meta_id bigint(20) unsigned NOT NULL auto_increment,
291+
site_id bigint(20) unsigned NOT NULL default '0',
292292
meta_key varchar(255) default NULL,
293293
meta_value longtext,
294294
PRIMARY KEY (meta_id),
295295
KEY meta_key (meta_key($max_index_length)),
296296
KEY site_id (site_id)
297297
) $charset_collate;
298298
CREATE TABLE $wpdb->signups (
299-
signup_id bigint(20) NOT NULL auto_increment,
299+
signup_id bigint(20) unsigned NOT NULL auto_increment,
300300
domain varchar(200) NOT NULL default '',
301301
path varchar(100) NOT NULL default '',
302302
title longtext NOT NULL,

src/wp-admin/includes/upgrade.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3711,7 +3711,7 @@ function pre_schema_upgrade() {
37113711
}
37123712

37133713
// Multisite schema upgrades.
3714-
if ( $wp_current_db_version < 25448 && is_multisite() && wp_should_upgrade_global_tables() ) {
3714+
if ( $wp_current_db_version < 60497 && is_multisite() && wp_should_upgrade_global_tables() ) {
37153715

37163716
// Upgrade versions prior to 3.7.
37173717
if ( $wp_current_db_version < 25179 ) {
@@ -3725,6 +3725,20 @@ function pre_schema_upgrade() {
37253725
$wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived varchar(1) NOT NULL default '0'" );
37263726
$wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived tinyint(2) NOT NULL default 0" );
37273727
}
3728+
3729+
// Upgrade versions prior to 6.9
3730+
if ( $wp_current_db_version < 60497 ) {
3731+
// Convert ID columns from signed to unsigned
3732+
$wpdb->query( "ALTER TABLE $wpdb->blogs MODIFY blog_id bigint(20) unsigned NOT NULL auto_increment" );
3733+
$wpdb->query( "ALTER TABLE $wpdb->blogs MODIFY site_id bigint(20) unsigned NOT NULL default 0" );
3734+
$wpdb->query( "ALTER TABLE $wpdb->blogmeta MODIFY blog_id bigint(20) unsigned NOT NULL default 0" );
3735+
$wpdb->query( "ALTER TABLE $wpdb->registration_log MODIFY ID bigint(20) unsigned NOT NULL auto_increment" );
3736+
$wpdb->query( "ALTER TABLE $wpdb->registration_log MODIFY blog_id bigint(20) unsigned NOT NULL default 0" );
3737+
$wpdb->query( "ALTER TABLE $wpdb->site MODIFY id bigint(20) unsigned NOT NULL auto_increment" );
3738+
$wpdb->query( "ALTER TABLE $wpdb->sitemeta MODIFY meta_id bigint(20) unsigned NOT NULL auto_increment" );
3739+
$wpdb->query( "ALTER TABLE $wpdb->sitemeta MODIFY site_id bigint(20) unsigned NOT NULL default 0" );
3740+
$wpdb->query( "ALTER TABLE $wpdb->signups MODIFY signup_id bigint(20) unsigned NOT NULL auto_increment" );
3741+
}
37283742
}
37293743

37303744
// Upgrade versions prior to 4.2.

src/wp-includes/version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*
2424
* @global int $wp_db_version
2525
*/
26-
$wp_db_version = 60421;
26+
$wp_db_version = 60497;
2727

2828
/**
2929
* Holds the TinyMCE version.

0 commit comments

Comments
 (0)