/* Main components 1. one snapshot schema definition (e.g. V2); 2. version create time (e.g. V1 at T1, V2 at T2, V3 at T3, V4 at T4); 3. smo definition (e.g. (2,1), (2,3), (2,4)); 4. input query on Vi (SQL with <, <=, >, >=); 5. commands */ //Details //1. snapshot schema definition (transaction time db) WIKIPEDIA VERSION: 1284 Schema V(1) := { user(user_id, user_name, user_rights, user_password, user_newpassword, user_email, user_options,user_touched); user_newtalk(user_id, user_ip); cur(cur_id, cur_namespace, cur_title, cur_text, cur_comment, cur_user, cur_user_text, cur_timestamp, cur_restrictions, cur_counter, cur_is_redirect, cur_minor_edit, cur_is_new, cur_random, cur_touched, inverse_timestamp); old(old_id, old_namespace, old_title, old_text, old_comment, old_user, old_user_text, old_timestamp, old_minor_edit, old_flags, inverse_timestamp); archive(ar_namespace, ar_title, ar_text, ar_comment, ar_user, ar_user_text, ar_timestamp, ar_minor_edit, ar_flags); links(l_from, l_to); brokenlinks(bl_from, bl_to); imagelinks(il_from, il_to); site_stats(ss_row_id, ss_total_views, ss_total_edits, ss_good_articles); ipblocks(ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp); image(img_name, img_size, img_description, img_user, img_user_text, img_timestamp); oldimage(oi_name, oi_archive_name, oi_size, oi_description, oi_user, oi_user_text, oi_timestamp); random(ra_current, ra_title); recentchanges(rc_timestamp, rc_cur_time, rc_user , rc_user_text, rc_namespace , rc_title, rc_comment, rc_minor , rc_bot , rc_new , rc_cur_id , rc_this_oldid , rc_last_oldid); watchlist(wl_user, wl_namespace, wl_title); math( math_inputhash, math_outputhash, math_html_conservativeness, math_html, math_mathml); searchindex(si_page, si_title, si_text); }; //2. version create time (optional, used for optimization); Versionstarttime V(1) := "2003-04-14"; Versionstarttime V(2) := "2003-05-02"; Versionstarttime V(3) := "2003-05-06"; Versionstarttime V(4) := "2003-08-21"; Versionstarttime V(5) := "2003-09-07"; Versionstarttime V(6) := "2003-09-21"; Versionstarttime V(7) := "2003-11-08"; Versionstarttime V(8) := "2003-12-13"; Versionstarttime V(9) := "2004-01-17"; Versionstarttime V(10) := "2004-02-14"; Versionstarttime V(11) := "2004-02-21"; Versionstarttime V(12) := "2004-03-10"; Versionstarttime V(13) := "2004-03-11"; Versionstarttime V(14) := "2004-03-24"; Versionstarttime V(15) := "2004-04-18"; Versionstarttime V(16) := "2004-05-09"; Versionstarttime V(17) := "2004-05-09"; Versionstarttime V(18) := "2004-05-15"; Versionstarttime V(19) := "2004-05-19"; Versionstarttime V(20) := "2004-06-14"; Versionstarttime V(21) := "2004-06-15"; Versionstarttime V(22) := "2004-06-21"; Versionstarttime V(23) := "2004-07-18"; Versionstarttime V(24) := "2004-07-18"; Versionstarttime V(25) := "2004-07-19"; Versionstarttime V(26) := "2004-08-07"; Versionstarttime V(27) := "2004-08-07"; Versionstarttime V(28) := "2004-08-09"; Versionstarttime V(29) := "2004-08-24"; Versionstarttime V(30) := "2004-08-24"; Versionstarttime V(31) := "2004-09-11"; Versionstarttime V(32) := "2004-09-26"; Versionstarttime V(33) := "2004-09-26"; Versionstarttime V(34) := "2004-09-26"; Versionstarttime V(35) := "2004-10-02"; Versionstarttime V(36) := "2004-10-24"; Versionstarttime V(37) := "2004-10-24"; Versionstarttime V(38) := "2004-10-24"; Versionstarttime V(39) := "2004-10-24"; Versionstarttime V(40) := "2004-12-01"; Versionstarttime V(41) := "2004-12-18"; Versionstarttime V(42) := "2004-12-19"; Versionstarttime V(43) := "2005-01-14"; Versionstarttime V(44) := "2005-02-18"; Versionstarttime V(45) := "2005-02-21"; Versionstarttime V(46) := "2005-03-12"; Versionstarttime V(47) := "2005-03-12"; Versionstarttime V(48) := "2005-03-19"; Versionstarttime V(49) := "2005-03-28"; Versionstarttime V(50) := "2005-03-31"; Versionstarttime V(51) := "2005-04-10"; Versionstarttime V(52) := "2005-04-21"; Versionstarttime V(53) := "2005-04-26"; Versionstarttime V(54) := "2005-05-01"; Versionstarttime V(55) := "2005-05-02"; Versionstarttime V(56) := "2005-05-02"; Versionstarttime V(57) := "2005-05-02"; Versionstarttime V(58) := "2005-05-02"; Versionstarttime V(59) := "2005-05-03"; Versionstarttime V(60) := "2005-05-15"; Versionstarttime V(61) := "2005-05-21"; Versionstarttime V(62) := "2005-05-26"; Versionstarttime V(63) := "2005-05-30"; Versionstarttime V(64) := "2005-05-31"; Versionstarttime V(65) := "2005-06-05"; Versionstarttime V(66) := "2005-06-09"; Versionstarttime V(67) := "2005-06-12"; Versionstarttime V(68) := "2005-06-19"; Versionstarttime V(69) := "2005-06-19"; Versionstarttime V(70) := "2005-06-20"; Versionstarttime V(71) := "2005-06-25"; Versionstarttime V(72) := "2005-06-25"; Versionstarttime V(73) := "2005-07-05"; Versionstarttime V(74) := "2005-07-07"; Versionstarttime V(75) := "2005-07-23"; Versionstarttime V(76) := "2005-07-23"; Versionstarttime V(77) := "2005-08-13"; Versionstarttime V(78) := "2005-08-17"; Versionstarttime V(79) := "2005-09-13"; Versionstarttime V(80) := "2005-10-14"; Versionstarttime V(81) := "2005-10-14"; Versionstarttime V(82) := "2005-11-12"; Versionstarttime V(83) := "2005-12-01"; Versionstarttime V(84) := "2005-12-01"; Versionstarttime V(85) := "2005-12-22"; Versionstarttime V(86) := "2005-12-22"; Versionstarttime V(87) := "2005-12-30"; Versionstarttime V(88) := "2006-01-26"; Versionstarttime V(89) := "2006-01-31"; Versionstarttime V(90) := "2006-02-11"; Versionstarttime V(91) := "2006-02-24"; Versionstarttime V(92) := "2006-03-12"; Versionstarttime V(93) := "2006-03-28"; Versionstarttime V(94) := "2006-04-08"; Versionstarttime V(95) := "2006-04-11"; Versionstarttime V(96) := "2006-04-17"; Versionstarttime V(97) := "2006-04-17"; Versionstarttime V(98) := "2006-06-16"; Versionstarttime V(99) := "2006-06-21"; Versionstarttime V(100) := "2006-06-27"; Versionstarttime V(101) := "2006-06-27"; Versionstarttime V(102) := "2006-06-29"; Versionstarttime V(103) := "2006-07-09"; Versionstarttime V(104) := "2006-07-10"; Versionstarttime V(105) := "2006-07-10"; Versionstarttime V(106) := "2006-07-11"; Versionstarttime V(107) := "2006-07-22"; Versionstarttime V(108) := "2006-07-22"; Versionstarttime V(109) := "2006-09-15"; Versionstarttime V(110) := "2006-09-15"; Versionstarttime V(111) := "2006-10-23"; Versionstarttime V(112) := "2006-10-25"; Versionstarttime V(113) := "2006-10-25"; Versionstarttime V(114) := "2006-11-01"; Versionstarttime V(115) := "2006-11-01"; Versionstarttime V(116) := "2006-11-01"; Versionstarttime V(117) := "2006-11-08"; Versionstarttime V(118) := "2006-11-11"; Versionstarttime V(119) := "2006-11-22"; Versionstarttime V(120) := "2006-11-22"; Versionstarttime V(121) := "2006-11-28"; Versionstarttime V(122) := "2006-11-28"; Versionstarttime V(123) := "2006-12-09"; Versionstarttime V(124) := "2006-12-14"; Versionstarttime V(125) := "2006-12-14"; Versionstarttime V(126) := "2006-12-21"; Versionstarttime V(127) := "2006-12-21"; Versionstarttime V(128) := "2007-01-10"; Versionstarttime V(129) := "2007-01-11"; Versionstarttime V(130) := "2007-01-22"; Versionstarttime V(131) := "2007-02-01"; Versionstarttime V(132) := "2007-02-05"; Versionstarttime V(133) := "2007-02-09"; Versionstarttime V(134) := "2007-02-09"; Versionstarttime V(135) := "2007-02-25"; Versionstarttime V(136) := "2007-03-08"; Versionstarttime V(137) := "2007-03-09"; Versionstarttime V(138) := "2007-03-13"; Versionstarttime V(139) := "2007-03-14"; Versionstarttime V(140) := "2007-03-14"; Versionstarttime V(141) := "2007-03-17"; Versionstarttime V(142) := "2007-04-22"; Versionstarttime V(143) := "2007-05-07"; Versionstarttime V(144) := "2007-05-07"; Versionstarttime V(145) := "2007-05-07"; Versionstarttime V(146) := "2007-05-31"; Versionstarttime V(147) := "2007-06-07"; Versionstarttime V(148) := "2007-06-16"; Versionstarttime V(149) := "2007-06-22"; Versionstarttime V(150) := "2007-06-22"; Versionstarttime V(151) := "2007-06-22"; Versionstarttime V(152) := "2007-06-23"; Versionstarttime V(153) := "2007-07-09"; Versionstarttime V(154) := "2007-07-09"; Versionstarttime V(155) := "2007-07-22"; Versionstarttime V(156) := "2007-07-22"; Versionstarttime V(157) := "2007-07-23"; Versionstarttime V(158) := "2007-07-30"; Versionstarttime V(159) := "2007-07-30"; Versionstarttime V(160) := "2007-07-31"; Versionstarttime V(161) := "2007-08-06"; Versionstarttime V(162) := "2007-08-06"; Versionstarttime V(163) := "2007-08-09"; Versionstarttime V(164) := "2007-08-11"; Versionstarttime V(165) := "2007-08-27"; Versionstarttime V(166) := "2007-08-27"; Versionstarttime V(167) := "2007-08-29"; Versionstarttime V(168) := "2007-08-29"; Versionstarttime V(169) := "2007-09-05"; Versionstarttime V(170) := "2007-09-07"; Versionstarttime V(171) := "2007-09-07"; //3. smo definition: Smo V(1,2) :={ NOP; }; Smo V(2,3) :={ DROP TABLE random; }; Smo V(3,4) := { CREATE TABLE interwiki(iw_prefix, iw_url, iw_local); }; Smo V(4,5) := { ADD COLUMN ipb_id AS autoincrement() INTO ipblocks; ADD COLUMN ipb_auto AS "0" INTO ipblocks; }; Smo V(5,6) := { NOP; }; Smo V(6,7) := { CREATE TABLE linkscc(lcc_pageid, lcc_title, lcc_cacheobj); }; Smo V(7,8) := { //CREATE TABLE hitcounter(hitcounter); CREATE TABLE hitcounter(hc_id); }; Smo V(8,9) := { ADD COLUMN rc_type AS "0" INTO recentchanges; ADD COLUMN rc_moved_to_ns AS "0" INTO recentchanges; ADD COLUMN rc_moved_to_title AS "" INTO recentchanges; }; Smo V(9,10) := { ADD COLUMN ipb_expiry AS "" INTO ipblocks; }; Smo V(10,11) := { NOP; }; Smo V(11,12) := { NOP; }; Smo V(12,13) := { DROP COLUMN lcc_title FROM linkscc; }; Smo V(13,14) := { NOP; }; Smo V(14,15) := { ADD COLUMN user_real_name AS "" INTO user; }; Smo V(15,16) := { CREATE TABLE querycache(qc_type, qc_value, qc_namespace, qc_title); }; Smo V(16,17) := { CREATE TABLE objectcache(keyname, value, exptime); }; Smo V(17,18) := { CREATE TABLE categorylinks(cl_from, cl_to, cl_sortkey, cl_timestamp); }; Smo V(18,19) := { NOP; }; Smo V(19,20) := { ADD COLUMN rc_ip AS "" INTO recentchanges; }; Smo V(20,21) := { CREATE TABLE blobs(blob_index, blob_data); }; Smo V(21,22) := { NOP; }; Smo V(22,23) := { NOP; }; Smo V(23,24) := { CREATE TABLE validate(val_user, val_title, val_timestamp, val_type, val_value); }; Smo V(24,25) := { ADD COLUMN val_comment AS "" INTO validate; }; Smo V(25,26) := { ADD COLUMN rc_id AS autoincrement() INTO recentchanges; }; Smo V(26,27) := { NOP; }; Smo V(27,28) := { ADD COLUMN rc_patrolled AS "0" INTO recentchanges; }; Smo V(28,29) := { CREATE TABLE logging(log_type, log_user, log_action, log_timestamp, log_namespace, log_title, log_comment); }; Smo V(29,30) := { CREATE TABLE user_rights; COPY COLUMN user_id FROM user INTO user_rights; //MOVE COLUMN user_rights FROM user INTO user_rights WHERE user.user_id = user_rights.user_id; COPY COLUMN user_rights FROM user INTO user_rights WHERE user.user_id = user_rights.user_id; DROP COLUMN user_rights FROM user; }; Smo V(30,31) := { NOP; }; Smo V(31,32) := { ADD COLUMN user_token AS "" INTO user; }; Smo V(32,33) := { ADD COLUMN old_articleid AS function32(old_namespace,old_title) INTO old; DROP COLUMN old_namespace FROM old; DROP COLUMN old_title FROM old; }; Smo V(33,34) := { ADD COLUMN old_namespace AS function33a(old_articleid) INTO old; ADD COLUMN old_title AS function33b(old_articleid) INTO old; DROP COLUMN old_articleid FROM old; }; Smo V(34,35) := { CREATE TABLE group(group_id, group_name, group_description); CREATE TABLE user_groups(user_id, group_id); }; Smo V(35,36) := { RENAME COLUMN user_id IN user_rights TO ur_id; RENAME COLUMN user_rights IN user_rights TO ur_rights; RENAME COLUMN user_id IN user_groups TO ug_uid; RENAME COLUMN group_id IN user_groups TO ug_gid; }; Smo V(36,37) := { RENAME COLUMN ur_id IN user_rights TO ur_user; RENAME COLUMN ug_uid IN user_groups TO ug_user; RENAME COLUMN ug_gid IN user_groups TO ug_group; }; Smo V(37,38) := { NOP; }; Smo V(38,39) := { ADD COLUMN group_rights INTO group; }; Smo V(39,40) := { NOP; }; Smo V(40,41) := { DROP TABLE user_newtalk; ADD COLUMN user_emailauthenticationtimestamp AS "0" INTO user; ADD COLUMN wl_notificationtimestamp AS "0" INTO watchlist; }; Smo V(41,42) := { // create temporary cur_page COPY TABLE cur INTO cur_page; //drop unneeded colums DROP COLUMN cur_text FROM cur_page; DROP COLUMN cur_comment FROM cur_page; DROP COLUMN cur_user FROM cur_page; DROP COLUMN cur_user_text FROM cur_page; DROP COLUMN cur_timestamp FROM cur_page; DROP COLUMN inverse_timestamp FROM cur_page; //rename, prepare to merge RENAME COLUMN cur_namespace IN cur_page TO page_namespace; RENAME COLUMN cur_title IN cur_page TO page_title; RENAME COLUMN cur_restrictions IN cur_page TO page_restrictions; RENAME COLUMN cur_counter IN cur_page TO page_counter; RENAME COLUMN cur_is_redirect IN cur_page TO page_is_redirect; RENAME COLUMN cur_is_new IN cur_page TO page_is_new; RENAME COLUMN cur_random IN cur_page TO page_random; RENAME COLUMN cur_touched IN cur_page TO page_touched; RENAME COLUMN cur_id IN cur_page TO page_latest; //add missing ADD COLUMN page_id AS function41a(page_namespace, page_title) INTO cur_page; COPY TABLE cur INTO cur_revision; DROP COLUMN cur_namespace FROM cur_revision; DROP COLUMN cur_title FROM cur_revision; DROP COLUMN cur_text FROM cur_revision; DROP COLUMN cur_restrictions FROM cur_revision; DROP COLUMN cur_counter FROM cur_revision; DROP COLUMN cur_is_redirect FROM cur_revision; DROP COLUMN cur_is_new FROM cur_revision; DROP COLUMN cur_random FROM cur_revision; DROP COLUMN cur_touched FROM cur_revision; RENAME COLUMN cur_id IN cur_revision TO rev_id; ADD COLUMN rev_page AS function41b(rev_id) INTO cur_revision; RENAME COLUMN cur_comment IN cur_revision TO rev_comment; RENAME COLUMN cur_user IN cur_revision TO rev_user; RENAME COLUMN cur_user_text IN cur_revision TO rev_user_text; RENAME COLUMN cur_timestamp IN cur_revision TO rev_timestamp; RENAME COLUMN cur_minor_edit IN cur_revision TO rev_minor_edit; RENAME TABLE cur INTO cur_text; DROP COLUMN cur_namespace FROM cur_text; DROP COLUMN cur_title FROM cur_text; DROP COLUMN cur_comment FROM cur_text; DROP COLUMN cur_user FROM cur_text; DROP COLUMN cur_user_text FROM cur_text; DROP COLUMN cur_timestamp FROM cur_text; DROP COLUMN cur_restrictions FROM cur_text; DROP COLUMN cur_counter FROM cur_text; DROP COLUMN cur_is_redirect FROM cur_text; DROP COLUMN cur_minor_edit FROM cur_text; DROP COLUMN cur_is_new FROM cur_text; DROP COLUMN cur_random FROM cur_text; DROP COLUMN cur_touched FROM cur_text; DROP COLUMN inverse_timestamp FROM cur_text; RENAME COLUMN cur_id IN cur_text TO old_id; RENAME COLUMN cur_text IN cur_text TO old_text; ADD COLUMN old_flags AS "" INTO cur_text; DROP COLUMN cur_minor_edit FROM cur_page; COPY TABLE old INTO old_page; DROP COLUMN old_text FROM old_page; DROP COLUMN old_comment FROM old_page; DROP COLUMN old_user FROM old_page; DROP COLUMN old_user_text FROM old_page; DROP COLUMN old_timestamp FROM old_page; DROP COLUMN inverse_timestamp FROM old_page; DROP COLUMN old_minor_edit FROM old_page; DROP COLUMN old_id FROM old_page; DROP COLUMN old_flags FROM old_page; RENAME COLUMN old_namespace IN old_page TO page_namespace; RENAME COLUMN old_title IN old_page TO page_title; ADD COLUMN page_id AS function41c(page_namespace, page_title) INTO old_page; ADD COLUMN page_restrictions INTO old_page; ADD COLUMN page_counter INTO old_page; ADD COLUMN page_is_redirect INTO old_page; ADD COLUMN page_is_new INTO old_page; ADD COLUMN page_touched INTO old_page; ADD COLUMN page_latest INTO old_page; ADD COLUMN page_random AS random(page_id) INTO old_page; COPY TABLE old INTO old_revision; ADD COLUMN rev_page AS function41d(old_namespace,old_title) INTO old_revision; DROP COLUMN old_namespace FROM old_revision; DROP COLUMN old_title FROM old_revision; DROP COLUMN old_text FROM old_revision; DROP COLUMN old_flags FROM old_revision; RENAME COLUMN old_id IN old_revision TO rev_id; RENAME COLUMN old_comment IN old_revision TO rev_comment; RENAME COLUMN old_user IN old_revision TO rev_user; RENAME COLUMN old_user_text IN old_revision TO rev_user_text; RENAME COLUMN old_timestamp IN old_revision TO rev_timestamp; RENAME COLUMN old_minor_edit IN old_revision TO rev_minor_edit; RENAME TABLE old INTO old_text; DROP COLUMN old_namespace FROM old_text; DROP COLUMN old_title FROM old_text; DROP COLUMN old_comment FROM old_text; DROP COLUMN old_user FROM old_text; DROP COLUMN old_user_text FROM old_text; DROP COLUMN old_timestamp FROM old_text; DROP COLUMN inverse_timestamp FROM old_text; MERGE TABLE cur_text, old_text INTO text; MERGE TABLE cur_page, old_page INTO page; //DROP TABLE cur_page; //RENAME TABLE old_page into page; MERGE TABLE cur_revision, old_revision INTO revision; }; Smo V(42,43) := { ADD COLUMN log_params AS "" INTO logging; }; Smo V(43,44) := { NOP; }; Smo V(44,45) := { DROP COLUMN inverse_timestamp FROM revision; }; Smo V(45,46) := { ADD COLUMN ar_rev_id INTO archive; }; Smo V(46,47) := { ADD COLUMN page_len INTO page; }; Smo V(47,48) := { ADD COLUMN val_page AS "0" INTO validate; ADD COLUMN val_revision AS "0" INTO validate; DROP COLUMN val_title FROM validate; DROP COLUMN val_timestamp FROM validate; }; Smo V(48,49) := { ADD COLUMN rev_text_id AS function48(rev_id) INTO revision; }; Smo V(49,50) := { ADD COLUMN rev_deleted AS "0" INTO revision; }; Smo V(50,51) := { ADD COLUMN img_width AS "0" INTO image; ADD COLUMN img_height AS "0" INTO image; ADD COLUMN img_bits AS "0" INTO image; ADD COLUMN img_type AS "0" INTO image; ADD COLUMN oi_width AS "0" INTO oldimage; ADD COLUMN oi_height AS "0" INTO oldimage; ADD COLUMN oi_bits AS "0" INTO oldimage; ADD COLUMN oi_type AS "0" INTO oldimage; }; Smo V(51,52) := { ADD COLUMN img_metadata AS "0" INTO image; }; Smo V(52,53) := { ADD COLUMN user_email_authenticated AS "0" INTO user; ADD COLUMN user_email_token AS "0" INTO user; ADD COLUMN user_email_token_expires AS "0" INTO user; }; Smo V(53,54) := { ADD COLUMN ar_text_id INTO archive; }; Smo V(54,55) := { DROP COLUMN user_emailauthenticationtimestamp FROM user; }; Smo V(55,56) := { DROP TABLE blobs; }; Smo V(56,57) := { NOP; }; Smo V(57,58) := { NOP; }; Smo V(58,59) := { NOP; }; Smo V(59,60) := { RENAME TABLE group INTO groups; RENAME COLUMN group_id IN groups TO gr_id; RENAME COLUMN group_name IN groups TO gr_name; RENAME COLUMN group_description IN groups TO gr_description; RENAME COLUMN group_rights IN groups TO gr_rights; }; Smo V(60,61) := { RENAME COLUMN img_type IN image TO img_media_type; ADD COLUMN img_major_mime AS "unknown" INTO image; ADD COLUMN img_minor_mime AS "unknown" INTO image; DROP COLUMN oi_type FROM oldimage; }; Smo V(61,62) := { COPY TABLE links INTO templinks; COPY TABLE brokenlinks INTO tempbrokenlinks; COPY COLUMN page_namespace FROM page INTO templinks WHERE templinks.l_to = page.page_id; COPY COLUMN page_title FROM page INTO templinks WHERE templinks.l_to = page.page_id; DROP COLUMN l_to FROM templinks; ADD COLUMN page_namespace AS function61a(bl_from) INTO tempbrokenlinks; ADD COLUMN page_title AS function61b(bl_from) INTO tempbrokenlinks; RENAME COLUMN bl_from IN tempbrokenlinks TO pl_from; RENAME COLUMN l_from IN templinks TO pl_from; MERGE TABLE templinks, tempbrokenlinks INTO pagelinks; RENAME COLUMN page_namespace IN pagelinks TO pl_namespace; RENAME COLUMN page_title IN pagelinks TO pl_title; }; Smo V(62,63) := { DROP TABLE links; DROP TABLE brokenlinks; }; Smo V(63,64) := { DROP TABLE linkscc; }; Smo V(64,65) := { NOP; }; Smo V(65,66) := { COPY COLUMN gr_name FROM groups INTO user_groups WHERE user_groups.ug_group = groups.gr_id; DROP COLUMN ug_group FROM user_groups; RENAME COLUMN gr_name IN user_groups TO ug_group; DROP TABLE user_rights; DROP TABLE groups; }; Smo V(66,67) := { NOP; }; Smo V(67,68) := { //FIXME //ADD COLUMN ss_total_pages AS function67a(page_id) INTO site_stats; //ADD COLUMN ss_users AS function67b(user_id) INTO site_stats; ADD COLUMN ss_total_pages AS function67a() INTO site_stats; ADD COLUMN ss_users AS function67b() INTO site_stats; ADD COLUMN ss_admins AS "-1" INTO site_stats; }; Smo V(68,69) := { NOP; }; Smo V(69,70) := { ADD COLUMN val_ip AS "" INTO validate; }; Smo V(70,71) := { NOP; }; Smo V(71,72) := { CREATE TABLE user_newtalk(user_id, user_ip); }; Smo V(72,73) := { ADD COLUMN iw_trans AS "0" INTO interwiki; }; Smo V(73,74) := { NOP; }; Smo V(74,75) := { CREATE TABLE trackbacks(tb_id, tb_title, tb_url, tb_ex, tb_name); }; Smo V(75,76) := { ADD COLUMN tb_page INTO trackbacks; }; Smo V(76,77) := { NOP; }; Smo V(77,78) := { NOP; }; Smo V(78,79) := { NOP; }; Smo V(79,80) := { NOP; }; Smo V(80,81) := { NOP; }; Smo V(81,82) := { NOP; }; Smo V(82,83) := { ADD COLUMN ipb_range_start AS "" INTO ipblocks; ADD COLUMN ipb_range_end AS "" INTO ipblocks; }; Smo V(83,84) := { ADD COLUMN user_registration INTO user; }; Smo V(84,85) := { NOP; }; Smo V(85,86) := { NOP; }; Smo V(86,87) := { CREATE TABLE templatelinks(tl_from, tl_namespace, tl_title); }; Smo V(87,88) := { CREATE TABLE externallinks(el_from, el_to, el_index); }; Smo V(88,89) := { CREATE TABLE transcache(tc_url, tc_contents, tc_time); }; Smo V(89,90) := { CREATE TABLE job(job_id, job_cmd, job_namespace, job_title, job_params); }; Smo V(90,91) := { NOP; }; Smo V(91,92) := { NOP; }; Smo V(92,93) := { //FIXME //ADD COLUMN ss_images AS function92(image_id) INTO site_stats; ADD COLUMN ss_images AS function92() INTO site_stats; }; Smo V(93,94) := { NOP; }; Smo V(94,95) := { CREATE TABLE langlinks(ll_from, ll_lang, ll_title); }; Smo V(95,96) := { CREATE TABLE querycache_info(qci_type, qci_timestamp); }; Smo V(96,97) := { NOP; }; Smo V(97,98) := { CREATE TABLE filearchive(fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key, fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size, fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime, fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp); }; Smo V(98,99) := { DROP TABLE validate; }; Smo V(99,100) := { NOP; }; Smo V(100,101) := { NOP; }; Smo V(101,102) := { NOP; }; Smo V(102,103) := { NOP; }; Smo V(103,104) := { ADD COLUMN ipb_anon_only AS "0" INTO ipblocks; ADD COLUMN ipb_create_account AS "1" INTO ipblocks; }; Smo V(104,105) := { NOP; }; Smo V(105,106) := { NOP; }; Smo V(106,107) := { NOP; }; Smo V(107,108) := { NOP; }; Smo V(108,109) := { ADD COLUMN page_no_title_convert AS "0" INTO page; }; Smo V(109,110) := { DROP COLUMN page_no_title_convert FROM page; }; Smo V(110,111) := { ADD COLUMN user_newpass_time INTO user; }; Smo V(111,112) := { CREATE TABLE redirect(rd_from, rd_namespace, rd_title); }; Smo V(112,113) := { //CREATE TABLE querycachetwo(qcc_type, qcc_value, qcc_namespace, qcc_title, qcc_namespacetwo, qcc_titletwo); CREATE TABLE querycachetwo(qcc_type, qcc_value, qcc_namespace, qcc_title, qcc_namespace2, qcc_title2); }; Smo V(113,114) := { ADD COLUMN ipb_enable_autoblock AS "1" INTO ipblocks; }; Smo V(114,115) := { DROP COLUMN ipb_enable_autoblock FROM ipblocks; }; Smo V(115,116) := { ADD COLUMN ipb_enable_autoblock AS "1" INTO ipblocks; }; Smo V(116,117) := { NOP; }; Smo V(117,118) := { NOP; }; Smo V(118,119) := { NOP; }; Smo V(119,120) := { NOP; }; Smo V(120,121) := { NOP; }; Smo V(121,122) := { NOP; }; Smo V(122,123) := { ADD COLUMN rc_old_len AS "0" INTO recentchanges; ADD COLUMN rc_new_len AS "0" INTO recentchanges; }; Smo V(123,124) := { ADD COLUMN user_editcount INTO user; }; Smo V(124,125) := { NOP; }; Smo V(125,126) := { NOP; }; Smo V(126,127) := { NOP; }; Smo V(127,128) := { CREATE TABLE page_restrictions(pr_page, pr_type, pr_level, pr_cascade, pr_user, pr_expiry); }; Smo V(128,129) := { NOP; }; Smo V(129,130) := { NOP; }; Smo V(130,131) := { ADD COLUMN log_id AS auto_increment() INTO logging; ADD COLUMN pr_id AS auto_increment() INTO page_restrictions; }; Smo V(131,132) := { NOP; }; Smo V(132,133) := { ADD COLUMN rev_parent_id INTO revision; }; Smo V(133,134) := { DROP COLUMN rev_parent_id FROM revision; }; Smo V(134,135) := { NOP; }; Smo V(135,136) := { ADD COLUMN rev_len INTO revision; }; Smo V(136,137) := { ADD COLUMN rev_parent_id AS null INTO revision; }; Smo V(137,138) := { NOP; }; Smo V(138,139) := { ADD COLUMN ar_deleted AS "0" INTO archive; ADD COLUMN ipb_deleted AS "0" INTO ipblocks; ADD COLUMN fa_deleted AS "0" INTO filearchive; ADD COLUMN rc_deletec AS "0" INTO recentchanges; ADD COLUMN rc_logid AS "0" INTO recentchanges; //ADD COLUMN rc_logtype AS "0" INTO recentchanges; //ADD COLUMN rc_logaction AS null INTO recentchanges; ADD COLUMN rc_log_type AS "0" INTO recentchanges; ADD COLUMN rc_log_action AS null INTO recentchanges; ADD COLUMN rc_params AS null INTO recentchanges; ADD COLUMN log_deleted AS null INTO logging; }; Smo V(139,140) := { ADD COLUMN ar_len INTO archive; }; Smo V(140,141) := { NOP; }; Smo V(141,142) := { NOP; }; Smo V(142,143) := { ADD COLUMN oi_metadata INTO oldimage; ADD COLUMN oi_media_type AS null INTO oldimage; ADD COLUMN oi_major_mime AS "unknown" INTO oldimage; ADD COLUMN oi_minor_mime AS "unknown" INTO oldimage; ADD COLUMN oi_deleted AS "0" INTO oldimage; }; Smo V(143,144) := { DROP COLUMN oi_metadata FROM oldimage; DROP COLUMN oi_media_type FROM oldimage; DROP COLUMN oi_major_mime FROM oldimage; DROP COLUMN oi_minor_mime FROM oldimage; DROP COLUMN oi_deleted FROM oldimage; }; Smo V(144,145) := { NOP; }; Smo V(145,146) := { ADD COLUMN oi_metadata INTO oldimage; ADD COLUMN oi_media_type AS null INTO oldimage; ADD COLUMN oi_major_mime AS "unknown" INTO oldimage; ADD COLUMN oi_minor_mime AS "unknown" INTO oldimage; ADD COLUMN oi_deleted AS "0" INTO oldimage; }; Smo V(146,147) := { ADD COLUMN ipb_block_email AS "0" INTO ipblocks; }; Smo V(147,148) := { NOP; }; Smo V(148,149) := { NOP; }; Smo V(149,150) := { NOP; }; Smo V(150,151) := { NOP; }; Smo V(151,152) := { NOP; }; Smo V(152,153) := { NOP; }; Smo V(153,154) := { NOP; }; Smo V(154,155) := { ADD COLUMN img_sha1 AS sha1() INTO image; ADD COLUMN oi_sha1 AS sha1() INTO oldimage; }; Smo V(155,156) := { NOP; }; Smo V(156,157) := { ADD COLUMN ar_page INTO archive; }; Smo V(157,158) := { ADD COLUMN page_key AS uppercase(page_title) INTO page; }; Smo V(158,159) := { NOP; }; Smo V(159,160) := { DROP COLUMN page_key FROM page; }; Smo V(160,161) := { NOP; }; Smo V(161,162) := { NOP; }; Smo V(162,163) := { NOP; }; Smo V(163,164) := { RENAME COLUMN ar_page IN archive TO ar_page_id; }; Smo V(164,165) := { NOP; }; Smo V(165,166) := { NOP; }; Smo V(166,167) := { NOP; }; Smo V(167,168) := { NOP; }; Smo V(168,169) := { NOP; }; Smo V(169,170) := { ADD COLUMN rev_bot AS "0" INTO revision; }; Smo V(170,171) := { DROP COLUMN rev_bot FROM revision; };