]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blobdiff - maintenance/oracle/tables.sql
MediaWiki 1.17.0
[autoinstalls/mediawiki.git] / maintenance / oracle / tables.sql
similarity index 74%
rename from maintenance/ora/tables.sql
rename to maintenance/oracle/tables.sql
index d2d1a21b14da562a9275b9a301b523761254956d..b8ecc2b96a99c5bf82cc4d1564f76c91b3b23686 100644 (file)
@@ -29,17 +29,19 @@ INSERT INTO &mw_prefix.mwuser
   VALUES (user_user_id_seq.nextval,'Anonymous','',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, '', current_timestamp, current_timestamp, 0);
 
 CREATE TABLE &mw_prefix.user_groups (
-  ug_user   NUMBER      NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE,
+  ug_user   NUMBER      DEFAULT 0 NOT NULL,
   ug_group  VARCHAR2(16)     NOT NULL
 );
+ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group);
 CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group);
 
 CREATE TABLE &mw_prefix.user_newtalk (
-  user_id  NUMBER NOT NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE,
+  user_id  NUMBER DEFAULT 0 NOT NULL,
   user_ip  VARCHAR2(40)        NULL,
   user_last_timestamp         TIMESTAMP(6) WITH TIME ZONE
 );
+ALTER TABLE &mw_prefix.user_newtalk ADD CONSTRAINT &mw_prefix.user_newtalk_fk1 FOREIGN KEY (user_id) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.user_newtalk_i01 ON &mw_prefix.user_newtalk (user_id);
 CREATE INDEX &mw_prefix.user_newtalk_i02 ON &mw_prefix.user_newtalk (user_ip);
 
@@ -51,26 +53,29 @@ CREATE TABLE &mw_prefix.user_properties (
 CREATE UNIQUE INDEX &mw_prefix.user_properties_u01 on &mw_prefix.user_properties (up_user,up_property);
 CREATE INDEX &mw_prefix.user_properties_i01 on &mw_prefix.user_properties (up_property);
 
-
 CREATE SEQUENCE page_page_id_seq;
 CREATE TABLE &mw_prefix.page (
   page_id            NUMBER        NOT NULL,
-  page_namespace     NUMBER       NOT NULL,
+  page_namespace     NUMBER       DEFAULT 0 NOT NULL,
   page_title         VARCHAR2(255)           NOT NULL,
   page_restrictions  VARCHAR2(255),
   page_counter       NUMBER         DEFAULT 0 NOT NULL,
-  page_is_redirect   CHAR(1)           DEFAULT 0 NOT NULL,
-  page_is_new        CHAR(1)           DEFAULT 0 NOT NULL,
+  page_is_redirect   CHAR(1)           DEFAULT '0' NOT NULL,
+  page_is_new        CHAR(1)           DEFAULT '0' NOT NULL,
   page_random        NUMBER(15,14) NOT NULL,
   page_touched       TIMESTAMP(6) WITH TIME ZONE,
-  page_latest        NUMBER        NOT NULL, -- FK?
-  page_len           NUMBER        NOT NULL
+  page_latest        NUMBER        DEFAULT 0 NOT NULL, -- FK?
+  page_len           NUMBER        DEFAULT 0 NOT NULL
 );
 ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id);
 CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title);
 CREATE INDEX &mw_prefix.page_i01 ON &mw_prefix.page (page_random);
 CREATE INDEX &mw_prefix.page_i02 ON &mw_prefix.page (page_len);
 
+-- Create a dummy page to satisfy fk contraints especially with revisions
+INSERT INTO &mw_prefix.page
+  VALUES (0, 0, ' ', NULL, 0, 0, 0, 0, current_timestamp, 0, 0);
+
 /*$mw$*/
 CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page
        FOR EACH ROW WHEN (new.page_random IS NULL)
