From 183851b06bd6c52f3cae5375f433da720d410447 Mon Sep 17 00:00:00 2001
From: Pierre Schmitz <pierre@archlinux.de>
Date: Wed, 11 Oct 2006 18:12:39 +0000
Subject: MediaWiki 1.7.1 wiederhergestellt

---
 maintenance/archives/patch-restructure.sql | 147 +++++++++++++++++++++++++++++
 1 file changed, 147 insertions(+)
 create mode 100644 maintenance/archives/patch-restructure.sql

(limited to 'maintenance/archives/patch-restructure.sql')

diff --git a/maintenance/archives/patch-restructure.sql b/maintenance/archives/patch-restructure.sql
new file mode 100644
index 00000000..53f1836b
--- /dev/null
+++ b/maintenance/archives/patch-restructure.sql
@@ -0,0 +1,147 @@
+-- The Great Restructuring of October 2004
+-- Creates 'page', 'revision' tables and transforms the classic
+-- cur+old into a separate page+revision+text structure.
+--
+-- The pre-conversion 'old' table is renamed to 'text' and used
+-- without internal restructuring to avoid rebuilding the entire
+-- table. (This can be done separately if desired.)
+--
+-- The pre-conversion 'cur' table is now redundant and can be
+-- discarded when done.
+
+CREATE TABLE /*$wgDBprefix*/page (
+  page_id int(8) unsigned NOT NULL auto_increment,
+  page_namespace tinyint NOT NULL,
+  page_title varchar(255) binary NOT NULL,
+  page_restrictions tinyblob NOT NULL default '',
+  page_counter bigint(20) unsigned NOT NULL default '0',
+  page_is_redirect tinyint(1) unsigned NOT NULL default '0',
+  page_is_new tinyint(1) unsigned NOT NULL default '0',
+  page_random real unsigned NOT NULL,
+  page_touched char(14) binary NOT NULL default '',
+  page_latest int(8) unsigned NOT NULL,
+  page_len int(8) unsigned NOT NULL,
+
+  PRIMARY KEY page_id (page_id),
+  UNIQUE INDEX name_title (page_namespace,page_title),
+  INDEX (page_random),
+  INDEX (page_len)
+);
+
+CREATE TABLE /*$wgDBprefix*/revision (
+  rev_id int(8) unsigned NOT NULL auto_increment,
+  rev_page int(8) unsigned NOT NULL,
+  rev_comment tinyblob NOT NULL default '',
+  rev_user int(5) unsigned NOT NULL default '0',
+  rev_user_text varchar(255) binary NOT NULL default '',
+  rev_timestamp char(14) binary NOT NULL default '',
+  rev_minor_edit tinyint(1) unsigned NOT NULL default '0',
+  rev_deleted tinyint(1) unsigned NOT NULL default '0',
+
+  
+  PRIMARY KEY rev_page_id (rev_page, rev_id),
+  UNIQUE INDEX rev_id (rev_id),
+  INDEX rev_timestamp (rev_timestamp),
+  INDEX page_timestamp (rev_page,rev_timestamp),
+  INDEX user_timestamp (rev_user,rev_timestamp),
+  INDEX usertext_timestamp (rev_user_text,rev_timestamp)
+);
+
+-- If creating new 'text' table it would look like this:
+--
+-- CREATE TABLE /*$wgDBprefix*/text (
+--   old_id int(8) unsigned NOT NULL auto_increment,
+--   old_text mediumtext NOT NULL default '',
+--   old_flags tinyblob NOT NULL default '',
+--   
+--   PRIMARY KEY old_id (old_id)
+-- );
+
+
+-- Lock!
+LOCK TABLES /*$wgDBprefix*/page WRITE, /*$wgDBprefix*/revision WRITE, /*$wgDBprefix*/old WRITE, /*$wgDBprefix*/cur WRITE;
+
+-- Save the last old_id value for later
+SELECT (@maxold:=MAX(old_id)) FROM /*$wgDBprefix*/old;
+
+-- First, copy all current entries into the old table.
+INSERT
+  INTO /*$wgDBprefix*/old
+    (old_namespace,
+    old_title,
+    old_text,
+    old_comment,
+    old_user,
+    old_user_text,
+    old_timestamp,
+    old_minor_edit,
+    old_flags)
+  SELECT
+    cur_namespace,
+    cur_title,
+    cur_text,
+    cur_comment,
+    cur_user,
+    cur_user_text,
+    cur_timestamp,
+    cur_minor_edit,
+    ''
+  FROM /*$wgDBprefix*/cur;
+
+-- Now, copy all old data except the text into revisions
+INSERT
+  INTO /*$wgDBprefix*/revision
+    (rev_id,
+    rev_page,
+    rev_comment,
+    rev_user,
+    rev_user_text,
+    rev_timestamp,
+    rev_minor_edit)
+  SELECT
+    old_id,
+    cur_id,
+    old_comment,
+    old_user,
+    old_user_text,
+    old_timestamp,
+    old_minor_edit
+  FROM /*$wgDBprefix*/old,/*$wgDBprefix*/cur
+  WHERE old_namespace=cur_namespace
+    AND old_title=cur_title;
+
+-- And, copy the cur data into page
+INSERT
+  INTO /*$wgDBprefix*/page
+    (page_id,
+    page_namespace,
+    page_title,
+    page_restrictions,
+    page_counter,
+    page_is_redirect,
+    page_is_new,
+    page_random,
+    page_touched,
+    page_latest)
+  SELECT
+    cur_id,
+    cur_namespace,
+    cur_title,
+    cur_restrictions,
+    cur_counter,
+    cur_is_redirect,
+    cur_is_new,
+    cur_random,
+    cur_touched,
+    rev_id
+  FROM /*$wgDBprefix*/cur,/*$wgDBprefix*/revision
+  WHERE cur_id=rev_page
+    AND rev_timestamp=cur_timestamp
+    AND rev_id > @maxold;
+
+UNLOCK TABLES;
+
+-- Keep the old table around as the text store.
+-- Its extra fields will be ignored, but trimming them is slow
+-- so we won't bother doing it for now.
+ALTER TABLE /*$wgDBprefix*/old RENAME TO /*$wgDBprefix*/text;
-- 
cgit v1.2.3-54-g00ecf

