1 -- The Great Restructuring of October 2004
2 -- Creates 'page', 'revision' tables and transforms the classic
3 -- cur+old into a separate page+revision+text structure.
5 -- The pre-conversion 'old' table is renamed to 'text' and used
6 -- without internal restructuring to avoid rebuilding the entire
7 -- table. (This can be done separately if desired.)
9 -- The pre-conversion 'cur' table is now redundant and can be
10 -- discarded when done.
12 CREATE TABLE /*$wgDBprefix*/page (
13 page_id
int(8) unsigned
NOT NULL auto_increment
,
14 page_namespace tinyint
NOT NULL,
15 page_title
varchar(255) binary NOT NULL,
16 page_restrictions tinyblob
NOT NULL,
17 page_counter
bigint(20) unsigned
NOT NULL default '0',
18 page_is_redirect
tinyint(1) unsigned
NOT NULL default '0',
19 page_is_new
tinyint(1) unsigned
NOT NULL default '0',
20 page_random
real unsigned
NOT NULL,
21 page_touched
char(14) binary NOT NULL default '',
22 page_latest
int(8) unsigned
NOT NULL,
23 page_len
int(8) unsigned
NOT NULL,
25 PRIMARY KEY page_id (page_id
),
26 UNIQUE INDEX name_title (page_namespace
,page_title
),
31 CREATE TABLE /*$wgDBprefix*/revision (
32 rev_id
int(8) unsigned
NOT NULL auto_increment
,
33 rev_page
int(8) unsigned
NOT NULL,
34 rev_comment tinyblob
NOT NULL,
35 rev_user
int(5) unsigned
NOT NULL default '0',
36 rev_user_text
varchar(255) binary NOT NULL default '',
37 rev_timestamp
char(14) binary NOT NULL default '',
38 rev_minor_edit
tinyint(1) unsigned
NOT NULL default '0',
39 rev_deleted
tinyint(1) unsigned
NOT NULL default '0',
42 PRIMARY KEY rev_page_id (rev_page
, rev_id
),
43 UNIQUE INDEX rev_id (rev_id
),
44 INDEX rev_timestamp (rev_timestamp
),
45 INDEX page_timestamp (rev_page
,rev_timestamp
),
46 INDEX user_timestamp (rev_user
,rev_timestamp
),
47 INDEX usertext_timestamp (rev_user_text
,rev_timestamp
)
50 -- If creating new 'text' table it would look like this:
52 -- CREATE TABLE /*$wgDBprefix*/text (
53 -- old_id int(8) unsigned NOT NULL auto_increment,
54 -- old_text mediumtext NOT NULL,
55 -- old_flags tinyblob NOT NULL,
57 -- PRIMARY KEY old_id (old_id)
62 LOCK TABLES /*$wgDBprefix*/page
WRITE, /*$wgDBprefix*/revision
WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur
WRITE;
64 -- Save the last old_id value for later
65 SELECT (@maxold
:=MAX(old_id
)) FROM /*$wgDBprefix*/old;
67 -- First, copy all current entries into the old table.
69 INTO /*$wgDBprefix*/old
89 FROM /*$wgDBprefix*/cur
;
91 -- Now, copy all old data except the text into revisions
93 INTO /*$wgDBprefix*/revision
109 FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur
110 WHERE old_namespace
=cur_namespace
111 AND old_title
=cur_title
;
113 -- And, copy the cur data into page
115 INTO /*$wgDBprefix*/page
137 FROM /*$wgDBprefix*/cur
,/*$wgDBprefix*/revision
138 WHERE cur_id
=rev_page
139 AND rev_timestamp
=cur_timestamp
140 AND rev_id
> @maxold
;
144 -- Keep the old table around as the text store.
145 -- Its extra fields will be ignored, but trimming them is slow
146 -- so we won't bother doing it for now.
147 ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text;