@@ -82,10 +87,10 @@ END;
 CREATE SEQUENCE revision_rev_id_seq;
 CREATE TABLE &mw_prefix.revision (
   rev_id          NUMBER      NOT NULL,
-  rev_page        NUMBER          NULL  REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE,
+  rev_page        NUMBER      NOT NULL,
   rev_text_id     NUMBER          NULL,
   rev_comment     VARCHAR2(255),
-  rev_user        NUMBER      NOT NULL  REFERENCES &mw_prefix.mwuser(user_id),
+  rev_user        NUMBER      DEFAULT 0 NOT NULL,
   rev_user_text   VARCHAR2(255)         NOT NULL,
   rev_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
   rev_minor_edit  CHAR(1)         DEFAULT '0' NOT NULL,
@@ -94,6 +99,8 @@ CREATE TABLE &mw_prefix.revision (
   rev_parent_id   NUMBER          DEFAULT NULL
 );
 ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_pk PRIMARY KEY (rev_id);
+ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk1 FOREIGN KEY (rev_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.revision_u01 ON &mw_prefix.revision (rev_page, rev_id);
 CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp);
 CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp);
@@ -109,59 +116,68 @@ CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text'
 ALTER TABLE &mw_prefix.pagecontent ADD CONSTRAINT &mw_prefix.pagecontent_pk PRIMARY KEY (old_id);
 
 CREATE TABLE &mw_prefix.archive (
-  ar_namespace   NUMBER    NOT NULL,
+  ar_namespace   NUMBER    DEFAULT 0 NOT NULL,
   ar_title       VARCHAR2(255)         NOT NULL,
   ar_text        CLOB,
   ar_comment     VARCHAR2(255),
-  ar_user        NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  ar_user        NUMBER          DEFAULT 0 NOT NULL,
   ar_user_text   VARCHAR2(255)         NOT NULL,
   ar_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
   ar_minor_edit  CHAR(1)         DEFAULT '0' NOT NULL,
   ar_flags       VARCHAR2(255),
   ar_rev_id      NUMBER,
   ar_text_id     NUMBER,
-  ar_deleted     NUMBER      DEFAULT '0' NOT NULL,
+  ar_deleted     CHAR(1)      DEFAULT '0' NOT NULL,
   ar_len         NUMBER,
   ar_page_id     NUMBER,
   ar_parent_id   NUMBER
 );
+ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk1 FOREIGN KEY (ar_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.archive_i01 ON &mw_prefix.archive (ar_namespace,ar_title,ar_timestamp);
 CREATE INDEX &mw_prefix.archive_i02 ON &mw_prefix.archive (ar_user_text,ar_timestamp);
-
+CREATE INDEX &mw_prefix.archive_i03 ON &mw_prefix.archive (ar_rev_id);
 
 CREATE TABLE &mw_prefix.pagelinks (
-  pl_from       NUMBER   NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
-  pl_namespace  NUMBER  NOT NULL,
+  pl_from       NUMBER   NOT NULL,
+  pl_namespace  NUMBER  DEFAULT 0 NOT NULL,
   pl_title      VARCHAR2(255)      NOT NULL
 );
+ALTER TABLE &mw_prefix.pagelinks ADD CONSTRAINT &mw_prefix.pagelinks_fk1 FOREIGN KEY (pl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.pagelinks_u01 ON &mw_prefix.pagelinks (pl_from,pl_namespace,pl_title);
 CREATE UNIQUE INDEX &mw_prefix.pagelinks_u02 ON &mw_prefix.pagelinks (pl_namespace,pl_title,pl_from);
 
 CREATE TABLE &mw_prefix.templatelinks (
-  tl_from       NUMBER  NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
-  tl_namespace  NUMBER     NOT NULL,
+  tl_from       NUMBER  NOT NULL,
+  tl_namespace  NUMBER     DEFAULT 0 NOT NULL,
   tl_title      VARCHAR2(255)     NOT NULL
 );
+ALTER TABLE &mw_prefix.templatelinks ADD CONSTRAINT &mw_prefix.templatelinks_fk1 FOREIGN KEY (tl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.templatelinks_u01 ON &mw_prefix.templatelinks (tl_from,tl_namespace,tl_title);
 CREATE UNIQUE INDEX &mw_prefix.templatelinks_u02 ON &mw_prefix.templatelinks (tl_namespace,tl_title,tl_from);
 
 CREATE TABLE &mw_prefix.imagelinks (
-  il_from  NUMBER  NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
+  il_from  NUMBER  NOT NULL,
   il_to    VARCHAR2(255)     NOT NULL
 );
+ALTER TABLE &mw_prefix.imagelinks ADD CONSTRAINT &mw_prefix.imagelinks_fk1 FOREIGN KEY (il_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.imagelinks_u01 ON &mw_prefix.imagelinks (il_from,il_to);
 CREATE UNIQUE INDEX &mw_prefix.imagelinks_u02 ON &mw_prefix.imagelinks (il_to,il_from);
 
 
 CREATE TABLE &mw_prefix.categorylinks (
-  cl_from       NUMBER      NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
+  cl_from       NUMBER      NOT NULL,
   cl_to         VARCHAR2(255)         NOT NULL,
-  cl_sortkey    VARCHAR2(255),
-  cl_timestamp  TIMESTAMP(6) WITH TIME ZONE  NOT NULL
+  cl_sortkey    VARCHAR2(230),
+  cl_sortkey_prefix VARCHAR2(255) DEFAULT '' NOT NULL,
+  cl_timestamp  TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
+  cl_collation VARCHAR2(32) DEFAULT '' NOT NULL,
+  cl_type              VARCHAR2(6) DEFAULT 'page' NOT NULL
 );
+ALTER TABLE &mw_prefix.categorylinks ADD CONSTRAINT &mw_prefix.categorylinks_fk1 FOREIGN KEY (cl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.categorylinks_u01 ON &mw_prefix.categorylinks (cl_from,cl_to);
-CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_sortkey,cl_from);
+CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
 CREATE INDEX &mw_prefix.categorylinks_i02 ON &mw_prefix.categorylinks (cl_to,cl_timestamp);
+CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation);
 
 CREATE SEQUENCE category_cat_id_seq;
 CREATE TABLE &mw_prefix.category (
@@ -177,10 +193,11 @@ CREATE UNIQUE INDEX &mw_prefix.category_u01 ON &mw_prefix.category (cat_title);
 CREATE INDEX &mw_prefix.category_i01 ON &mw_prefix.category (cat_pages);
 
 CREATE TABLE &mw_prefix.externallinks (
-  el_from   NUMBER  NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
+  el_from   NUMBER  NOT NULL,
   el_to     VARCHAR2(2048) NOT NULL,
   el_index  VARCHAR2(2048) NOT NULL
 );
+ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_fk1 FOREIGN KEY (el_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from, el_to);
 CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from);
 CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index);
@@ -193,13 +210,22 @@ ALTER TABLE &mw_prefix.external_user ADD CONSTRAINT &mw_prefix.external_user_pk
 CREATE UNIQUE INDEX &mw_prefix.external_user_u01 ON &mw_prefix.external_user (eu_external_id);
 
 CREATE TABLE &mw_prefix.langlinks (
-  ll_from    NUMBER  NOT NULL  REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE,
+  ll_from    NUMBER  NOT NULL,
   ll_lang    VARCHAR2(20),
   ll_title   VARCHAR2(255)
 );
+ALTER TABLE &mw_prefix.langlinks ADD CONSTRAINT &mw_prefix.langlinks_fk1 FOREIGN KEY (ll_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.langlinks_u01 ON &mw_prefix.langlinks (ll_from, ll_lang);
 CREATE INDEX &mw_prefix.langlinks_i01 ON &mw_prefix.langlinks (ll_lang, ll_title);
 
+CREATE TABLE &mw_prefix.iwlinks (
+  iwl_from NUMBER DEFAULT 0 NOT NULL,
+  iwl_prefix VARCHAR2(20) DEFAULT '' NOT NULL,
+  iwl_title VARCHAR2(255) DEFAULT '' NOT NULL
+);
+CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title);
+CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from);
+
 CREATE TABLE &mw_prefix.site_stats (
   ss_row_id         NUMBER  NOT NULL ,
   ss_total_views    NUMBER            DEFAULT 0,
@@ -221,8 +247,8 @@ CREATE SEQUENCE ipblocks_ipb_id_seq;
 CREATE TABLE &mw_prefix.ipblocks (
   ipb_id                NUMBER      NOT NULL,
   ipb_address           VARCHAR2(255)     NULL,
-  ipb_user              NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
-  ipb_by                NUMBER      NOT NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE,
+  ipb_user              NUMBER      DEFAULT 0 NOT  NULL,
+  ipb_by                NUMBER      DEFAULT 0 NOT NULL,
   ipb_by_text           VARCHAR2(255)      NOT NULL,
   ipb_reason            VARCHAR2(255)         NOT NULL,
   ipb_timestamp         TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
@@ -238,6 +264,8 @@ CREATE TABLE &mw_prefix.ipblocks (
   ipb_allow_usertalk    CHAR(1)      DEFAULT '0' NOT NULL
 );
 ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id);
+ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk2 FOREIGN KEY (ipb_by) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.ipblocks_u01 ON &mw_prefix.ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only);
 CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user);
 CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end);
