Fixes to address MaxSem's comment on r106480 regarding DB2 tables.sql syntax, indentation, and capitalization:

* Made all table and column names lowercase for consistency
* Removed " from around some "identifiers". Not necessary for DB2.
* Applied consistent indentation to all table declarations
* Applied consistent indentation to all index declarations
* Moved all PRIMARY KEY clauses to their own line for consistency and max line length
* Moved all ON clauses to their own line for consistency and max line length
* Fixed vertical alignment for column names and data types, remove all other vertical alignment
* Removed commented out references to SEQUENCE values, as they are used in neither DB2 nor MySQL schemas.
* Consistent spacing around parens () and commas ,
* Capitalized all data types.
* Note: tables.sql is approaching DB2's 32k limit. It will need to be split into two files soon.
This commit is contained in:
Leons Petrazickis 2011-12-17 15:59:21 +00:00
parent dca66e1c48
commit d29ef47c76

View file

@ -1,15 +1,19 @@
-- DB2
-- IBM DB2
-- SQL to create the initial tables for the MediaWiki database.
-- This is read and executed by the install script; you should
-- not have to run it by itself unless doing a manual install.
-- This is the IBM DB2 version.
-- For information about each table, please see the notes in maintenance/tables.sql
-- Notes:
-- * DB2 will convert all table and column names to all caps internally.
-- * DB2 has a 32k limit on SQL filesize, so it may be necessary
-- to split this into two files soon.
CREATE TABLE user (
-- Needs to start with 0
user_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0),
user_id BIGINT
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0),
user_name VARCHAR(255) NOT NULL UNIQUE,
user_real_name VARCHAR(255),
user_password VARCHAR(1024),
@ -26,23 +30,30 @@ CREATE TABLE user (
user_registration TIMESTAMP(3),
user_editcount INTEGER
);
CREATE INDEX user_email_token_idx ON user (user_email_token);
--leonsp:
CREATE INDEX user_email_token_idx
ON user (user_email_token);
CREATE UNIQUE INDEX user_include_idx
ON user (user_id)
INCLUDE (user_name, user_real_name, user_password, user_newpassword, user_newpass_time, user_token,
user_email, user_email_token, user_email_token_expires, user_email_authenticated,
INCLUDE (user_name, user_real_name, user_password, user_newpassword,
user_newpass_time, user_token,
user_email, user_email_token, user_email_token_expires,
user_email_authenticated,
user_touched, user_registration, user_editcount);
CREATE UNIQUE INDEX user_email
ON user (user_email);
CREATE UNIQUE INDEX user_email ON user (user_email);
-- Create a dummy user to satisfy fk contraints especially with revisions
INSERT INTO user(
user_name, user_real_name, user_password, user_newpassword, user_newpass_time,
user_email, user_email_authenticated, user_token, user_registration, user_editcount)
user_email, user_email_authenticated, user_token, user_registration, user_editcount
)
VALUES (
'Anonymous', '', NULL, NULL, CURRENT_TIMESTAMP,
NULL, NULL, NULL, CURRENT_timestamp, 0);
NULL, NULL, NULL, CURRENT_TIMESTAMP, 0
);
CREATE TABLE user_groups (
@ -50,7 +61,9 @@ CREATE TABLE user_groups (
-- REFERENCES user(user_id) ON DELETE CASCADE,
ug_group VARCHAR(255) NOT NULL
);
CREATE INDEX user_groups_unique ON user_groups (ug_user, ug_group);
CREATE INDEX user_groups_unique
ON user_groups (ug_user, ug_group);
CREATE TABLE user_newtalk (
@ -61,16 +74,19 @@ CREATE TABLE user_newtalk (
user_ip VARCHAR(40),
user_last_timestamp TIMESTAMP(3)
);
CREATE INDEX user_newtalk_id_idx ON user_newtalk (user_id);
CREATE INDEX user_newtalk_ip_idx ON user_newtalk (user_ip);
--leonsp:
CREATE INDEX user_newtalk_id_idx
ON user_newtalk (user_id);
CREATE INDEX user_newtalk_ip_idx
ON user_newtalk (user_ip);
CREATE UNIQUE INDEX user_newtalk_include_idx
ON user_newtalk (user_id, user_ip)
INCLUDE (user_last_timestamp);
CREATE TABLE page (
page_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
page_id BIGINT
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
page_namespace SMALLINT NOT NULL,
page_title VARCHAR(255) NOT NULL,
page_restrictions VARCHAR(1024),
@ -82,10 +98,12 @@ CREATE TABLE page (
page_latest BIGINT NOT NULL, -- FK?
page_len BIGINT NOT NULL
);
CREATE UNIQUE INDEX page_unique_name ON page (page_namespace, page_title);
CREATE INDEX page_random_idx ON page (page_random);
CREATE INDEX page_len_idx ON page (page_len);
--leonsp:
CREATE UNIQUE INDEX page_unique_name
ON page (page_namespace, page_title);
CREATE INDEX page_random_idx
ON page (page_random);
CREATE INDEX page_len_idx
ON page (page_len);
CREATE UNIQUE INDEX page_id_include
ON page (page_id)
INCLUDE (page_namespace, page_title, page_restrictions, page_counter, page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len);
@ -94,8 +112,10 @@ CREATE UNIQUE INDEX page_name_include
INCLUDE (page_id, page_restrictions, page_counter, page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len);
CREATE TABLE revision (
rev_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
rev_id BIGINT
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
rev_page BIGINT NOT NULL DEFAULT 0,
-- REFERENCES page (page_id) ON DELETE CASCADE,
rev_text_id BIGINT, -- FK
@ -110,25 +130,31 @@ CREATE TABLE revision (
rev_parent_id BIGINT DEFAULT NULL,
rev_sha1 VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE UNIQUE INDEX revision_unique ON revision (rev_page, rev_id);
CREATE INDEX rev_text_id_idx ON revision (rev_text_id);
CREATE INDEX rev_timestamp_idx ON revision (rev_timestamp);
CREATE INDEX rev_user_idx ON revision (rev_user);
CREATE INDEX rev_user_text_idx ON revision (rev_user_text);
CREATE UNIQUE INDEX revision_unique
ON revision (rev_page, rev_id);
CREATE INDEX rev_text_id_idx
ON revision (rev_text_id);
CREATE INDEX rev_timestamp_idx
ON revision (rev_timestamp);
CREATE INDEX rev_user_idx
ON revision (rev_user);
CREATE INDEX rev_user_text_idx
ON revision (rev_user_text);
CREATE TABLE text ( -- replaces reserved word 'text'
old_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
old_id INTEGER
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
old_text CLOB(16M) INLINE LENGTH 4096,
old_flags VARCHAR(1024)
);
CREATE TABLE page_restrictions (
--pr_id INTEGER NOT NULL UNIQUE, --DEFAULT nextval('pr_id_val'),
--pr_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
pr_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
pr_id BIGINT
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
pr_page INTEGER NOT NULL DEFAULT 0,
--(used to be nullable)
-- REFERENCES page (page_id) ON DELETE CASCADE,
@ -140,10 +166,16 @@ CREATE TABLE page_restrictions (
--PRIMARY KEY (pr_page, pr_type)
);
--ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page, pr_type);
CREATE UNIQUE INDEX pr_pagetype ON page_restrictions (pr_page,pr_type);
CREATE INDEX pr_typelevel ON page_restrictions (pr_type,pr_level);
CREATE INDEX pr_level ON page_restrictions (pr_level);
CREATE INDEX pr_cascade ON page_restrictions (pr_cascade);
CREATE UNIQUE INDEX pr_pagetype
ON page_restrictions (pr_page, pr_type);
CREATE INDEX pr_typelevel
ON page_restrictions (pr_type, pr_level);
CREATE INDEX pr_level
ON page_restrictions (pr_level);
CREATE INDEX pr_cascade
ON page_restrictions (pr_cascade);
CREATE TABLE page_props (
pp_page INTEGER NOT NULL DEFAULT 0,
@ -152,8 +184,8 @@ CREATE TABLE page_props (
pp_value CLOB(64K) INLINE LENGTH 4096 NOT NULL,
PRIMARY KEY (pp_page, pp_propname)
);
--ALTER TABLE page_props ADD CONSTRAINT page_props_pk PRIMARY KEY (pp_page,pp_propname);
CREATE INDEX page_props_propname ON page_props (pp_propname);
CREATE INDEX page_props_propname
ON page_props (pp_propname);
@ -177,20 +209,24 @@ CREATE TABLE archive (
ar_parent_id INTEGER,
ar_sha1 VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE INDEX archive_name_title_timestamp ON archive (ar_namespace,ar_title,ar_timestamp);
CREATE INDEX archive_user_text ON archive (ar_user_text);
CREATE INDEX archive_name_title_timestamp
ON archive (ar_namespace, ar_title, ar_timestamp);
CREATE INDEX archive_user_text
ON archive (ar_user_text);
CREATE TABLE redirect (
rd_from BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
rd_from BIGINT NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--REFERENCES page(page_id) ON DELETE CASCADE,
rd_namespace SMALLINT NOT NULL DEFAULT 0,
rd_title VARCHAR(255) NOT NULL DEFAULT '',
rd_interwiki varchar(32),
rd_interwiki VARCHAR(32),
rd_fragment VARCHAR(255)
);
CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from);
CREATE INDEX redirect_ns_title
ON redirect (rd_namespace, rd_title, rd_from);
CREATE TABLE pagelinks (
@ -199,7 +235,10 @@ CREATE TABLE pagelinks (
pl_namespace SMALLINT NOT NULL,
pl_title VARCHAR(255) NOT NULL
);
CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title);
CREATE UNIQUE INDEX pagelink_unique
ON pagelinks (pl_from, pl_namespace, pl_title);
CREATE TABLE templatelinks (
tl_from BIGINT NOT NULL DEFAULT 0,
@ -207,16 +246,24 @@ CREATE TABLE templatelinks (
tl_namespace SMALLINT NOT NULL,
tl_title VARCHAR(255) NOT NULL
);
CREATE UNIQUE INDEX templatelinks_unique ON templatelinks (tl_namespace,tl_title,tl_from);
CREATE UNIQUE INDEX tl_from_idx ON templatelinks (tl_from,tl_namespace,tl_title);
CREATE UNIQUE INDEX templatelinks_unique
ON templatelinks (tl_namespace, tl_title, tl_from);
CREATE UNIQUE INDEX tl_from_idx
ON templatelinks (tl_from, tl_namespace, tl_title);
CREATE TABLE imagelinks (
il_from BIGINT NOT NULL DEFAULT 0,
-- REFERENCES page(page_id) ON DELETE CASCADE,
il_to VARCHAR(255) NOT NULL
);
CREATE UNIQUE INDEX il_from_idx ON imagelinks (il_to,il_from);
CREATE UNIQUE INDEX il_to_idx ON imagelinks (il_from,il_to);
CREATE UNIQUE INDEX il_from_idx
ON imagelinks (il_to, il_from);
CREATE UNIQUE INDEX il_to_idx
ON imagelinks (il_from, il_to);
CREATE TABLE categorylinks (
cl_from BIGINT NOT NULL DEFAULT 0,
@ -231,8 +278,10 @@ CREATE TABLE categorylinks (
cl_collation VARCHAR(32) FOR BIT DATA NOT NULL,
cl_type VARCHAR(6) FOR BIT DATA NOT NULL
);
CREATE UNIQUE INDEX cl_from ON categorylinks (cl_from, cl_to);
CREATE INDEX cl_sortkey ON categorylinks (cl_to, cl_sortkey, cl_from);
CREATE UNIQUE INDEX cl_from
ON categorylinks (cl_from, cl_to);
CREATE INDEX cl_sortkey
ON categorylinks (cl_to, cl_sortkey, cl_from);
@ -242,8 +291,11 @@ CREATE TABLE externallinks (
el_to VARCHAR(1024) NOT NULL,
el_index VARCHAR(1024) NOT NULL
);
CREATE INDEX externallinks_from_to ON externallinks (el_from,el_to);
CREATE INDEX externallinks_index ON externallinks (el_index);
CREATE INDEX externallinks_from_to
ON externallinks (el_from, el_to);
CREATE INDEX externallinks_index
ON externallinks (el_index);
--
@ -251,7 +303,8 @@ CREATE INDEX externallinks_index ON externallinks (el_index);
--
CREATE TABLE external_user (
-- Foreign key to user_id
eu_local_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
eu_local_id BIGINT NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-- Some opaque identifier provided by the external database
eu_external_id VARCHAR(255) NOT NULL
@ -271,8 +324,11 @@ CREATE TABLE langlinks (
ll_lang VARCHAR(20),
ll_title VARCHAR(255)
);
CREATE UNIQUE INDEX langlinks_unique ON langlinks (ll_from,ll_lang);
CREATE INDEX langlinks_lang_title ON langlinks (ll_lang,ll_title);
CREATE UNIQUE INDEX langlinks_unique
ON langlinks (ll_from, ll_lang);
CREATE INDEX langlinks_lang_title
ON langlinks (ll_lang, ll_title);
CREATE TABLE site_stats (
@ -287,13 +343,17 @@ CREATE TABLE site_stats (
ss_images INTEGER DEFAULT 0
);
CREATE TABLE hitcounter (
hc_id BIGINT NOT NULL
);
CREATE TABLE ipblocks (
ipb_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--DEFAULT nextval('ipblocks_ipb_id_val'),
ipb_id INTEGER NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
ipb_address VARCHAR(1024),
ipb_user BIGINT NOT NULL DEFAULT 0,
-- REFERENCES user(user_id) ON DELETE SET NULL,
@ -314,14 +374,18 @@ CREATE TABLE ipblocks (
ipb_allow_usertalk SMALLINT NOT NULL DEFAULT 0
);
CREATE INDEX ipb_address ON ipblocks (ipb_address);
CREATE INDEX ipb_user ON ipblocks (ipb_user);
CREATE INDEX ipb_range ON ipblocks (ipb_range_start,ipb_range_end);
CREATE INDEX ipb_address
ON ipblocks (ipb_address);
CREATE INDEX ipb_user
ON ipblocks (ipb_user);
CREATE INDEX ipb_range
ON ipblocks (ipb_range_start, ipb_range_end);
CREATE TABLE image (
img_name VARCHAR(255) NOT NULL PRIMARY KEY,
img_name VARCHAR(255) NOT NULL
PRIMARY KEY,
img_size BIGINT NOT NULL,
img_width INTEGER NOT NULL,
img_height INTEGER NOT NULL,
@ -337,9 +401,13 @@ CREATE TABLE image (
img_timestamp TIMESTAMP(3),
img_sha1 VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE INDEX img_size_idx ON image (img_size);
CREATE INDEX img_timestamp_idx ON image (img_timestamp);
CREATE INDEX img_sha1 ON image (img_sha1);
CREATE INDEX img_size_idx
ON image (img_size);
CREATE INDEX img_timestamp_idx
ON image (img_timestamp);
CREATE INDEX img_sha1
ON image (img_sha1);
CREATE TABLE oldimage (
oi_name VARCHAR(255) NOT NULL DEFAULT '',
@ -361,15 +429,18 @@ CREATE TABLE oldimage (
oi_sha1 VARCHAR(255) NOT NULL DEFAULT ''
--FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE
);
CREATE INDEX oi_name_timestamp ON oldimage (oi_name,oi_timestamp);
CREATE INDEX oi_name_archive_name ON oldimage (oi_name,oi_archive_name);
CREATE INDEX oi_sha1 ON oldimage (oi_sha1);
CREATE INDEX oi_name_timestamp
ON oldimage (oi_name, oi_timestamp);
CREATE INDEX oi_name_archive_name
ON oldimage (oi_name, oi_archive_name);
CREATE INDEX oi_sha1
ON oldimage (oi_sha1);
CREATE TABLE filearchive (
fa_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('filearchive_fa_id_seq'),
fa_id INTEGER NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
fa_name VARCHAR(255) NOT NULL,
fa_archive_name VARCHAR(255),
fa_storage_group VARCHAR(255),
@ -393,15 +464,20 @@ CREATE TABLE filearchive (
fa_timestamp TIMESTAMP(3),
fa_deleted SMALLINT NOT NULL DEFAULT 0
);
CREATE INDEX fa_name_time ON filearchive (fa_name, fa_timestamp);
CREATE INDEX fa_dupe ON filearchive (fa_storage_group, fa_storage_key);
CREATE INDEX fa_notime ON filearchive (fa_deleted_timestamp);
CREATE INDEX fa_nouser ON filearchive (fa_deleted_user);
CREATE INDEX fa_name_time
ON filearchive (fa_name, fa_timestamp);
CREATE INDEX fa_dupe
ON filearchive (fa_storage_group, fa_storage_key);
CREATE INDEX fa_notime
ON filearchive (fa_deleted_timestamp);
CREATE INDEX fa_nouser
ON filearchive (fa_deleted_user);
CREATE TABLE recentchanges (
rc_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('rc_rc_id_seq'),
rc_id INTEGER NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
rc_timestamp TIMESTAMP(3) NOT NULL,
rc_cur_time TIMESTAMP(3) NOT NULL,
rc_user BIGINT NOT NULL DEFAULT 0,
@ -431,11 +507,16 @@ CREATE TABLE recentchanges (
rc_params CLOB(64K) INLINE LENGTH 4096
);
CREATE INDEX rc_timestamp ON recentchanges (rc_timestamp);
CREATE INDEX rc_namespace_title ON recentchanges (rc_namespace, rc_title);
CREATE INDEX rc_cur_id ON recentchanges (rc_cur_id);
CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_timestamp);
CREATE INDEX rc_ip ON recentchanges (rc_ip);
CREATE INDEX rc_timestamp
ON recentchanges (rc_timestamp);
CREATE INDEX rc_namespace_title
ON recentchanges (rc_namespace, rc_title);
CREATE INDEX rc_cur_id
ON recentchanges (rc_cur_id);
CREATE INDEX new_name_timestamp
ON recentchanges (rc_new, rc_namespace, rc_timestamp);
CREATE INDEX rc_ip
ON recentchanges (rc_ip);
@ -446,26 +527,30 @@ CREATE TABLE watchlist (
wl_title VARCHAR(255) NOT NULL,
wl_notificationtimestamp TIMESTAMP(3)
);
CREATE UNIQUE INDEX wl_user_namespace_title ON watchlist (wl_namespace, wl_title, wl_user);
CREATE UNIQUE INDEX wl_user_namespace_title
ON watchlist (wl_namespace, wl_title, wl_user);
CREATE TABLE interwiki (
iw_prefix VARCHAR(32) NOT NULL UNIQUE,
iw_url CLOB(64K) INLINE LENGTH 4096 NOT NULL,
iw_api CLOB(64K) INLINE LENGTH 4096 NOT NULL,
iw_wikiid varchar(64) NOT NULL,
iw_wikiid VARCHAR(64) NOT NULL,
iw_local SMALLINT NOT NULL,
iw_trans SMALLINT NOT NULL DEFAULT 0
);
CREATE TABLE querycache (
qc_type VARCHAR(255) NOT NULL,
qc_value BIGINT NOT NULL,
qc_namespace INTEGER NOT NULL,
qc_title VARCHAR(255) NOT NULL
);
CREATE INDEX querycache_type_value ON querycache (qc_type, qc_value);
CREATE INDEX querycache_type_value
ON querycache (qc_type, qc_value);
@ -475,6 +560,7 @@ CREATE TABLE querycache_info (
);
CREATE TABLE querycachetwo (
qcc_type VARCHAR(255) NOT NULL,
qcc_value BIGINT NOT NULL DEFAULT 0,
@ -483,16 +569,22 @@ CREATE TABLE querycachetwo (
qcc_namespacetwo INTEGER NOT NULL DEFAULT 0,
qcc_titletwo VARCHAR(255) NOT NULL DEFAULT ''
);
CREATE INDEX querycachetwo_type_value ON querycachetwo (qcc_type, qcc_value);
CREATE INDEX querycachetwo_title ON querycachetwo (qcc_type,qcc_namespace,qcc_title);
CREATE INDEX querycachetwo_titletwo ON querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
CREATE INDEX querycachetwo_type_value
ON querycachetwo (qcc_type, qcc_value);
CREATE INDEX querycachetwo_title
ON querycachetwo (qcc_type, qcc_namespace, qcc_title);
CREATE INDEX querycachetwo_titletwo
ON querycachetwo (qcc_type, qcc_namespacetwo, qcc_titletwo);
CREATE TABLE objectcache (
keyname VARCHAR(255) NOT NULL UNIQUE, -- was nullable
value CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '',
exptime TIMESTAMP(3) NOT NULL
);
CREATE INDEX objectcacache_exptime ON objectcache (exptime);
CREATE INDEX objectcacache_exptime
ON objectcache (exptime);
@ -503,16 +595,17 @@ CREATE TABLE transcache (
);
CREATE TABLE logging (
log_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('log_log_id_seq'),
log_id BIGINT NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
log_type VARCHAR(32) NOT NULL,
log_action VARCHAR(32) NOT NULL,
log_timestamp TIMESTAMP(3) NOT NULL,
log_user BIGINT NOT NULL DEFAULT 0,
-- REFERENCES user(user_id) ON DELETE SET NULL,
-- Name of the user who performed this action
log_user_text VARCHAR(255) NOT NULL default '',
log_user_text VARCHAR(255) NOT NULL DEFAULT '',
log_namespace SMALLINT NOT NULL,
log_title VARCHAR(255) NOT NULL,
log_page BIGINT,
@ -520,25 +613,24 @@ CREATE TABLE logging (
log_params CLOB(64K) INLINE LENGTH 4096,
log_deleted SMALLINT NOT NULL DEFAULT 0
);
CREATE INDEX logging_type_name ON logging (log_type, log_timestamp);
CREATE INDEX logging_user_time ON logging (log_timestamp, log_user);
CREATE INDEX logging_page_time ON logging (log_namespace, log_title, log_timestamp);
CREATE INDEX log_user_type_time ON logging (log_user, log_type, log_timestamp);
CREATE INDEX log_page_id_time ON logging (log_page,log_timestamp);
CREATE UNIQUE INDEX "TYPE_ACTION" ON "LOGGING"
(
"LOG_TYPE",
"LOG_ACTION",
"LOG_TIMESTAMP"
)
;
CREATE INDEX logging_type_name
ON logging (log_type, log_timestamp);
CREATE INDEX logging_user_time
ON logging (log_timestamp, log_user);
CREATE INDEX logging_page_time
ON logging (log_namespace, log_title, log_timestamp);
CREATE INDEX log_user_type_time
ON logging (log_user, log_type, log_timestamp);
CREATE INDEX log_page_id_time
ON logging (log_page, log_timestamp);
CREATE UNIQUE INDEX type_action
ON logging (log_type, log_action, log_timestamp);
CREATE TABLE trackbacks (
tb_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('trackbacks_tb_id_seq'),
tb_id INTEGER NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-- foreign key also in MySQL
tb_page INTEGER,
-- REFERENCES page(page_id) ON DELETE CASCADE,
@ -547,19 +639,22 @@ CREATE TABLE trackbacks (
tb_ex CLOB(64K) INLINE LENGTH 4096,
tb_name VARCHAR(255)
);
CREATE INDEX trackback_page ON trackbacks (tb_page);
CREATE INDEX trackback_page
ON trackbacks (tb_page);
CREATE TABLE job (
job_id BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('job_job_id_seq'),
job_id BIGINT NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
job_cmd VARCHAR(255) NOT NULL,
job_namespace SMALLINT NOT NULL,
job_title VARCHAR(255) NOT NULL,
job_params CLOB(64K) INLINE LENGTH 4096 NOT NULL
);
CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
CREATE INDEX job_cmd_namespace_title
ON job (job_cmd, job_namespace, job_title);
--TODO
@ -569,14 +664,18 @@ CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
-- SELECT 1;
--$mw$;
-- hack implementation
-- should be replaced with OmniFind, Contains(), etc
CREATE TABLE searchindex (
si_page BIGINT NOT NULL,
si_title varchar(255) NOT NULL default '',
si_text clob NOT NULL
si_title VARCHAR(255) NOT NULL DEFAULT '',
si_text CLOB NOT NULL
);
-- This table is not used unless profiling is turned on
CREATE TABLE profiling (
pf_count INTEGER NOT NULL DEFAULT 0,
@ -585,7 +684,10 @@ CREATE TABLE profiling (
pf_name VARCHAR(255) NOT NULL,
pf_server VARCHAR(255)
);
CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server);
CREATE UNIQUE INDEX pf_name_server
ON profiling (pf_name, pf_server);
CREATE TABLE protected_titles (
pt_namespace INTEGER NOT NULL,
@ -597,42 +699,52 @@ CREATE TABLE protected_titles (
pt_expiry TIMESTAMP(3),
pt_create_perm VARCHAR(60) NOT NULL DEFAULT ''
);
CREATE UNIQUE INDEX protected_titles_unique ON protected_titles(pt_namespace, pt_title);
CREATE UNIQUE INDEX protected_titles_unique
ON protected_titles (pt_namespace, pt_title);
CREATE TABLE updatelog (
ul_key VARCHAR(255) NOT NULL PRIMARY KEY
ul_key VARCHAR(255) NOT NULL
PRIMARY KEY
);
CREATE TABLE category (
cat_id INTEGER NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
--PRIMARY KEY DEFAULT nextval('category_id_seq'),
cat_id INTEGER NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
cat_title VARCHAR(255) NOT NULL,
cat_pages INTEGER NOT NULL DEFAULT 0,
cat_subcats INTEGER NOT NULL DEFAULT 0,
cat_files INTEGER NOT NULL DEFAULT 0,
cat_hidden SMALLINT NOT NULL DEFAULT 0
);
CREATE UNIQUE INDEX category_title ON category(cat_title);
CREATE INDEX category_pages ON category(cat_pages);
CREATE UNIQUE INDEX category_title
ON category (cat_title);
CREATE INDEX category_pages
ON category (cat_pages);
-- added for 1.15
-- A table to track tags for revisions, logs and recent changes.
CREATE TABLE change_tag (
ct_rc_id INTEGER,
ct_log_id INTEGER,
ct_rev_id INTEGER,
ct_tag varchar(255) NOT NULL,
ct_tag VARCHAR(255) NOT NULL,
ct_params CLOB(64K) INLINE LENGTH 4096
);
CREATE UNIQUE INDEX change_tag_rc_tag ON change_tag (ct_rc_id,ct_tag);
CREATE UNIQUE INDEX change_tag_log_tag ON change_tag (ct_log_id,ct_tag);
CREATE UNIQUE INDEX change_tag_rev_tag ON change_tag (ct_rev_id,ct_tag);
CREATE UNIQUE INDEX change_tag_rc_tag
ON change_tag (ct_rc_id, ct_tag);
CREATE UNIQUE INDEX change_tag_log_tag
ON change_tag (ct_log_id, ct_tag);
CREATE UNIQUE INDEX change_tag_rev_tag
ON change_tag (ct_rev_id, ct_tag);
-- Covering index, so we can pull all the info only out of the index.
CREATE INDEX change_tag_tag_id ON change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
CREATE INDEX change_tag_tag_id
ON change_tag (ct_tag, ct_rc_id, ct_rev_id, ct_log_id);
-- Rollup table to pull a LIST of tags simply
@ -642,20 +754,27 @@ CREATE TABLE tag_summary (
ts_rev_id INTEGER,
ts_tags CLOB(64K) INLINE LENGTH 4096 NOT NULL
);
CREATE UNIQUE INDEX tag_summary_rc_id ON tag_summary (ts_rc_id);
CREATE UNIQUE INDEX tag_summary_log_id ON tag_summary (ts_log_id);
CREATE UNIQUE INDEX tag_summary_rev_id ON tag_summary (ts_rev_id);
CREATE UNIQUE INDEX tag_summary_rc_id
ON tag_summary (ts_rc_id);
CREATE UNIQUE INDEX tag_summary_log_id
ON tag_summary (ts_log_id);
CREATE UNIQUE INDEX tag_summary_rev_id
ON tag_summary (ts_rev_id);
CREATE TABLE valid_tag (
vt_tag varchar(255) NOT NULL PRIMARY KEY
vt_tag VARCHAR(255) NOT NULL
PRIMARY KEY
);
--
-- User preferences and perhaps other fun stuff. :)
-- Replaces the old user.user_options blob, with a couple nice properties:
--
-- 1) We only store non-default settings, so changes to the defaults
-- 1) We only store non-default settings, so changes to the DEFAULTs
-- are now reflected for everybody, not just new accounts.
-- 2) We can more easily do bulk lookups, statistics, or modifications of
-- saved options since it's a sane table structure.
@ -663,26 +782,30 @@ CREATE TABLE valid_tag (
CREATE TABLE user_properties (
-- Foreign key to user.user_id
up_user BIGINT NOT NULL,
-- Name of the option being saved. This is indexed for bulk lookup.
up_property VARCHAR(255) FOR BIT DATA NOT NULL,
-- Property value as a string.
up_value CLOB(64K) INLINE LENGTH 4096
);
CREATE UNIQUE INDEX user_properties_user_property ON user_properties (up_user,up_property);
CREATE INDEX user_properties_property ON user_properties (up_property);
CREATE UNIQUE INDEX user_properties_user_property
ON user_properties (up_user, up_property);
CREATE INDEX user_properties_property
ON user_properties (up_property);
CREATE TABLE log_search (
-- The type of ID (rev ID, log ID, rev TIMESTAMP(3), username)
ls_field VARCHAR(32) FOR BIT DATA NOT NULL,
-- The value of the ID
ls_value varchar(255) NOT NULL,
ls_value VARCHAR(255) NOT NULL,
-- Key to log_id
ls_log_id BIGINT NOT NULL default 0
ls_log_id BIGINT NOT NULL DEFAULT 0
);
CREATE UNIQUE INDEX ls_field_val ON log_search (ls_field,ls_value,ls_log_id);
CREATE INDEX ls_log_id ON log_search (ls_log_id);
CREATE UNIQUE INDEX ls_field_val
ON log_search (ls_field, ls_value, ls_log_id);
CREATE INDEX ls_log_id
ON log_search (ls_log_id);
-- Table for storing localisation data
CREATE TABLE l10n_cache (
@ -693,132 +816,123 @@ CREATE TABLE l10n_cache (
-- Value
lc_value CLOB(16M) INLINE LENGTH 4096 NOT NULL
);
CREATE INDEX lc_lang_key ON l10n_cache (lc_lang, lc_key);
CREATE INDEX lc_lang_key
ON l10n_cache (lc_lang, lc_key);
CREATE TABLE "MSG_RESOURCE_LINKS"
CREATE TABLE msg_resource_links
(
"MRL_RESOURCE" VARCHAR(255) FOR BIT DATA NOT NULL ,
"MRL_MESSAGE" VARCHAR(255) FOR BIT DATA NOT NULL
)
;
mrl_resource VARCHAR(255) FOR BIT DATA NOT NULL,
mrl_message VARCHAR(255) FOR BIT DATA NOT NULL
);
CREATE UNIQUE INDEX uq61_msg_resource_links
ON msg_resource_links (mrl_message, mrl_resource);
-- All DB2 indexes DEFAULT to allowing reverse scans
CREATE UNIQUE INDEX "UQ61_MSG_RESOURCE_LINKS" ON "MSG_RESOURCE_LINKS"
CREATE TABLE msg_resource
(
"MRL_MESSAGE",
"MRL_RESOURCE"
)
ALLOW REVERSE SCANS
;
mr_resource VARCHAR(255) FOR BIT DATA NOT NULL,
mr_lang VARCHAR(32) FOR BIT DATA NOT NULL,
mr_blob CLOB(64K) INLINE LENGTH 4096 NOT NULL,
mr_timestamp TIMESTAMP(3) NOT NULL
);
CREATE UNIQUE INDEX uq81_msg_resource
ON msg_resource (mr_resource, mr_lang);
-- All DB2 indexes DEFAULT to allowing reverse scans
CREATE TABLE "MSG_RESOURCE"
CREATE TABLE module_deps (
md_module VARCHAR(255) FOR BIT DATA NOT NULL,
md_skin VARCHAR(32) FOR BIT DATA NOT NULL,
md_deps CLOB(16M) INLINE LENGTH 4096 NOT NULL
);
CREATE UNIQUE INDEX uq96_module_deps
ON module_deps (md_module, md_skin);
-- All DB2 indexes DEFAULT to allowing reverse scans
CREATE TABLE iwlinks
(
"MR_RESOURCE" VARCHAR(255) FOR BIT DATA NOT NULL ,
"MR_LANG" VARCHAR(32) FOR BIT DATA NOT NULL ,
"MR_BLOB" BLOB NOT NULL ,
"MR_TIMESTAMP" TIMESTAMP(3) NOT NULL
)
;
iwl_from INTEGER NOT NULL,
iwl_prefix VARCHAR(20) FOR BIT DATA NOT NULL,
iwl_title VARCHAR(255) FOR BIT DATA NOT NULL
);
CREATE UNIQUE INDEX "UQ81_MSG_RESOURCE" ON "MSG_RESOURCE"
(
"MR_RESOURCE"
,"MR_LANG"
)
ALLOW REVERSE SCANS
;
CREATE TABLE "MODULE_DEPS" (
"MD_MODULE" VARCHAR(255) FOR BIT DATA NOT NULL ,
"MD_SKIN" VARCHAR(32) FOR BIT DATA NOT NULL ,
"MD_DEPS" CLOB(16M) INLINE LENGTH 4096 NOT NULL
)
;
CREATE UNIQUE INDEX "UQ96_MODULE_DEPS" ON "MODULE_DEPS"
(
"MD_MODULE"
,"MD_SKIN"
)
ALLOW REVERSE SCANS
;
CREATE TABLE "IWLINKS"
(
"IWL_FROM" INT NOT NULL ,
"IWL_PREFIX" VARCHAR(20) FOR BIT DATA NOT NULL ,
"IWL_TITLE" VARCHAR(255) FOR BIT DATA NOT NULL
)
;
--
-- Store information about newly uploaded files before they're
-- moved into the actual filestore
--
CREATE TABLE /*_*/uploadstash (
us_id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
CREATE TABLE uploadstash (
us_id BIGINT NOT NULL
PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-- the user who uploaded the file.
us_user BIGINT NOT NULL,
-- file key. this is how applications actually search for the file.
-- this might go away, or become the primary key.
us_key varchar(255) NOT NULL,
us_key VARCHAR(255) NOT NULL,
-- the original path
us_orig_path varchar(255) NOT NULL,
us_orig_path VARCHAR(255) NOT NULL,
-- the temporary path at which the file is actually stored
us_path varchar(255) NOT NULL,
us_path VARCHAR(255) NOT NULL,
-- which type of upload the file came from (sometimes)
us_source_type varchar(50),
us_source_type VARCHAR(50),
-- the date/time on which the file was added
us_timestamp TIMESTAMP(3) not null,
us_status varchar(50) not null,
us_timestamp TIMESTAMP(3) NOT NULL,
us_status VARCHAR(50) NOT NULL,
-- file properties from File::getPropsFromPath. these may prove unnecessary.
--
us_size BIGINT NOT NULL,
-- this hash comes from File::sha1Base36(), and is 31 characters
us_sha1 varchar(31) NOT NULL,
us_mime varchar(255),
us_sha1 VARCHAR(31) NOT NULL,
us_mime VARCHAR(255),
-- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
us_media_type VARCHAR(30) CONSTRAINT my_constraint CHECK (us_media_type in ('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE')) default NULL,
us_media_type VARCHAR(30)
CONSTRAINT my_constraint
CHECK (
us_media_type in (
'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA',
'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'
)
) DEFAULT NULL,
-- image-specific properties
us_image_width BIGINT,
us_image_height BIGINT,
us_image_bits integer
) /*$wgDBTableOptions*/;
us_image_bits INTEGER
);
-- sometimes there's a delete for all of a user's stuff.
CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
-- pick out files by key, enforce key uniqueness
CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
CREATE INDEX us_user
ON uploadstash (us_user);
-- pick out files by key, enforce key UNIQUEness
CREATE UNIQUE INDEX us_key
ON uploadstash (us_key);
-- the abandoned upload cleanup script needs this
CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
CREATE INDEX us_timestamp
ON uploadstash (us_timestamp);
-- Stores the groups the user has once belonged to.
-- The user may still belong these groups. Check user_groups.
CREATE TABLE user_former_groups (
ufg_user BIGINT NOT NULL DEFAULT 0,
ufg_group VARCHAR(16) FOR BIT DATA NOT NULL
);
CREATE UNIQUE INDEX ufg_user_group ON user_former_groups (ufg_user, ufg_group);
CREATE UNIQUE INDEX ufg_user_group
ON user_former_groups (ufg_user, ufg_group);
-- Table for holding configuration changes
CREATE TABLE "CONFIG"
(
"CF_NAME" VARCHAR(255) NOT NULL PRIMARY KEY,
"CF_VALUE" BLOB NOT NULL
)
;
CREATE TABLE config (
cf_name VARCHAR(255) NOT NULL
PRIMARY KEY,
cf_value CLOB(64K) INLINE LENGTH 4096 NOT NULL
);