Create rev_deleted column initially. It is used during install
[mediawiki.git] / maintenance / archives / patch-restructure.sql
blobc45e79d3bddc7915e58e7195b89628e5b3dc77aa
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.
4 --
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.)
8 --
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 default '',
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,
24   PRIMARY KEY page_id (page_id),
25   UNIQUE INDEX name_title (page_namespace,page_title),
26   INDEX (page_random)
29 CREATE TABLE /*$wgDBprefix*/revision (
30   rev_id int(8) unsigned NOT NULL auto_increment,
31   rev_page int(8) unsigned NOT NULL,
32   rev_comment tinyblob NOT NULL default '',
33   rev_user int(5) unsigned NOT NULL default '0',
34   rev_user_text varchar(255) binary NOT NULL default '',
35   rev_timestamp char(14) binary NOT NULL default '',
36   rev_minor_edit tinyint(1) unsigned NOT NULL default '0',
37   rev_deleted tinyint(1) unsigned NOT NULL default '0',
39   
40   PRIMARY KEY rev_page_id (rev_page, rev_id),
41   UNIQUE INDEX rev_id (rev_id),
42   INDEX rev_timestamp (rev_timestamp),
43   INDEX page_timestamp (rev_page,rev_timestamp),
44   INDEX user_timestamp (rev_user,rev_timestamp),
45   INDEX usertext_timestamp (rev_user_text,rev_timestamp)
48 -- If creating new 'text' table it would look like this:
50 -- CREATE TABLE /*$wgDBprefix*/text (
51 --   old_id int(8) unsigned NOT NULL auto_increment,
52 --   old_text mediumtext NOT NULL default '',
53 --   old_flags tinyblob NOT NULL default '',
54 --   
55 --   PRIMARY KEY old_id (old_id)
56 -- );
59 -- Lock!
60 LOCK TABLES /*$wgDBprefix*/page WRITE, /*$wgDBprefix*/revision WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur WRITE;
62 -- Save the last old_id value for later
63 SELECT (@maxold:=MAX(old_id)) FROM /*$wgDBprefix*/old;
65 -- First, copy all current entries into the old table.
66 INSERT
67   INTO /*$wgDBprefix*/old
68     (old_namespace,
69     old_title,
70     old_text,
71     old_comment,
72     old_user,
73     old_user_text,
74     old_timestamp,
75     old_minor_edit,
76     old_flags)
77   SELECT
78     cur_namespace,
79     cur_title,
80     cur_text,
81     cur_comment,
82     cur_user,
83     cur_user_text,
84     cur_timestamp,
85     cur_minor_edit,
86     ''
87   FROM /*$wgDBprefix*/cur;
89 -- Now, copy all old data except the text into revisions
90 INSERT
91   INTO /*$wgDBprefix*/revision
92     (rev_id,
93     rev_page,
94     rev_comment,
95     rev_user,
96     rev_user_text,
97     rev_timestamp,
98     rev_minor_edit)
99   SELECT
100     old_id,
101     cur_id,
102     old_comment,
103     old_user,
104     old_user_text,
105     old_timestamp,
106     old_minor_edit
107   FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur
108   WHERE old_namespace=cur_namespace
109     AND old_title=cur_title;
111 -- And, copy the cur data into page
112 INSERT
113   INTO /*$wgDBprefix*/page
114     (page_id,
115     page_namespace,
116     page_title,
117     page_restrictions,
118     page_counter,
119     page_is_redirect,
120     page_is_new,
121     page_random,
122     page_touched,
123     page_latest)
124   SELECT
125     cur_id,
126     cur_namespace,
127     cur_title,
128     cur_restrictions,
129     cur_counter,
130     cur_is_redirect,
131     cur_is_new,
132     cur_random,
133     cur_touched,
134     rev_id
135   FROM /*$wgDBprefix*/cur,/*$wgDBprefix*/revision
136   WHERE cur_id=rev_page
137     AND rev_timestamp=cur_timestamp
138     AND rev_id > @maxold;
140 UNLOCK TABLES;
142 -- Keep the old table around as the text store.
143 -- Its extra fields will be ignored, but trimming them is slow
144 -- so we won't bother doing it for now.
145 ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text;