@@ -246,21 +274,22 @@ CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry);
 
 CREATE TABLE &mw_prefix.image (
   img_name         VARCHAR2(255)      NOT NULL,
-  img_size         NUMBER   NOT NULL,
-  img_width        NUMBER   NOT NULL,
-  img_height       NUMBER   NOT NULL,
+  img_size         NUMBER   DEFAULT 0 NOT NULL,
+  img_width        NUMBER   DEFAULT 0 NOT NULL,
+  img_height       NUMBER   DEFAULT 0 NOT NULL,
   img_metadata     CLOB,
-  img_bits         NUMBER,
+  img_bits         NUMBER   DEFAULT 0 NOT NULL,
   img_media_type   VARCHAR2(32),
   img_major_mime   VARCHAR2(32) DEFAULT 'unknown',
   img_minor_mime   VARCHAR2(100) DEFAULT 'unknown',
   img_description  VARCHAR2(255),
-  img_user         NUMBER       NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  img_user         NUMBER       DEFAULT 0 NOT NULL,
   img_user_text    VARCHAR2(255)      NOT NULL,
   img_timestamp    TIMESTAMP(6) WITH TIME ZONE,
-       img_sha1         VARCHAR2(32)
+  img_sha1         VARCHAR2(32)
 );
 ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_pk PRIMARY KEY (img_name);
+ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk1 FOREIGN KEY (img_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.image_i01 ON &mw_prefix.image (img_user_text,img_timestamp);
 CREATE INDEX &mw_prefix.image_i02 ON &mw_prefix.image (img_size);
 CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp);
