tables.sql 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. -- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}';
  2. define mw_prefix='{$wgDBprefix}';
  3. CREATE SEQUENCE user_user_id_seq;
  4. CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user'
  5. user_id NUMBER NOT NULL,
  6. user_name VARCHAR2(255) NOT NULL,
  7. user_real_name VARCHAR2(512),
  8. user_password VARCHAR2(255),
  9. user_newpassword VARCHAR2(255),
  10. user_newpass_time TIMESTAMP(6) WITH TIME ZONE,
  11. user_token VARCHAR2(32),
  12. user_email VARCHAR2(255),
  13. user_email_token VARCHAR2(32),
  14. user_email_token_expires TIMESTAMP(6) WITH TIME ZONE,
  15. user_email_authenticated TIMESTAMP(6) WITH TIME ZONE,
  16. user_options CLOB,
  17. user_touched TIMESTAMP(6) WITH TIME ZONE,
  18. user_registration TIMESTAMP(6) WITH TIME ZONE,
  19. user_editcount NUMBER,
  20. user_password_expires TIMESTAMP(6) WITH TIME ZONE
  21. );
  22. ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id);
  23. CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name);
  24. CREATE INDEX &mw_prefix.mwuser_i01 ON &mw_prefix.mwuser (user_email_token);
  25. CREATE INDEX &mw_prefix.mwuser_i02 ON &mw_prefix.mwuser (user_email, user_name);
  26. -- Create a dummy user to satisfy fk contraints especially with revisions
  27. INSERT INTO &mw_prefix.mwuser
  28. (user_id, user_name, user_options, user_touched, user_registration, user_editcount)
  29. VALUES (0,'Anonymous','', current_timestamp, current_timestamp,0);
  30. CREATE TABLE &mw_prefix.user_groups (
  31. ug_user NUMBER DEFAULT 0 NOT NULL,
  32. ug_group VARCHAR2(255) NOT NULL
  33. );
  34. 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;
  35. CREATE UNIQUE INDEX &mw_prefix.user_groups_u01 ON &mw_prefix.user_groups (ug_user,ug_group);
  36. CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group);
  37. CREATE TABLE &mw_prefix.user_former_groups (
  38. ufg_user NUMBER DEFAULT 0 NOT NULL,
  39. ufg_group VARCHAR2(255) NOT NULL
  40. );
  41. ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
  42. CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
  43. CREATE TABLE &mw_prefix.user_newtalk (
  44. user_id NUMBER DEFAULT 0 NOT NULL,
  45. user_ip VARCHAR2(40) NULL,
  46. user_last_timestamp TIMESTAMP(6) WITH TIME ZONE
  47. );
  48. 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;
  49. CREATE INDEX &mw_prefix.user_newtalk_i01 ON &mw_prefix.user_newtalk (user_id);
  50. CREATE INDEX &mw_prefix.user_newtalk_i02 ON &mw_prefix.user_newtalk (user_ip);
  51. CREATE TABLE &mw_prefix.user_properties (
  52. up_user NUMBER NOT NULL,
  53. up_property VARCHAR2(255) NOT NULL,
  54. up_value CLOB
  55. );
  56. CREATE UNIQUE INDEX &mw_prefix.user_properties_u01 on &mw_prefix.user_properties (up_user,up_property);
  57. CREATE INDEX &mw_prefix.user_properties_i01 on &mw_prefix.user_properties (up_property);
  58. CREATE SEQUENCE page_page_id_seq;
  59. CREATE TABLE &mw_prefix.page (
  60. page_id NUMBER NOT NULL,
  61. page_namespace NUMBER DEFAULT 0 NOT NULL,
  62. page_title VARCHAR2(255) NOT NULL,
  63. page_restrictions VARCHAR2(255),
  64. page_is_redirect CHAR(1) DEFAULT '0' NOT NULL,
  65. page_is_new CHAR(1) DEFAULT '0' NOT NULL,
  66. page_random NUMBER(15,14) NOT NULL,
  67. page_touched TIMESTAMP(6) WITH TIME ZONE,
  68. page_links_updated TIMESTAMP(6) WITH TIME ZONE,
  69. page_latest NUMBER DEFAULT 0 NOT NULL, -- FK?
  70. page_len NUMBER DEFAULT 0 NOT NULL,
  71. page_content_model VARCHAR2(32),
  72. page_lang VARCHAR2(35) DEFAULT NULL
  73. );
  74. ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id);
  75. CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title);
  76. CREATE INDEX &mw_prefix.page_i01 ON &mw_prefix.page (page_random);
  77. CREATE INDEX &mw_prefix.page_i02 ON &mw_prefix.page (page_len);
  78. CREATE INDEX &mw_prefix.page_i03 ON &mw_prefix.page (page_is_redirect, page_namespace, page_len);
  79. -- Create a dummy page to satisfy fk contraints especially with revisions
  80. INSERT INTO &mw_prefix.page
  81. VALUES (0, 0, ' ', NULL, 0, 0, 0, current_timestamp, NULL, 0, 0, NULL, NULL);
  82. /*$mw$*/
  83. CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page
  84. FOR EACH ROW WHEN (new.page_random IS NULL)
  85. BEGIN
  86. SELECT dbms_random.value INTO :NEW.page_random FROM dual;
  87. END;
  88. /*$mw$*/
  89. CREATE SEQUENCE revision_rev_id_seq;
  90. CREATE TABLE &mw_prefix.revision (
  91. rev_id NUMBER NOT NULL,
  92. rev_page NUMBER NOT NULL,
  93. rev_text_id NUMBER NULL,
  94. rev_comment VARCHAR2(255),
  95. rev_user NUMBER DEFAULT 0 NOT NULL,
  96. rev_user_text VARCHAR2(255) NOT NULL,
  97. rev_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  98. rev_minor_edit CHAR(1) DEFAULT '0' NOT NULL,
  99. rev_deleted CHAR(1) DEFAULT '0' NOT NULL,
  100. rev_len NUMBER NULL,
  101. rev_parent_id NUMBER DEFAULT NULL,
  102. rev_sha1 VARCHAR2(32) NULL,
  103. rev_content_model VARCHAR2(32),
  104. rev_content_format VARCHAR2(64)
  105. );
  106. ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_pk PRIMARY KEY (rev_id);
  107. 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;
  108. ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED;
  109. CREATE UNIQUE INDEX &mw_prefix.revision_u01 ON &mw_prefix.revision (rev_page, rev_id);
  110. CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp);
  111. CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp);
  112. CREATE INDEX &mw_prefix.revision_i03 ON &mw_prefix.revision (rev_user,rev_timestamp);
  113. CREATE INDEX &mw_prefix.revision_i04 ON &mw_prefix.revision (rev_user_text,rev_timestamp);
  114. CREATE INDEX &mw_prefix.revision_i05 ON &mw_prefix.revision (rev_page,rev_user,rev_timestamp);
  115. CREATE SEQUENCE text_old_id_seq;
  116. CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text'
  117. old_id NUMBER NOT NULL,
  118. old_text CLOB,
  119. old_flags VARCHAR2(255)
  120. );
  121. ALTER TABLE &mw_prefix.pagecontent ADD CONSTRAINT &mw_prefix.pagecontent_pk PRIMARY KEY (old_id);
  122. CREATE SEQUENCE archive_ar_id_seq;
  123. CREATE TABLE &mw_prefix.archive (
  124. ar_id NUMBER NOT NULL,
  125. ar_namespace NUMBER DEFAULT 0 NOT NULL,
  126. ar_title VARCHAR2(255) NOT NULL,
  127. ar_text CLOB,
  128. ar_comment VARCHAR2(255),
  129. ar_user NUMBER DEFAULT 0 NOT NULL,
  130. ar_user_text VARCHAR2(255) NOT NULL,
  131. ar_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  132. ar_minor_edit CHAR(1) DEFAULT '0' NOT NULL,
  133. ar_flags VARCHAR2(255),
  134. ar_rev_id NUMBER,
  135. ar_text_id NUMBER,
  136. ar_deleted CHAR(1) DEFAULT '0' NOT NULL,
  137. ar_len NUMBER,
  138. ar_page_id NUMBER,
  139. ar_parent_id NUMBER,
  140. ar_sha1 VARCHAR2(32),
  141. ar_content_model VARCHAR2(32),
  142. ar_content_format VARCHAR2(64)
  143. );
  144. ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_pk PRIMARY KEY (ar_id);
  145. 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;
  146. CREATE INDEX &mw_prefix.archive_i01 ON &mw_prefix.archive (ar_namespace,ar_title,ar_timestamp);
  147. CREATE INDEX &mw_prefix.archive_i02 ON &mw_prefix.archive (ar_user_text,ar_timestamp);
  148. CREATE INDEX &mw_prefix.archive_i03 ON &mw_prefix.archive (ar_rev_id);
  149. CREATE TABLE &mw_prefix.pagelinks (
  150. pl_from NUMBER NOT NULL,
  151. pl_namespace NUMBER DEFAULT 0 NOT NULL,
  152. pl_title VARCHAR2(255) NOT NULL
  153. );
  154. 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;
  155. CREATE UNIQUE INDEX &mw_prefix.pagelinks_u01 ON &mw_prefix.pagelinks (pl_from,pl_namespace,pl_title);
  156. CREATE UNIQUE INDEX &mw_prefix.pagelinks_u02 ON &mw_prefix.pagelinks (pl_namespace,pl_title,pl_from);
  157. CREATE TABLE &mw_prefix.templatelinks (
  158. tl_from NUMBER NOT NULL,
  159. tl_namespace NUMBER DEFAULT 0 NOT NULL,
  160. tl_title VARCHAR2(255) NOT NULL
  161. );
  162. 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;
  163. CREATE UNIQUE INDEX &mw_prefix.templatelinks_u01 ON &mw_prefix.templatelinks (tl_from,tl_namespace,tl_title);
  164. CREATE UNIQUE INDEX &mw_prefix.templatelinks_u02 ON &mw_prefix.templatelinks (tl_namespace,tl_title,tl_from);
  165. CREATE TABLE &mw_prefix.imagelinks (
  166. il_from NUMBER NOT NULL,
  167. il_to VARCHAR2(255) NOT NULL
  168. );
  169. 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;
  170. CREATE UNIQUE INDEX &mw_prefix.imagelinks_u01 ON &mw_prefix.imagelinks (il_from,il_to);
  171. CREATE UNIQUE INDEX &mw_prefix.imagelinks_u02 ON &mw_prefix.imagelinks (il_to,il_from);
  172. CREATE TABLE &mw_prefix.categorylinks (
  173. cl_from NUMBER NOT NULL,
  174. cl_to VARCHAR2(255) NOT NULL,
  175. cl_sortkey VARCHAR2(230),
  176. cl_sortkey_prefix VARCHAR2(255),
  177. cl_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  178. cl_collation VARCHAR2(32),
  179. cl_type VARCHAR2(6) DEFAULT 'page' NOT NULL
  180. );
  181. 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;
  182. CREATE UNIQUE INDEX &mw_prefix.categorylinks_u01 ON &mw_prefix.categorylinks (cl_from,cl_to);
  183. CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
  184. CREATE INDEX &mw_prefix.categorylinks_i02 ON &mw_prefix.categorylinks (cl_to,cl_timestamp);
  185. CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation);
  186. CREATE SEQUENCE category_cat_id_seq;
  187. CREATE TABLE &mw_prefix.category (
  188. cat_id NUMBER NOT NULL,
  189. cat_title VARCHAR2(255) NOT NULL,
  190. cat_pages NUMBER DEFAULT 0 NOT NULL,
  191. cat_subcats NUMBER DEFAULT 0 NOT NULL,
  192. cat_files NUMBER DEFAULT 0 NOT NULL
  193. );
  194. ALTER TABLE &mw_prefix.category ADD CONSTRAINT &mw_prefix.category_pk PRIMARY KEY (cat_id);
  195. CREATE UNIQUE INDEX &mw_prefix.category_u01 ON &mw_prefix.category (cat_title);
  196. CREATE INDEX &mw_prefix.category_i01 ON &mw_prefix.category (cat_pages);
  197. CREATE SEQUENCE externallinks_el_id_seq;
  198. CREATE TABLE &mw_prefix.externallinks (
  199. el_id NUMBER NOT NULL,
  200. el_from NUMBER NOT NULL,
  201. el_to VARCHAR2(2048) NOT NULL,
  202. el_index VARCHAR2(2048) NOT NULL
  203. );
  204. ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_pk PRIMARY KEY (el_id);
  205. 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;
  206. CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from, el_to);
  207. CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from);
  208. CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index);
  209. CREATE TABLE &mw_prefix.langlinks (
  210. ll_from NUMBER NOT NULL,
  211. ll_lang VARCHAR2(20),
  212. ll_title VARCHAR2(255)
  213. );
  214. 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;
  215. CREATE UNIQUE INDEX &mw_prefix.langlinks_u01 ON &mw_prefix.langlinks (ll_from, ll_lang);
  216. CREATE INDEX &mw_prefix.langlinks_i01 ON &mw_prefix.langlinks (ll_lang, ll_title);
  217. CREATE TABLE &mw_prefix.iwlinks (
  218. iwl_from NUMBER DEFAULT 0 NOT NULL,
  219. iwl_prefix VARCHAR2(20),
  220. iwl_title VARCHAR2(255)
  221. );
  222. CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title);
  223. CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from);
  224. CREATE TABLE &mw_prefix.site_stats (
  225. ss_row_id NUMBER NOT NULL ,
  226. ss_total_edits NUMBER DEFAULT 0,
  227. ss_good_articles NUMBER DEFAULT 0,
  228. ss_total_pages NUMBER DEFAULT -1,
  229. ss_users NUMBER DEFAULT -1,
  230. ss_active_users NUMBER DEFAULT -1,
  231. ss_images NUMBER DEFAULT 0
  232. );
  233. CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id);
  234. CREATE SEQUENCE ipblocks_ipb_id_seq;
  235. CREATE TABLE &mw_prefix.ipblocks (
  236. ipb_id NUMBER NOT NULL,
  237. ipb_address VARCHAR2(255) NULL,
  238. ipb_user NUMBER DEFAULT 0 NOT NULL,
  239. ipb_by NUMBER DEFAULT 0 NOT NULL,
  240. ipb_by_text VARCHAR2(255) NULL,
  241. ipb_reason VARCHAR2(255) NOT NULL,
  242. ipb_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  243. ipb_auto CHAR(1) DEFAULT '0' NOT NULL,
  244. ipb_anon_only CHAR(1) DEFAULT '0' NOT NULL,
  245. ipb_create_account CHAR(1) DEFAULT '1' NOT NULL,
  246. ipb_enable_autoblock CHAR(1) DEFAULT '1' NOT NULL,
  247. ipb_expiry TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  248. ipb_range_start VARCHAR2(255),
  249. ipb_range_end VARCHAR2(255),
  250. ipb_deleted CHAR(1) DEFAULT '0' NOT NULL,
  251. ipb_block_email CHAR(1) DEFAULT '0' NOT NULL,
  252. ipb_allow_usertalk CHAR(1) DEFAULT '0' NOT NULL,
  253. ipb_parent_block_id NUMBER DEFAULT NULL
  254. );
  255. ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id);
  256. 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;
  257. 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;
  258. CREATE UNIQUE INDEX &mw_prefix.ipblocks_u01 ON &mw_prefix.ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only);
  259. CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user);
  260. CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end);
  261. CREATE INDEX &mw_prefix.ipblocks_i03 ON &mw_prefix.ipblocks (ipb_timestamp);
  262. CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry);
  263. CREATE INDEX &mw_prefix.ipblocks_i05 ON &mw_prefix.ipblocks (ipb_parent_block_id);
  264. CREATE TABLE &mw_prefix.image (
  265. img_name VARCHAR2(255) NOT NULL,
  266. img_size NUMBER DEFAULT 0 NOT NULL,
  267. img_width NUMBER DEFAULT 0 NOT NULL,
  268. img_height NUMBER DEFAULT 0 NOT NULL,
  269. img_metadata CLOB,
  270. img_bits NUMBER DEFAULT 0 NOT NULL,
  271. img_media_type VARCHAR2(32),
  272. img_major_mime VARCHAR2(32) DEFAULT 'unknown',
  273. img_minor_mime VARCHAR2(100) DEFAULT 'unknown',
  274. img_description VARCHAR2(255),
  275. img_user NUMBER DEFAULT 0 NOT NULL,
  276. img_user_text VARCHAR2(255) NOT NULL,
  277. img_timestamp TIMESTAMP(6) WITH TIME ZONE,
  278. img_sha1 VARCHAR2(32)
  279. );
  280. ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_pk PRIMARY KEY (img_name);
  281. 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;
  282. CREATE INDEX &mw_prefix.image_i01 ON &mw_prefix.image (img_user_text,img_timestamp);
  283. CREATE INDEX &mw_prefix.image_i02 ON &mw_prefix.image (img_size);
  284. CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp);
  285. CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1);
  286. CREATE TABLE &mw_prefix.oldimage (
  287. oi_name VARCHAR2(255) DEFAULT 0 NOT NULL,
  288. oi_archive_name VARCHAR2(255),
  289. oi_size NUMBER DEFAULT 0 NOT NULL,
  290. oi_width NUMBER DEFAULT 0 NOT NULL,
  291. oi_height NUMBER DEFAULT 0 NOT NULL,
  292. oi_bits NUMBER DEFAULT 0 NOT NULL,
  293. oi_description VARCHAR2(255),
  294. oi_user NUMBER DEFAULT 0 NOT NULL,
  295. oi_user_text VARCHAR2(255) NOT NULL,
  296. oi_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  297. oi_metadata CLOB,
  298. oi_media_type VARCHAR2(32) DEFAULT NULL,
  299. oi_major_mime VARCHAR2(32) DEFAULT 'unknown',
  300. oi_minor_mime VARCHAR2(100) DEFAULT 'unknown',
  301. oi_deleted NUMBER DEFAULT 0 NOT NULL,
  302. oi_sha1 VARCHAR2(32)
  303. );
  304. 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;
  305. 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;
  306. CREATE INDEX &mw_prefix.oldimage_i01 ON &mw_prefix.oldimage (oi_user_text,oi_timestamp);
  307. CREATE INDEX &mw_prefix.oldimage_i02 ON &mw_prefix.oldimage (oi_name,oi_timestamp);
  308. CREATE INDEX &mw_prefix.oldimage_i03 ON &mw_prefix.oldimage (oi_name,oi_archive_name);
  309. CREATE INDEX &mw_prefix.oldimage_i04 ON &mw_prefix.oldimage (oi_sha1);
  310. CREATE SEQUENCE filearchive_fa_id_seq;
  311. CREATE TABLE &mw_prefix.filearchive (
  312. fa_id NUMBER NOT NULL,
  313. fa_name VARCHAR2(255) NOT NULL,
  314. fa_archive_name VARCHAR2(255),
  315. fa_storage_group VARCHAR2(16),
  316. fa_storage_key VARCHAR2(64),
  317. fa_deleted_user NUMBER DEFAULT 0 NOT NULL,
  318. fa_deleted_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  319. fa_deleted_reason CLOB,
  320. fa_size NUMBER DEFAULT 0 NOT NULL,
  321. fa_width NUMBER DEFAULT 0 NOT NULL,
  322. fa_height NUMBER DEFAULT 0 NOT NULL,
  323. fa_metadata CLOB,
  324. fa_bits NUMBER DEFAULT 0 NOT NULL,
  325. fa_media_type VARCHAR2(32) DEFAULT NULL,
  326. fa_major_mime VARCHAR2(32) DEFAULT 'unknown',
  327. fa_minor_mime VARCHAR2(100) DEFAULT 'unknown',
  328. fa_description VARCHAR2(255),
  329. fa_user NUMBER DEFAULT 0 NOT NULL,
  330. fa_user_text VARCHAR2(255) NOT NULL,
  331. fa_timestamp TIMESTAMP(6) WITH TIME ZONE,
  332. fa_deleted NUMBER DEFAULT 0 NOT NULL,
  333. fa_sha1 VARCHAR2(32)
  334. );
  335. ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id);
  336. 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;
  337. 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;
  338. CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_timestamp);
  339. CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key);
  340. CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp);
  341. CREATE INDEX &mw_prefix.filearchive_i04 ON &mw_prefix.filearchive (fa_user_text,fa_timestamp);
  342. CREATE INDEX &mw_prefix.filearchive_i05 ON &mw_prefix.filearchive (fa_sha1);
  343. CREATE SEQUENCE uploadstash_us_id_seq;
  344. CREATE TABLE &mw_prefix.uploadstash (
  345. us_id NUMBER NOT NULL,
  346. us_user NUMBER DEFAULT 0 NOT NULL,
  347. us_key VARCHAR2(255) NOT NULL,
  348. us_orig_path VARCHAR2(255) NOT NULL,
  349. us_path VARCHAR2(255) NOT NULL,
  350. us_source_type VARCHAR2(50),
  351. us_timestamp TIMESTAMP(6) WITH TIME ZONE,
  352. us_status VARCHAR2(50) NOT NULL,
  353. us_chunk_inx NUMBER,
  354. us_size NUMBER NOT NULL,
  355. us_sha1 VARCHAR2(32) NOT NULL,
  356. us_mime VARCHAR2(255),
  357. us_media_type VARCHAR2(32) DEFAULT NULL,
  358. us_image_width NUMBER,
  359. us_image_height NUMBER,
  360. us_image_bits NUMBER,
  361. us_props BLOB
  362. );
  363. ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_pk PRIMARY KEY (us_id);
  364. ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_fk1 FOREIGN KEY (us_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
  365. CREATE INDEX &mw_prefix.uploadstash_i01 ON &mw_prefix.uploadstash (us_user);
  366. CREATE INDEX &mw_prefix.uploadstash_i02 ON &mw_prefix.uploadstash (us_timestamp);
  367. CREATE UNIQUE INDEX &mw_prefix.uploadstash_u01 ON &mw_prefix.uploadstash (us_key);
  368. CREATE SEQUENCE recentchanges_rc_id_seq;
  369. CREATE TABLE &mw_prefix.recentchanges (
  370. rc_id NUMBER NOT NULL,
  371. rc_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  372. rc_cur_time TIMESTAMP(6) WITH TIME ZONE,
  373. rc_user NUMBER DEFAULT 0 NOT NULL,
  374. rc_user_text VARCHAR2(255) NOT NULL,
  375. rc_namespace NUMBER DEFAULT 0 NOT NULL,
  376. rc_title VARCHAR2(255) NOT NULL,
  377. rc_comment VARCHAR2(255),
  378. rc_minor CHAR(1) DEFAULT '0' NOT NULL,
  379. rc_bot CHAR(1) DEFAULT '0' NOT NULL,
  380. rc_new CHAR(1) DEFAULT '0' NOT NULL,
  381. rc_cur_id NUMBER DEFAULT 0 NOT NULL,
  382. rc_this_oldid NUMBER DEFAULT 0 NOT NULL,
  383. rc_last_oldid NUMBER DEFAULT 0 NOT NULL,
  384. rc_type CHAR(1) DEFAULT '0' NOT NULL,
  385. rc_source VARCHAR2(16),
  386. rc_patrolled CHAR(1) DEFAULT '0' NOT NULL,
  387. rc_ip VARCHAR2(15),
  388. rc_old_len NUMBER,
  389. rc_new_len NUMBER,
  390. rc_deleted CHAR(1) DEFAULT '0' NOT NULL,
  391. rc_logid NUMBER DEFAULT 0 NOT NULL,
  392. rc_log_type VARCHAR2(255),
  393. rc_log_action VARCHAR2(255),
  394. rc_params CLOB
  395. );
  396. ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_pk PRIMARY KEY (rc_id);
  397. 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;
  398. ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
  399. CREATE INDEX &mw_prefix.recentchanges_i01 ON &mw_prefix.recentchanges (rc_timestamp);
  400. CREATE INDEX &mw_prefix.recentchanges_i02 ON &mw_prefix.recentchanges (rc_namespace, rc_title);
  401. CREATE INDEX &mw_prefix.recentchanges_i03 ON &mw_prefix.recentchanges (rc_cur_id);
  402. CREATE INDEX &mw_prefix.recentchanges_i04 ON &mw_prefix.recentchanges (rc_new,rc_namespace,rc_timestamp);
  403. CREATE INDEX &mw_prefix.recentchanges_i05 ON &mw_prefix.recentchanges (rc_ip);
  404. CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namespace, rc_user_text);
  405. CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp);
  406. CREATE TABLE &mw_prefix.watchlist (
  407. wl_id NUMBER NOT NULL,
  408. wl_user NUMBER NOT NULL,
  409. wl_namespace NUMBER DEFAULT 0 NOT NULL,
  410. wl_title VARCHAR2(255) NOT NULL,
  411. wl_notificationtimestamp TIMESTAMP(6) WITH TIME ZONE
  412. );
  413. ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_pk PRIMARY KEY (wl_id);
  414. 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;
  415. CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title);
  416. CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title);
  417. CREATE TABLE &mw_prefix.searchindex (
  418. si_page NUMBER NOT NULL,
  419. si_title VARCHAR2(255),
  420. si_text CLOB NOT NULL
  421. );
  422. CREATE UNIQUE INDEX &mw_prefix.searchindex_u01 ON &mw_prefix.searchindex (si_page);
  423. CREATE TABLE &mw_prefix.interwiki (
  424. iw_prefix VARCHAR2(32) NOT NULL,
  425. iw_url VARCHAR2(127) NOT NULL,
  426. iw_api BLOB NOT NULL,
  427. iw_wikiid VARCHAR2(64),
  428. iw_local CHAR(1) NOT NULL,
  429. iw_trans CHAR(1) DEFAULT '0' NOT NULL
  430. );
  431. CREATE UNIQUE INDEX &mw_prefix.interwiki_u01 ON &mw_prefix.interwiki (iw_prefix);
  432. CREATE TABLE &mw_prefix.querycache (
  433. qc_type VARCHAR2(32) NOT NULL,
  434. qc_value NUMBER DEFAULT 0 NOT NULL,
  435. qc_namespace NUMBER DEFAULT 0 NOT NULL,
  436. qc_title VARCHAR2(255) NOT NULL
  437. );
  438. CREATE INDEX &mw_prefix.querycache_u01 ON &mw_prefix.querycache (qc_type,qc_value);
  439. CREATE TABLE &mw_prefix.objectcache (
  440. keyname VARCHAR2(255) ,
  441. value BLOB,
  442. exptime TIMESTAMP(6) WITH TIME ZONE NOT NULL
  443. );
  444. CREATE INDEX &mw_prefix.objectcache_i01 ON &mw_prefix.objectcache (exptime);
  445. CREATE TABLE &mw_prefix.transcache (
  446. tc_url VARCHAR2(255) NOT NULL,
  447. tc_contents CLOB NOT NULL,
  448. tc_time TIMESTAMP(6) WITH TIME ZONE NOT NULL
  449. );
  450. CREATE UNIQUE INDEX &mw_prefix.transcache_u01 ON &mw_prefix.transcache (tc_url);
  451. CREATE SEQUENCE logging_log_id_seq;
  452. CREATE TABLE &mw_prefix.logging (
  453. log_id NUMBER NOT NULL,
  454. log_type VARCHAR2(10) NOT NULL,
  455. log_action VARCHAR2(10) NOT NULL,
  456. log_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  457. log_user NUMBER DEFAULT 0 NOT NULL,
  458. log_user_text VARCHAR2(255),
  459. log_namespace NUMBER DEFAULT 0 NOT NULL,
  460. log_title VARCHAR2(255) NOT NULL,
  461. log_page NUMBER,
  462. log_comment VARCHAR2(255),
  463. log_params CLOB,
  464. log_deleted CHAR(1) DEFAULT '0' NOT NULL
  465. );
  466. ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_pk PRIMARY KEY (log_id);
  467. 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;
  468. CREATE INDEX &mw_prefix.logging_i01 ON &mw_prefix.logging (log_type, log_timestamp);
  469. CREATE INDEX &mw_prefix.logging_i02 ON &mw_prefix.logging (log_user, log_timestamp);
  470. CREATE INDEX &mw_prefix.logging_i03 ON &mw_prefix.logging (log_namespace, log_title, log_timestamp);
  471. CREATE INDEX &mw_prefix.logging_i04 ON &mw_prefix.logging (log_timestamp);
  472. CREATE INDEX &mw_prefix.logging_i05 ON &mw_prefix.logging (log_type, log_action, log_timestamp);
  473. CREATE INDEX &mw_prefix.logging_i06 ON &mw_prefix.logging (log_user_text, log_type, log_timestamp);
  474. CREATE INDEX &mw_prefix.logging_i07 ON &mw_prefix.logging (log_user_text, log_timestamp);
  475. CREATE TABLE &mw_prefix.log_search (
  476. ls_field VARCHAR2(32) NOT NULL,
  477. ls_value VARCHAR2(255) NOT NULL,
  478. ls_log_id NuMBER DEFAULT 0 NOT NULL
  479. );
  480. ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id);
  481. CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id);
  482. CREATE SEQUENCE job_job_id_seq;
  483. CREATE TABLE &mw_prefix.job (
  484. job_id NUMBER NOT NULL,
  485. job_cmd VARCHAR2(60) NOT NULL,
  486. job_namespace NUMBER DEFAULT 0 NOT NULL,
  487. job_title VARCHAR2(255) NOT NULL,
  488. job_timestamp TIMESTAMP(6) WITH TIME ZONE NULL,
  489. job_params CLOB NOT NULL,
  490. job_random NUMBER DEFAULT 0 NOT NULL,
  491. job_token VARCHAR2(32),
  492. job_token_timestamp TIMESTAMP(6) WITH TIME ZONE,
  493. job_sha1 VARCHAR2(32),
  494. job_attempts NUMBER DEFAULT 0 NOT NULL
  495. );
  496. ALTER TABLE &mw_prefix.job ADD CONSTRAINT &mw_prefix.job_pk PRIMARY KEY (job_id);
  497. CREATE INDEX &mw_prefix.job_i01 ON &mw_prefix.job (job_cmd, job_namespace, job_title);
  498. CREATE INDEX &mw_prefix.job_i02 ON &mw_prefix.job (job_timestamp);
  499. CREATE INDEX &mw_prefix.job_i03 ON &mw_prefix.job (job_sha1);
  500. CREATE INDEX &mw_prefix.job_i04 ON &mw_prefix.job (job_cmd,job_token,job_random);
  501. CREATE INDEX &mw_prefix.job_i05 ON &mw_prefix.job (job_attempts);
  502. CREATE TABLE &mw_prefix.querycache_info (
  503. qci_type VARCHAR2(32) NOT NULL,
  504. qci_timestamp TIMESTAMP(6) WITH TIME ZONE NULL
  505. );
  506. CREATE UNIQUE INDEX &mw_prefix.querycache_info_u01 ON &mw_prefix.querycache_info (qci_type);
  507. CREATE TABLE &mw_prefix.redirect (
  508. rd_from NUMBER NOT NULL,
  509. rd_namespace NUMBER DEFAULT 0 NOT NULL,
  510. rd_title VARCHAR2(255) NOT NULL,
  511. rd_interwiki VARCHAR2(32),
  512. rd_fragment VARCHAR2(255)
  513. );
  514. 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;
  515. CREATE INDEX &mw_prefix.redirect_i01 ON &mw_prefix.redirect (rd_namespace,rd_title,rd_from);
  516. CREATE TABLE &mw_prefix.querycachetwo (
  517. qcc_type VARCHAR2(32) NOT NULL,
  518. qcc_value NUMBER DEFAULT 0 NOT NULL,
  519. qcc_namespace NUMBER DEFAULT 0 NOT NULL,
  520. qcc_title VARCHAR2(255),
  521. qcc_namespacetwo NUMBER DEFAULT 0 NOT NULL,
  522. qcc_titletwo VARCHAR2(255)
  523. );
  524. CREATE INDEX &mw_prefix.querycachetwo_i01 ON &mw_prefix.querycachetwo (qcc_type,qcc_value);
  525. CREATE INDEX &mw_prefix.querycachetwo_i02 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespace,qcc_title);
  526. CREATE INDEX &mw_prefix.querycachetwo_i03 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
  527. CREATE SEQUENCE page_restrictions_pr_id_seq;
  528. CREATE TABLE &mw_prefix.page_restrictions (
  529. pr_id NUMBER NOT NULL,
  530. pr_page NUMBER NOT NULL,
  531. pr_type VARCHAR2(255) NOT NULL,
  532. pr_level VARCHAR2(255) NOT NULL,
  533. pr_cascade NUMBER NOT NULL,
  534. pr_user NUMBER NULL,
  535. pr_expiry TIMESTAMP(6) WITH TIME ZONE NULL
  536. );
  537. ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_id);
  538. 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;
  539. CREATE UNIQUE INDEX &mw_prefix.page_restrictions_u01 ON &mw_prefix.page_restrictions (pr_page,pr_type);
  540. CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level);
  541. CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level);
  542. CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade);
  543. CREATE TABLE &mw_prefix.protected_titles (
  544. pt_namespace NUMBER DEFAULT 0 NOT NULL,
  545. pt_title VARCHAR2(255) NOT NULL,
  546. pt_user NUMBER NOT NULL,
  547. pt_reason VARCHAR2(255),
  548. pt_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
  549. pt_expiry VARCHAR2(14) NOT NULL,
  550. pt_create_perm VARCHAR2(60) NOT NULL
  551. );
  552. CREATE UNIQUE INDEX &mw_prefix.protected_titles_u01 ON &mw_prefix.protected_titles (pt_namespace,pt_title);
  553. CREATE INDEX &mw_prefix.protected_titles_i01 ON &mw_prefix.protected_titles (pt_timestamp);
  554. CREATE TABLE &mw_prefix.page_props (
  555. pp_page NUMBER NOT NULL,
  556. pp_propname VARCHAR2(60) NOT NULL,
  557. pp_value BLOB NOT NULL
  558. );
  559. CREATE UNIQUE INDEX &mw_prefix.page_props_u01 ON &mw_prefix.page_props (pp_page,pp_propname);
  560. CREATE TABLE &mw_prefix.updatelog (
  561. ul_key VARCHAR2(255) NOT NULL,
  562. ul_value BLOB
  563. );
  564. ALTER TABLE &mw_prefix.updatelog ADD CONSTRAINT &mw_prefix.updatelog_pk PRIMARY KEY (ul_key);
  565. CREATE TABLE &mw_prefix.change_tag (
  566. ct_rc_id NUMBER NULL,
  567. ct_log_id NUMBER NULL,
  568. ct_rev_id NUMBER NULL,
  569. ct_tag VARCHAR2(255) NOT NULL,
  570. ct_params BLOB NULL
  571. );
  572. CREATE UNIQUE INDEX &mw_prefix.change_tag_u01 ON &mw_prefix.change_tag (ct_rc_id,ct_tag);
  573. CREATE UNIQUE INDEX &mw_prefix.change_tag_u02 ON &mw_prefix.change_tag (ct_log_id,ct_tag);
  574. CREATE UNIQUE INDEX &mw_prefix.change_tag_u03 ON &mw_prefix.change_tag (ct_rev_id,ct_tag);
  575. CREATE INDEX &mw_prefix.change_tag_i01 ON &mw_prefix.change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
  576. CREATE TABLE &mw_prefix.tag_summary (
  577. ts_rc_id NUMBER NULL,
  578. ts_log_id NUMBER NULL,
  579. ts_rev_id NUMBER NULL,
  580. ts_tags BLOB NOT NULL
  581. );
  582. CREATE UNIQUE INDEX &mw_prefix.tag_summary_u01 ON &mw_prefix.tag_summary (ts_rc_id);
  583. CREATE UNIQUE INDEX &mw_prefix.tag_summary_u02 ON &mw_prefix.tag_summary (ts_log_id);
  584. CREATE UNIQUE INDEX &mw_prefix.tag_summary_u03 ON &mw_prefix.tag_summary (ts_rev_id);
  585. CREATE TABLE &mw_prefix.valid_tag (
  586. vt_tag VARCHAR2(255) NOT NULL
  587. );
  588. ALTER TABLE &mw_prefix.valid_tag ADD CONSTRAINT &mw_prefix.valid_tag_pk PRIMARY KEY (vt_tag);
  589. -- This table is not used unless profiling is turned on
  590. --CREATE TABLE &mw_prefix.profiling (
  591. -- pf_count NUMBER DEFAULT 0 NOT NULL,
  592. -- pf_time NUMBER(18,10) DEFAULT 0 NOT NULL,
  593. -- pf_memory NUMBER(18,10) DEFAULT 0 NOT NULL,
  594. -- pf_name VARCHAR2(255),
  595. -- pf_server VARCHAR2(30)
  596. --);
  597. --CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server);
  598. CREATE INDEX &mw_prefix.si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context;
  599. CREATE INDEX &mw_prefix.si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context;
  600. CREATE TABLE &mw_prefix.l10n_cache (
  601. lc_lang varchar2(32) NOT NULL,
  602. lc_key varchar2(255) NOT NULL,
  603. lc_value clob NOT NULL
  604. );
  605. CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key);
  606. CREATE TABLE &mw_prefix.module_deps (
  607. md_module VARCHAR2(255) NOT NULL,
  608. md_skin VARCHAR2(32) NOT NULL,
  609. md_deps BLOB NOT NULL
  610. );
  611. CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
  612. CREATE SEQUENCE sites_site_id_seq MINVALUE 0 START WITH 0;
  613. CREATE TABLE &mw_prefix.sites (
  614. site_id NUMBER NOT NULL,
  615. site_global_key VARCHAR2(32) NOT NULL,
  616. site_type VARCHAR2(32) NOT NULL,
  617. site_group VARCHAR2(32) NOT NULL,
  618. site_source VARCHAR2(32) NOT NULL,
  619. site_language VARCHAR2(32) NOT NULL,
  620. site_protocol VARCHAR2(32) NOT NULL,
  621. site_domain VARCHAR2(255) NOT NULL,
  622. site_data BLOB NOT NULL,
  623. site_forward NUMBER(1) NOT NULL,
  624. site_config BLOB NOT NULL
  625. );
  626. ALTER TABLE &mw_prefix.sites ADD CONSTRAINT &mw_prefix.sites_pk PRIMARY KEY (site_id);
  627. CREATE UNIQUE INDEX &mw_prefix.sites_u01 ON &mw_prefix.sites (site_global_key);
  628. CREATE INDEX &mw_prefix.sites_i01 ON &mw_prefix.sites (site_type);
  629. CREATE INDEX &mw_prefix.sites_i02 ON &mw_prefix.sites (site_group);
  630. CREATE INDEX &mw_prefix.sites_i03 ON &mw_prefix.sites (site_source);
  631. CREATE INDEX &mw_prefix.sites_i04 ON &mw_prefix.sites (site_language);
  632. CREATE INDEX &mw_prefix.sites_i05 ON &mw_prefix.sites (site_protocol);
  633. CREATE INDEX &mw_prefix.sites_i06 ON &mw_prefix.sites (site_domain);
  634. CREATE INDEX &mw_prefix.sites_i07 ON &mw_prefix.sites (site_forward);
  635. CREATE TABLE &mw_prefix.site_identifiers (
  636. si_site NUMBER NOT NULL,
  637. si_type VARCHAR2(32) NOT NULL,
  638. si_key VARCHAR2(32) NOT NULL
  639. );
  640. CREATE UNIQUE INDEX &mw_prefix.site_identifiers_u01 ON &mw_prefix.site_identifiers (si_type, si_key);
  641. CREATE INDEX &mw_prefix.site_identifiers_i01 ON &mw_prefix.site_identifiers (si_site);
  642. CREATE INDEX &mw_prefix.site_identifiers_i02 ON &mw_prefix.site_identifiers (si_key);
  643. -- do not prefix this table as it breaks parserTests
  644. CREATE TABLE wiki_field_info_full (
  645. table_name VARCHAR2(35) NOT NULL,
  646. column_name VARCHAR2(35) NOT NULL,
  647. data_default VARCHAR2(4000),
  648. data_length NUMBER NOT NULL,
  649. data_type VARCHAR2(106),
  650. not_null CHAR(1) NOT NULL,
  651. prim NUMBER(1),
  652. uniq NUMBER(1),
  653. nonuniq NUMBER(1)
  654. );
  655. ALTER TABLE wiki_field_info_full ADD CONSTRAINT wiki_field_info_full_pk PRIMARY KEY (table_name, column_name);
  656. /*$mw$*/
  657. CREATE PROCEDURE fill_wiki_info IS
  658. BEGIN
  659. DELETE wiki_field_info_full;
  660. FOR x_rec IN (SELECT t.table_name table_name, t.column_name,
  661. t.data_default, t.data_length, t.data_type,
  662. DECODE (t.nullable, 'Y', '1', 'N', '0') not_null,
  663. (SELECT 1
  664. FROM user_cons_columns ucc,
  665. user_constraints uc
  666. WHERE ucc.table_name = t.table_name
  667. AND ucc.column_name = t.column_name
  668. AND uc.constraint_name = ucc.constraint_name
  669. AND uc.constraint_type = 'P'
  670. AND ROWNUM < 2) prim,
  671. (SELECT 1
  672. FROM user_ind_columns uic,
  673. user_indexes ui
  674. WHERE uic.table_name = t.table_name
  675. AND uic.column_name = t.column_name
  676. AND ui.index_name = uic.index_name
  677. AND ui.uniqueness = 'UNIQUE'
  678. AND ROWNUM < 2) uniq,
  679. (SELECT 1
  680. FROM user_ind_columns uic,
  681. user_indexes ui
  682. WHERE uic.table_name = t.table_name
  683. AND uic.column_name = t.column_name
  684. AND ui.index_name = uic.index_name
  685. AND ui.uniqueness = 'NONUNIQUE'
  686. AND ROWNUM < 2) nonuniq
  687. FROM user_tab_columns t, user_tables ut
  688. WHERE ut.table_name = t.table_name)
  689. LOOP
  690. INSERT INTO wiki_field_info_full
  691. (table_name, column_name,
  692. data_default, data_length,
  693. data_type, not_null, prim,
  694. uniq, nonuniq
  695. )
  696. VALUES (x_rec.table_name, x_rec.column_name,
  697. x_rec.data_default, x_rec.data_length,
  698. x_rec.data_type, x_rec.not_null, x_rec.prim,
  699. x_rec.uniq, x_rec.nonuniq
  700. );
  701. END LOOP;
  702. COMMIT;
  703. END;
  704. /*$mw$*/
  705. /*$mw$*/
  706. CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname IN VARCHAR2,
  707. p_oldprefix IN VARCHAR2,
  708. p_newprefix IN VARCHAR2,
  709. p_temporary IN BOOLEAN) IS
  710. e_table_not_exist EXCEPTION;
  711. PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
  712. l_temp_ei_sql VARCHAR2(2000);
  713. l_temporary BOOLEAN := p_temporary;
  714. BEGIN
  715. BEGIN
  716. EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
  717. ' CASCADE CONSTRAINTS PURGE';
  718. EXCEPTION
  719. WHEN e_table_not_exist THEN
  720. NULL;
  721. END;
  722. IF (p_tabname = 'SEARCHINDEX') THEN
  723. l_temporary := FALSE;
  724. END IF;
  725. IF (l_temporary) THEN
  726. EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
  727. p_tabname ||
  728. ' ON COMMIT PRESERVE ROWS AS SELECT * FROM ' ||
  729. p_oldprefix || p_tabname || ' WHERE ROWNUM = 0';
  730. ELSE
  731. EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
  732. ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
  733. ' WHERE ROWNUM = 0';
  734. END IF;
  735. FOR rc IN (SELECT column_name, data_default
  736. FROM user_tab_columns
  737. WHERE table_name = p_oldprefix || p_tabname
  738. AND data_default IS NOT NULL) LOOP
  739. EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
  740. ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
  741. SUBSTR(rc.data_default, 1, 2000);
  742. END LOOP;
  743. FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
  744. constraint_name),
  745. 32767,
  746. 1),
  747. USER || '"."' || p_oldprefix,
  748. USER || '"."' || p_newprefix),
  749. '"' || constraint_name || '"',
  750. '"' || p_newprefix || constraint_name || '"') DDLVC2,
  751. constraint_name
  752. FROM user_constraints uc
  753. WHERE table_name = p_oldprefix || p_tabname
  754. AND constraint_type = 'P') LOOP
  755. l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
  756. l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
  757. 1,
  758. INSTR(l_temp_ei_sql,
  759. ')',
  760. INSTR(l_temp_ei_sql, 'PRIMARY KEY') + 1) + 1);
  761. IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
  762. EXECUTE IMMEDIATE l_temp_ei_sql;
  763. END IF;
  764. END LOOP;
  765. IF (NOT l_temporary) THEN
  766. FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
  767. constraint_name),
  768. 32767,
  769. 1),
  770. USER || '"."' || p_oldprefix,
  771. USER || '"."' || p_newprefix) DDLVC2,
  772. constraint_name
  773. FROM user_constraints uc
  774. WHERE table_name = p_oldprefix || p_tabname
  775. AND constraint_type = 'R') LOOP
  776. IF nvl(length(l_temp_ei_sql), 0) > 0 AND
  777. INSTR(l_temp_ei_sql, 'PRIMARY KEY') = 0 THEN
  778. EXECUTE IMMEDIATE l_temp_ei_sql;
  779. END IF;
  780. END LOOP;
  781. END IF;
  782. FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
  783. index_name),
  784. 32767,
  785. 1),
  786. USER || '"."' || p_oldprefix,
  787. USER || '"."' || p_newprefix),
  788. '"' || index_name || '"',
  789. '"' || p_newprefix || index_name || '"') DDLVC2,
  790. index_name,
  791. index_type
  792. FROM user_indexes ui
  793. WHERE table_name = p_oldprefix || p_tabname
  794. AND index_type NOT IN ('LOB', 'DOMAIN')
  795. AND NOT EXISTS
  796. (SELECT NULL
  797. FROM user_constraints
  798. WHERE table_name = ui.table_name
  799. AND constraint_name = ui.index_name)) LOOP
  800. l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
  801. l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
  802. 1,
  803. INSTR(l_temp_ei_sql,
  804. ')',
  805. INSTR(l_temp_ei_sql,
  806. '"' || USER || '"."' || p_newprefix || '"') + 1) + 1);
  807. IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
  808. EXECUTE IMMEDIATE l_temp_ei_sql;
  809. END IF;
  810. END LOOP;
  811. FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
  812. index_name),
  813. 32767,
  814. 1),
  815. USER || '"."' || p_oldprefix,
  816. USER || '"."' || p_newprefix),
  817. '"' || index_name || '"',
  818. '"' || p_newprefix || index_name || '"') DDLVC2,
  819. index_name,
  820. index_type
  821. FROM user_indexes ui
  822. WHERE table_name = p_oldprefix || p_tabname
  823. AND index_type = 'DOMAIN'
  824. AND NOT EXISTS
  825. (SELECT NULL
  826. FROM user_constraints
  827. WHERE table_name = ui.table_name
  828. AND constraint_name = ui.index_name)) LOOP
  829. l_temp_ei_sql := rc.ddlvc2;
  830. IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
  831. EXECUTE IMMEDIATE l_temp_ei_sql;
  832. END IF;
  833. END LOOP;
  834. FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
  835. trigger_name),
  836. 32767,
  837. 1)),
  838. USER || '"."' || p_oldprefix,
  839. USER || '"."' || p_newprefix),
  840. ' ON ' || p_oldprefix || p_tabname,
  841. ' ON ' || p_newprefix || p_tabname) DDLVC2,
  842. trigger_name
  843. FROM user_triggers
  844. WHERE table_name = p_oldprefix || p_tabname) LOOP
  845. l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
  846. IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
  847. EXECUTE IMMEDIATE l_temp_ei_sql;
  848. END IF;
  849. END LOOP;
  850. END;
  851. /*$mw$*/
  852. /*$mw$*/
  853. CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS
  854. BEGIN
  855. RETURN (x + y - BITAND(x, y));
  856. END;
  857. /*$mw$*/
  858. /*$mw$*/
  859. CREATE OR REPLACE FUNCTION BITNOT (x IN NUMBER) RETURN NUMBER AS
  860. BEGIN
  861. RETURN (4294967295 - x);
  862. END;
  863. /*$mw$*/
  864. CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
  865. /*$mw$*/
  866. CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS
  867. v_line VARCHAR2(255);
  868. v_status INTEGER := 0;
  869. BEGIN
  870. LOOP
  871. DBMS_OUTPUT.GET_LINE(v_line, v_status);
  872. IF (v_status = 0) THEN RETURN; END IF;
  873. PIPE ROW (v_line);
  874. END LOOP;
  875. RETURN;
  876. EXCEPTION
  877. WHEN OTHERS THEN
  878. RETURN;
  879. END;
  880. /*$mw$*/
  881. /*$mw$*/
  882. CREATE OR REPLACE FUNCTION GET_SEQUENCE_VALUE(seq IN VARCHAR2) RETURN NUMBER AS
  883. v_value NUMBER;
  884. BEGIN
  885. EXECUTE IMMEDIATE 'SELECT '||seq||'.NEXTVAL INTO :outVar FROM DUAL' INTO v_value;
  886. RETURN v_value;
  887. END;
  888. /*$mw$*/