@@ -268,14 +297,14 @@ CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1);
 
 
 CREATE TABLE &mw_prefix.oldimage (
-  oi_name          VARCHAR2(255)         NOT NULL  REFERENCES &mw_prefix.image(img_name),
+  oi_name          VARCHAR2(255)         DEFAULT 0 NOT NULL,
   oi_archive_name  VARCHAR2(255),
-  oi_size          NUMBER      NOT NULL,
-  oi_width         NUMBER      NOT NULL,
-  oi_height        NUMBER      NOT NULL,
-  oi_bits          NUMBER     NOT NULL,
+  oi_size          NUMBER      DEFAULT 0 NOT NULL,
+  oi_width         NUMBER      DEFAULT 0 NOT NULL,
+  oi_height        NUMBER      DEFAULT 0 NOT NULL,
+  oi_bits          NUMBER      DEFAULT 0 NOT NULL,
   oi_description   VARCHAR2(255),
-  oi_user          NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  oi_user          NUMBER          DEFAULT 0 NOT NULL,
   oi_user_text     VARCHAR2(255)         NOT NULL,
   oi_timestamp     TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
   oi_metadata      CLOB,
@@ -285,6 +314,8 @@ CREATE TABLE &mw_prefix.oldimage (
   oi_deleted       NUMBER DEFAULT 0 NOT NULL,
   oi_sha1          VARCHAR2(32)
 );
+ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk1 FOREIGN KEY (oi_name) REFERENCES &mw_prefix.image(img_name) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (oi_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.oldimage_i01 ON &mw_prefix.oldimage (oi_user_text,oi_timestamp);
 CREATE INDEX &mw_prefix.oldimage_i02 ON &mw_prefix.oldimage (oi_name,oi_timestamp);
 CREATE INDEX &mw_prefix.oldimage_i03 ON &mw_prefix.oldimage (oi_name,oi_archive_name);
@@ -298,24 +329,26 @@ CREATE TABLE &mw_prefix.filearchive (
   fa_archive_name       VARCHAR2(255),
   fa_storage_group      VARCHAR2(16),
   fa_storage_key        VARCHAR2(64),
-  fa_deleted_user       NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  fa_deleted_user       NUMBER          DEFAULT 0 NOT NULL,
   fa_deleted_timestamp  TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
   fa_deleted_reason     CLOB,
-  fa_size               NUMBER     NOT NULL,
-  fa_width              NUMBER     NOT NULL,
-  fa_height             NUMBER     NOT NULL,
+  fa_size               NUMBER     DEFAULT 0 NOT NULL,
+  fa_width              NUMBER     DEFAULT 0 NOT NULL,
+  fa_height             NUMBER     DEFAULT 0 NOT NULL,
   fa_metadata           CLOB,
-  fa_bits               NUMBER,
+  fa_bits               NUMBER     DEFAULT 0 NOT NULL,
   fa_media_type         VARCHAR2(32) DEFAULT NULL,
   fa_major_mime         VARCHAR2(32) DEFAULT 'unknown',
   fa_minor_mime         VARCHAR2(100) DEFAULT 'unknown',
   fa_description        VARCHAR2(255),
-  fa_user               NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  fa_user               NUMBER          DEFAULT 0 NOT NULL,
   fa_user_text          VARCHAR2(255)         NOT NULL,
   fa_timestamp          TIMESTAMP(6) WITH TIME ZONE,
-  fa_deleted            NUMBER      DEFAULT '0' NOT NULL
+  fa_deleted            NUMBER      DEFAULT 0 NOT NULL
 );
 ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id);
+ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk2 FOREIGN KEY (fa_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_timestamp);
 CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key);
 CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp);
@@ -326,31 +359,33 @@ CREATE TABLE &mw_prefix.recentchanges (
   rc_id              NUMBER      NOT NULL,
   rc_timestamp       TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
   rc_cur_time        TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  rc_user            NUMBER          NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  rc_user            NUMBER          DEFAULT 0 NOT NULL,
   rc_user_text       VARCHAR2(255)         NOT NULL,
-  rc_namespace       NUMBER     NOT NULL,
+  rc_namespace       NUMBER     DEFAULT 0 NOT NULL,
   rc_title           VARCHAR2(255)         NOT NULL,
   rc_comment         VARCHAR2(255),
   rc_minor           CHAR(1)         DEFAULT '0' NOT NULL,
   rc_bot             CHAR(1)         DEFAULT '0' NOT NULL,
   rc_new             CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_cur_id          NUMBER          NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL,
-  rc_this_oldid      NUMBER      NOT NULL,
-  rc_last_oldid      NUMBER      NOT NULL,
+  rc_cur_id          NUMBER          DEFAULT 0 NOT NULL,
+  rc_this_oldid      NUMBER      DEFAULT 0 NOT NULL,
+  rc_last_oldid      NUMBER      DEFAULT 0 NOT NULL,
   rc_type            CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_moved_to_ns     NUMBER,
+  rc_moved_to_ns     NUMBER          DEFAULT 0 NOT NULL,
   rc_moved_to_title  VARCHAR2(255),
   rc_patrolled       CHAR(1)         DEFAULT '0' NOT NULL,
   rc_ip              VARCHAR2(15),
   rc_old_len         NUMBER,
   rc_new_len         NUMBER,
-  rc_deleted         NUMBER      DEFAULT '0' NOT NULL,
-  rc_logid           NUMBER      DEFAULT '0' NOT NULL,
+  rc_deleted         CHAR(1)      DEFAULT '0' NOT NULL,
+  rc_logid           NUMBER      DEFAULT 0 NOT NULL,
   rc_log_type        VARCHAR2(255),
   rc_log_action      VARCHAR2(255),
   rc_params          CLOB
 );
 ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_pk PRIMARY KEY (rc_id);
+ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk1 FOREIGN KEY (rc_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.recentchanges_i01 ON &mw_prefix.recentchanges (rc_timestamp);
 CREATE INDEX &mw_prefix.recentchanges_i02 ON &mw_prefix.recentchanges (rc_namespace, rc_title);
 CREATE INDEX &mw_prefix.recentchanges_i03 ON &mw_prefix.recentchanges (rc_cur_id);
@@ -360,11 +395,12 @@ CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namesp
 CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp);
 
 CREATE TABLE &mw_prefix.watchlist (
-  wl_user                   NUMBER     NOT NULL  REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE,
+  wl_user                   NUMBER     NOT NULL,
   wl_namespace              NUMBER    DEFAULT 0 NOT NULL,
   wl_title                  VARCHAR2(255)        NOT NULL,
   wl_notificationtimestamp  TIMESTAMP(6) WITH TIME ZONE
 );
+ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title);
 CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title);
 
@@ -388,6 +424,8 @@ CREATE UNIQUE INDEX &mw_prefix.searchindex_u01 ON &mw_prefix.searchindex (si_pag
 CREATE TABLE &mw_prefix.interwiki (
   iw_prefix  VARCHAR2(32)   NOT NULL,
   iw_url     VARCHAR2(127)  NOT NULL,
+  iw_api       BLOB NOT NULL,
+  iw_wikiid VARCHAR2(64),
   iw_local   CHAR(1)  NOT NULL,
   iw_trans   CHAR(1)  DEFAULT '0' NOT NULL
 );
@@ -395,8 +433,8 @@ CREATE UNIQUE INDEX &mw_prefix.interwiki_u01 ON &mw_prefix.interwiki (iw_prefix)
 
 CREATE TABLE &mw_prefix.querycache (
   qc_type       VARCHAR2(32)      NOT NULL,
-  qc_value      NUMBER  NOT NULL,
-  qc_namespace  NUMBER  NOT NULL,
+  qc_value      NUMBER  DEFAULT 0 NOT NULL,
+  qc_namespace  NUMBER  DEFAULT 0 NOT NULL,
   qc_title      VARCHAR2(255)      NOT NULL
 );
 CREATE INDEX &mw_prefix.querycache_u01 ON &mw_prefix.querycache (qc_type,qc_value);
@@ -422,16 +460,17 @@ CREATE TABLE &mw_prefix.logging (
   log_type        VARCHAR2(10)         NOT NULL,
   log_action      VARCHAR2(10)         NOT NULL,
   log_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  log_user        NUMBER                REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL,
+  log_user        NUMBER                DEFAULT 0 NOT NULL,
   log_user_text        VARCHAR2(255),
-  log_namespace   NUMBER     NOT NULL,
+  log_namespace   NUMBER     DEFAULT 0 NOT NULL,
   log_title       VARCHAR2(255)         NOT NULL,
-       log_page                                NUMBER,
+  log_page                             NUMBER,
   log_comment     VARCHAR2(255),
   log_params      CLOB,
-  log_deleted     NUMBER      DEFAULT '0' NOT NULL
+  log_deleted     CHAR(1)      DEFAULT '0' NOT NULL
 );
 ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_pk PRIMARY KEY (log_id);
+ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.logging_i01 ON &mw_prefix.logging (log_type, log_timestamp);
 CREATE INDEX &mw_prefix.logging_i02 ON &mw_prefix.logging (log_user, log_timestamp);
 CREATE INDEX &mw_prefix.logging_i03 ON &mw_prefix.logging (log_namespace, log_title, log_timestamp);
@@ -448,20 +487,21 @@ CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id);
 CREATE SEQUENCE trackbacks_tb_id_seq;
 CREATE TABLE &mw_prefix.trackbacks (
   tb_id     NUMBER   NOT NULL,
-  tb_page   NUMBER            REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
+  tb_page   NUMBER,
   tb_title  VARCHAR2(255)     NOT NULL,
   tb_url    VARCHAR2(255)     NOT NULL,
   tb_ex     CLOB,
   tb_name   VARCHAR2(255) 
 );
 ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_pk PRIMARY KEY (tb_id);
+ALTER TABLE &mw_prefix.trackbacks ADD CONSTRAINT &mw_prefix.trackbacks_fk1 FOREIGN KEY (tb_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.trackbacks_i01 ON &mw_prefix.trackbacks (tb_page);
 
 CREATE SEQUENCE job_job_id_seq;
 CREATE TABLE &mw_prefix.job (
   job_id         NUMBER   NOT NULL,
   job_cmd        VARCHAR2(60)      NOT NULL,
-  job_namespace  NUMBER  NOT NULL,
+  job_namespace  NUMBER  DEFAULT 0 NOT NULL,
   job_title      VARCHAR2(255)      NOT NULL,
   job_params     CLOB      NOT NULL
 );
@@ -475,12 +515,13 @@ CREATE TABLE &mw_prefix.querycache_info (
 CREATE UNIQUE INDEX &mw_prefix.querycache_info_u01 ON &mw_prefix.querycache_info (qci_type);
 
 CREATE TABLE &mw_prefix.redirect (
-  rd_from       NUMBER  NOT NULL  REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE,
-  rd_namespace  NUMBER NOT NULL,
+  rd_from       NUMBER  NOT NULL,
+  rd_namespace  NUMBER DEFAULT 0 NOT NULL,
   rd_title      VARCHAR2(255)     NOT NULL,
   rd_interwiki  VARCHAR2(32),
   rd_fragment   VARCHAR2(255)
 );
+ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.redirect_i01 ON &mw_prefix.redirect (rd_namespace,rd_title,rd_from);
 
 CREATE TABLE &mw_prefix.querycachetwo (
@@ -498,7 +539,7 @@ CREATE INDEX &mw_prefix.querycachetwo_i03 ON &mw_prefix.querycachetwo (qcc_type,
 CREATE SEQUENCE page_restrictions_pr_id_seq;
 CREATE TABLE &mw_prefix.page_restrictions (
   pr_id      NUMBER      NOT NULL,
-  pr_page    NUMBER          NULL  REFERENCES &mw_prefix.page (page_id) ON DELETE CASCADE,
+  pr_page    NUMBER      NOT NULL,
   pr_type    VARCHAR2(255)         NOT NULL,
   pr_level   VARCHAR2(255)         NOT NULL,
   pr_cascade NUMBER     NOT NULL,
@@ -506,12 +547,13 @@ CREATE TABLE &mw_prefix.page_restrictions (
   pr_expiry  TIMESTAMP(6) WITH TIME ZONE      NULL
 );
 ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_page,pr_type);
+ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
 CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level);
 CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level);
 CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade);
 
 CREATE TABLE &mw_prefix.protected_titles (
-  pt_namespace   NUMBER           NOT NULL,
+  pt_namespace   NUMBER           DEFAULT 0 NOT NULL,
   pt_title       VARCHAR2(255)    NOT NULL,
   pt_user        NUMBER                  NOT NULL,
   pt_reason      VARCHAR2(255),
@@ -531,7 +573,8 @@ CREATE UNIQUE INDEX &mw_prefix.page_props_u01 ON &mw_prefix.page_props (pp_page,
 
 
 CREATE TABLE &mw_prefix.updatelog (
-  ul_key VARCHAR2(255) NOT NULL
+  ul_key VARCHAR2(255) NOT NULL,
+  ul_value BLOB
 );
 ALTER TABLE &mw_prefix.updatelog ADD CONSTRAINT &mw_prefix.updatelog_pk PRIMARY KEY (ul_key);
 
@@ -571,8 +614,8 @@ ALTER TABLE &mw_prefix.valid_tag ADD CONSTRAINT &mw_prefix.valid_tag_pk PRIMARY
 --);
 --CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server);
 
-CREATE INDEX si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context;
-CREATE INDEX si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context;
+CREATE INDEX &mw_prefix.si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context;
+CREATE INDEX &mw_prefix.si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context;
 
 CREATE TABLE &mw_prefix.l10n_cache (
   lc_lang varchar2(32) NOT NULL,
@@ -581,6 +624,27 @@ CREATE TABLE &mw_prefix.l10n_cache (
 );
 CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key);
 
+CREATE TABLE &mw_prefix.msg_resource (
+  mr_resource VARCHAR2(255) NOT NULL,
+  mr_lang varchar2(32) NOT NULL,
+  mr_blob BLOB NOT NULL,
+  mr_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL
+) ;
+CREATE UNIQUE INDEX &mw_prefix.msg_resource_u01 ON &mw_prefix.msg_resource (mr_resource, mr_lang);
+
+CREATE TABLE &mw_prefix.msg_resource_links (
+  mrl_resource VARCHAR2(255) NOT NULL,
+  mrl_message VARCHAR2(255) NOT NULL
+);
+CREATE UNIQUE INDEX &mw_prefix.msg_resource_links_u01 ON &mw_prefix.msg_resource_links (mrl_message, mrl_resource);
+
+CREATE TABLE &mw_prefix.module_deps (
+  md_module VARCHAR2(255) NOT NULL,
+  md_skin VARCHAR2(32) NOT NULL,
+  md_deps BLOB NOT NULL
+);
+CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
+
 -- do not prefix this table as it breaks parserTests
 CREATE TABLE wiki_field_info_full (
 table_name VARCHAR2(35) NOT NULL,
@@ -653,6 +717,7 @@ CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
                                             p_temporary IN BOOLEAN) IS
   e_table_not_exist EXCEPTION;
   PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
+  l_temp_ei_sql VARCHAR2(2000);
 BEGIN
   BEGIN
     EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
@@ -676,7 +741,7 @@ BEGIN
                 AND data_default IS NOT NULL) LOOP
     EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
                       ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
-                      substr(rc.data_default, 1, 2000);
+                      SUBSTR(rc.data_default, 1, 2000);
   END LOOP;
   FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
                                                                           constraint_name),
@@ -690,11 +755,11 @@ BEGIN
                FROM user_constraints uc
               WHERE table_name = p_oldprefix || p_tabname
                 AND constraint_type = 'P') LOOP
-    dbms_output.put_line(SUBSTR(rc.ddlvc2,
-                                1,
-                                INSTR(rc.ddlvc2, 'PCTFREE') - 1));
-    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+    l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, 'PRIMARY KEY')+1)+1);
+    EXECUTE IMMEDIATE l_temp_ei_sql;
   END LOOP;
+  IF (NOT p_temporary) THEN
   FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
                                                                   constraint_name),
                                             32767,
@@ -707,6 +772,7 @@ BEGIN
                 AND constraint_type = 'R') LOOP
     EXECUTE IMMEDIATE rc.ddlvc2;
   END LOOP;
+  END IF;
   FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
                                                                           index_name),
                                                     32767,
@@ -715,16 +781,19 @@ BEGIN
                                     USER || '"."' || p_newprefix),
                             '"' || index_name || '"',
                             '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name
+                    index_name,
+                    index_type
                FROM user_indexes ui
               WHERE table_name = p_oldprefix || p_tabname
-                AND index_type != 'LOB'
+                AND index_type NOT IN ('LOB', 'DOMAIN')
                 AND NOT EXISTS
               (SELECT NULL
                        FROM user_constraints
                       WHERE table_name = ui.table_name
                         AND constraint_name = ui.index_name)) LOOP
-    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
+    l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, '"' || USER || '"."' || p_newprefix || '"')+1)+1);
+    EXECUTE IMMEDIATE l_temp_ei_sql;
   END LOOP;
   FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
                                                                                 trigger_name),
@@ -737,17 +806,12 @@ BEGIN
                     trigger_name
                FROM user_triggers
               WHERE table_name = p_oldprefix || p_tabname) LOOP
-    EXECUTE IMMEDIATE SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
+    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
+    EXECUTE IMMEDIATE l_temp_ei_sql;
   END LOOP;
 END;
 /*$mw$*/
 
-/*$mw$*/
-BEGIN 
-       fill_wiki_info;
-END;
-/*$mw$*/
-
 /*$mw$*/
 CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS
 BEGIN
@@ -762,9 +826,7 @@ BEGIN
 END;
 /*$mw$*/
 
-/*$mw$*/
 CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
-/*$mw$*/
 
 /*$mw$*/
 CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS