From 2f628ab57c994b8862eb17aba8441895da692fc7 Mon Sep 17 00:00:00 2001 From: Leons Petrazickis Date: Mon, 26 Oct 2009 16:32:31 +0000 Subject: [PATCH] - DB2 bugfix: Blob class now converted to string where appropriate - DB2 bugfix: Integer types enlarged to match MySQL (primarily, MySQL INT UNSIGNED now mapped to DB2 BIGINT) --- includes/db/DatabaseIbm_db2.php | 11 ++- maintenance/ibm_db2/tables.sql | 126 ++++++++++++++++---------------- 2 files changed, 73 insertions(+), 64 deletions(-) diff --git a/includes/db/DatabaseIbm_db2.php b/includes/db/DatabaseIbm_db2.php index b6866c5b22..5163f25d88 100644 --- a/includes/db/DatabaseIbm_db2.php +++ b/includes/db/DatabaseIbm_db2.php @@ -85,13 +85,18 @@ END; class IBM_DB2Blob { private $mData; - function __construct($data) { + public function __construct($data) { $this->mData = $data; } - function getData() { + public function getData() { return $this->mData; } + + public function __toString() + { + return $this->mData; + } } /** @@ -770,6 +775,8 @@ EOF; return "NULL"; } else if ($s instanceof Blob) { return "'".$s->fetch($s)."'"; + } else if ($s instanceof IBM_DB2Blob) { + return "'".$this->decodeBlob($s)."'"; } $s = $this->strencode($s); if ( is_numeric($s) ) { diff --git a/maintenance/ibm_db2/tables.sql b/maintenance/ibm_db2/tables.sql index 659453c518..c203104bfa 100644 --- a/maintenance/ibm_db2/tables.sql +++ b/maintenance/ibm_db2/tables.sql @@ -8,14 +8,14 @@ CREATE TABLE user ( - user_id INTEGER 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), user_newpassword VARCHAR(1024), user_newpass_time TIMESTAMP(3), user_token VARCHAR(255), - user_email VARCHAR(255), + user_email VARCHAR(1024), user_email_token VARCHAR(255), user_email_token_expires TIMESTAMP(3), user_email_authenticated TIMESTAMP(3), @@ -43,7 +43,7 @@ NULL, NULL, NULL, NULL, CURRENT_timestamp, 0); CREATE TABLE user_groups ( - ug_user INTEGER NOT NULL DEFAULT 0, + ug_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE CASCADE, ug_group VARCHAR(255) NOT NULL ); @@ -56,7 +56,7 @@ CREATE UNIQUE INDEX user_groups_include_idx CREATE TABLE user_newtalk ( -- registered users key - user_id INTEGER NOT NULL DEFAULT 0, + user_id BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE CASCADE, -- anonymous users key user_ip VARCHAR(40), @@ -71,7 +71,7 @@ CREATE UNIQUE INDEX user_newtalk_include_idx CREATE TABLE page ( - page_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + page_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), page_namespace SMALLINT NOT NULL, page_title VARCHAR(255) NOT NULL, page_restrictions VARCHAR(1024), @@ -80,8 +80,8 @@ CREATE TABLE page ( page_is_new SMALLINT NOT NULL DEFAULT 0, page_random NUMERIC(15,14) NOT NULL, page_touched TIMESTAMP(3), - page_latest INTEGER NOT NULL, -- FK? - page_len INTEGER NOT NULL + 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); @@ -96,19 +96,19 @@ CREATE UNIQUE INDEX page_name_include CREATE TABLE revision ( - rev_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), - rev_page INTEGER NOT NULL DEFAULT 0, + rev_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + rev_page BIGINT NOT NULL DEFAULT 0, -- REFERENCES page (page_id) ON DELETE CASCADE, - rev_text_id INTEGER, -- FK - rev_comment VARCHAR(1024), - rev_user INTEGER NOT NULL DEFAULT 0, + rev_text_id BIGINT, -- FK + rev_comment VARCHAR(1024), + rev_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE RESTRICT, - rev_user_text VARCHAR(255) NOT NULL, - rev_timestamp TIMESTAMP(3) NOT NULL, - rev_minor_edit SMALLINT NOT NULL DEFAULT 0, - rev_deleted SMALLINT NOT NULL DEFAULT 0, - rev_len INTEGER, - rev_parent_id INTEGER + rev_user_text VARCHAR(255) NOT NULL, + rev_timestamp TIMESTAMP(3) NOT NULL, + rev_minor_edit SMALLINT NOT NULL DEFAULT 0, + rev_deleted SMALLINT NOT NULL DEFAULT 0, + rev_len BIGINT, + rev_parent_id BIGINT DEFAULT NULL ); CREATE UNIQUE INDEX revision_unique ON revision (rev_page, rev_id); CREATE INDEX rev_text_id_idx ON revision (rev_text_id); @@ -130,7 +130,7 @@ CREATE TABLE text ( -- replaces reserved word 'text' 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 0), - pr_id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), + pr_id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0), pr_page INTEGER NOT NULL DEFAULT 0, --(used to be nullable) -- REFERENCES page (page_id) ON DELETE CASCADE, @@ -164,7 +164,7 @@ CREATE TABLE archive ( ar_title VARCHAR(255) NOT NULL, ar_text CLOB(16M) INLINE LENGTH 4096, ar_comment VARCHAR(1024), - ar_user INTEGER NOT NULL, + ar_user BIGINT NOT NULL, -- no foreign keys in MySQL -- REFERENCES user(user_id) ON DELETE SET NULL, ar_user_text VARCHAR(255) NOT NULL, @@ -184,7 +184,7 @@ CREATE INDEX archive_user_text ON archive (ar_user_text); CREATE TABLE redirect ( - rd_from INTEGER NOT NULL PRIMARY KEY, + rd_from BIGINT NOT NULL PRIMARY KEY, --REFERENCES page(page_id) ON DELETE CASCADE, rd_namespace SMALLINT NOT NULL DEFAULT 0, rd_title VARCHAR(255) NOT NULL DEFAULT '', @@ -195,7 +195,7 @@ CREATE INDEX redirect_ns_title ON redirect (rd_namespace,rd_title,rd_from); CREATE TABLE pagelinks ( - pl_from INTEGER NOT NULL DEFAULT 0, + pl_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE CASCADE, pl_namespace SMALLINT NOT NULL, pl_title VARCHAR(255) NOT NULL @@ -203,7 +203,7 @@ CREATE TABLE pagelinks ( CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title); CREATE TABLE templatelinks ( - tl_from INTEGER NOT NULL DEFAULT 0, + tl_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE CASCADE, tl_namespace SMALLINT NOT NULL, tl_title VARCHAR(255) NOT NULL @@ -212,7 +212,7 @@ CREATE UNIQUE INDEX templatelinks_unique ON templatelinks (tl_namespace,tl_title CREATE UNIQUE INDEX tl_from_idx ON templatelinks (tl_from,tl_namespace,tl_title); CREATE TABLE imagelinks ( - il_from INTEGER NOT NULL DEFAULT 0, + il_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE CASCADE, il_to VARCHAR(255) NOT NULL ); @@ -220,10 +220,12 @@ 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 INTEGER NOT NULL DEFAULT 0, + cl_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE CASCADE, cl_to VARCHAR(255) NOT NULL, - cl_sortkey VARCHAR(70), + -- cl_sortkey has to be at least 86 wide + -- in order to be compatible with the old MySQL schema from MW 1.10 + cl_sortkey VARCHAR(86), cl_timestamp TIMESTAMP(3) NOT NULL ); CREATE UNIQUE INDEX cl_from ON categorylinks (cl_from, cl_to); @@ -232,7 +234,7 @@ CREATE INDEX cl_sortkey ON categorylinks (cl_to, cl_sortkey, cl_from); CREATE TABLE externallinks ( - el_from INTEGER NOT NULL DEFAULT 0, + el_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE CASCADE, el_to VARCHAR(1024) NOT NULL, el_index VARCHAR(1024) NOT NULL @@ -246,7 +248,7 @@ CREATE INDEX externallinks_index ON externallinks (el_index); -- CREATE TABLE external_user ( -- Foreign key to user_id - eu_wiki_id INTEGER NOT NULL PRIMARY KEY, + eu_wiki_id BIGINT NOT NULL PRIMARY KEY, -- Some opaque identifier provided by the external database eu_external_id VARCHAR(255) NOT NULL @@ -261,7 +263,7 @@ CREATE UNIQUE INDEX eu_wiki_id_idx CREATE TABLE langlinks ( - ll_from INTEGER NOT NULL DEFAULT 0, + ll_from BIGINT NOT NULL DEFAULT 0, -- REFERENCES page (page_id) ON DELETE CASCADE, ll_lang VARCHAR(20), ll_title VARCHAR(255) @@ -271,10 +273,10 @@ CREATE INDEX langlinks_lang_title ON langlinks (ll_lang,ll_title); CREATE TABLE site_stats ( - ss_row_id INTEGER NOT NULL UNIQUE, - ss_total_views INTEGER DEFAULT 0, - ss_total_edits INTEGER DEFAULT 0, - ss_good_articles INTEGER DEFAULT 0, + ss_row_id BIGINT NOT NULL UNIQUE, + ss_total_views BIGINT DEFAULT 0, + ss_total_edits BIGINT DEFAULT 0, + ss_good_articles BIGINT DEFAULT 0, ss_total_pages INTEGER DEFAULT -1, ss_users INTEGER DEFAULT -1, ss_active_users INTEGER DEFAULT -1, @@ -290,9 +292,9 @@ CREATE TABLE ipblocks ( ipb_id INTEGER NOT NULL PRIMARY KEY, --DEFAULT nextval('ipblocks_ipb_id_val'), ipb_address VARCHAR(1024), - ipb_user INTEGER NOT NULL DEFAULT 0, + ipb_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, - ipb_by INTEGER NOT NULL DEFAULT 0, + ipb_by BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE CASCADE, ipb_by_text VARCHAR(255) NOT NULL DEFAULT '', ipb_reason VARCHAR(1024) NOT NULL, @@ -317,7 +319,7 @@ CREATE INDEX ipb_range ON ipblocks (ipb_range_start,ipb_range_end); CREATE TABLE image ( img_name VARCHAR(255) NOT NULL PRIMARY KEY, - img_size INTEGER NOT NULL, + img_size BIGINT NOT NULL, img_width INTEGER NOT NULL, img_height INTEGER NOT NULL, img_metadata CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '', @@ -326,7 +328,7 @@ CREATE TABLE image ( img_major_mime VARCHAR(255) DEFAULT 'unknown', img_minor_mime VARCHAR(32) DEFAULT 'unknown', img_description VARCHAR(1024) NOT NULL DEFAULT '', - img_user INTEGER NOT NULL DEFAULT 0, + img_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, img_user_text VARCHAR(255) NOT NULL DEFAULT '', img_timestamp TIMESTAMP(3), @@ -339,12 +341,12 @@ CREATE INDEX img_sha1 ON image (img_sha1); CREATE TABLE oldimage ( oi_name VARCHAR(255) NOT NULL DEFAULT '', oi_archive_name VARCHAR(255) NOT NULL, - oi_size INTEGER NOT NULL, + oi_size BIGINT NOT NULL, oi_width INTEGER NOT NULL, oi_height INTEGER NOT NULL, oi_bits SMALLINT NOT NULL, oi_description VARCHAR(1024), - oi_user INTEGER NOT NULL DEFAULT 0, + oi_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, oi_user_text VARCHAR(255) NOT NULL, oi_timestamp TIMESTAMP(3) NOT NULL, @@ -369,12 +371,12 @@ CREATE TABLE filearchive ( fa_name VARCHAR(255) NOT NULL, fa_archive_name VARCHAR(255), fa_storage_group VARCHAR(255), - fa_storage_key VARCHAR(32), - fa_deleted_user INTEGER NOT NULL DEFAULT 0, + fa_storage_key VARCHAR(64) DEFAULT '', + fa_deleted_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, fa_deleted_timestamp TIMESTAMP(3) NOT NULL, fa_deleted_reason VARCHAR(255), - fa_size INTEGER NOT NULL, + fa_size BIGINT NOT NULL, fa_width INTEGER NOT NULL, fa_height INTEGER NOT NULL, fa_metadata CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '', @@ -383,7 +385,7 @@ CREATE TABLE filearchive ( fa_major_mime VARCHAR(255) DEFAULT 'unknown', fa_minor_mime VARCHAR(255) DEFAULT 'unknown', fa_description VARCHAR(1024) NOT NULL, - fa_user INTEGER NOT NULL DEFAULT 0, + fa_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, fa_user_text VARCHAR(255) NOT NULL, fa_timestamp TIMESTAMP(3), @@ -400,7 +402,7 @@ CREATE TABLE recentchanges ( --PRIMARY KEY DEFAULT nextval('rc_rc_id_seq'), rc_timestamp TIMESTAMP(3) NOT NULL, rc_cur_time TIMESTAMP(3) NOT NULL, - rc_user INTEGER NOT NULL DEFAULT 0, + rc_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, rc_user_text VARCHAR(255) NOT NULL, rc_namespace SMALLINT NOT NULL, @@ -409,10 +411,10 @@ CREATE TABLE recentchanges ( rc_minor SMALLINT NOT NULL DEFAULT 0, rc_bot SMALLINT NOT NULL DEFAULT 0, rc_new SMALLINT NOT NULL DEFAULT 0, - rc_cur_id INTEGER NOT NULL DEFAULT 0, + rc_cur_id BIGINT NOT NULL DEFAULT 0, -- REFERENCES page(page_id) ON DELETE SET NULL, - rc_this_oldid INTEGER NOT NULL, - rc_last_oldid INTEGER NOT NULL, + rc_this_oldid BIGINT NOT NULL, + rc_last_oldid BIGINT NOT NULL, rc_type SMALLINT NOT NULL DEFAULT 0, rc_moved_to_ns SMALLINT, rc_moved_to_title VARCHAR(255), @@ -421,7 +423,7 @@ CREATE TABLE recentchanges ( rc_old_len INTEGER, rc_new_len INTEGER, rc_deleted SMALLINT NOT NULL DEFAULT 0, - rc_logid INTEGER NOT NULL DEFAULT 0, + rc_logid BIGINT NOT NULL DEFAULT 0, rc_log_type VARCHAR(255), rc_log_action VARCHAR(255), rc_params CLOB(64K) INLINE LENGTH 4096 @@ -436,7 +438,7 @@ CREATE INDEX rc_ip ON recentchanges (rc_ip); CREATE TABLE watchlist ( - wl_user INTEGER NOT NULL DEFAULT 0, + wl_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE CASCADE, wl_namespace SMALLINT NOT NULL DEFAULT 0, wl_title VARCHAR(255) NOT NULL, @@ -464,8 +466,8 @@ CREATE TABLE interwiki ( CREATE TABLE querycache ( qc_type VARCHAR(255) NOT NULL, - qc_value INTEGER NOT NULL, - qc_namespace SMALLINT 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); @@ -480,7 +482,7 @@ CREATE TABLE querycache_info ( CREATE TABLE querycachetwo ( qcc_type VARCHAR(255) NOT NULL, - qcc_value INTEGER NOT NULL DEFAULT 0, + qcc_value BIGINT NOT NULL DEFAULT 0, qcc_namespace INTEGER NOT NULL DEFAULT 0, qcc_title VARCHAR(255) NOT NULL DEFAULT '', qcc_namespacetwo INTEGER NOT NULL DEFAULT 0, @@ -501,24 +503,24 @@ CREATE INDEX objectcacache_exptime ON objectcache (exptime); CREATE TABLE transcache ( tc_url VARCHAR(255) NOT NULL UNIQUE, - tc_contents VARCHAR(255) NOT NULL, + tc_contents CLOB(64K) INLINE LENGTH 4096 NOT NULL, tc_time TIMESTAMP(3) NOT NULL ); CREATE TABLE logging ( - log_id INTEGER NOT NULL PRIMARY KEY, + log_id BIGINT NOT NULL PRIMARY KEY, --PRIMARY KEY DEFAULT nextval('log_log_id_seq'), log_type VARCHAR(32) NOT NULL, log_action VARCHAR(32) NOT NULL, log_timestamp TIMESTAMP(3) NOT NULL, - log_user INTEGER NOT NULL DEFAULT 0, + 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_namespace SMALLINT NOT NULL, log_title VARCHAR(255) NOT NULL, - log_page INTEGER, + log_page BIGINT, log_comment VARCHAR(255), log_params CLOB(64K) INLINE LENGTH 4096, log_deleted SMALLINT NOT NULL DEFAULT 0 @@ -546,7 +548,7 @@ CREATE INDEX trackback_page ON trackbacks (tb_page); CREATE TABLE job ( - job_id INTEGER NOT NULL PRIMARY KEY, + job_id BIGINT NOT NULL PRIMARY KEY, --PRIMARY KEY DEFAULT nextval('job_job_id_seq'), job_cmd VARCHAR(255) NOT NULL, job_namespace SMALLINT NOT NULL, @@ -607,7 +609,7 @@ CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title); -- hack implementation -- should be replaced with OmniFind, Contains(), etc CREATE TABLE searchindex ( - si_page int NOT NULL, + si_page BIGINT NOT NULL, si_title varchar(255) NOT NULL default '', si_text clob NOT NULL ); @@ -623,9 +625,9 @@ CREATE TABLE profiling ( CREATE UNIQUE INDEX pf_name_server ON profiling (pf_name, pf_server); CREATE TABLE protected_titles ( - pt_namespace SMALLINT NOT NULL, + pt_namespace INTEGER NOT NULL, pt_title VARCHAR(255) NOT NULL, - pt_user INTEGER NOT NULL DEFAULT 0, + pt_user BIGINT NOT NULL DEFAULT 0, -- REFERENCES user(user_id) ON DELETE SET NULL, pt_reason VARCHAR(1024), pt_timestamp TIMESTAMP(3) NOT NULL, @@ -697,7 +699,7 @@ CREATE TABLE valid_tag ( -- CREATE TABLE user_properties ( -- Foreign key to user.user_id - up_user INTEGER NOT NULL, + up_user BIGINT NOT NULL, -- Name of the option being saved. This is indexed for bulk lookup. up_property VARCHAR(32) FOR BIT DATA NOT NULL, @@ -714,7 +716,7 @@ CREATE TABLE log_search ( -- The value of the ID ls_value varchar(255) NOT NULL, -- Key to log_id - ls_log_id INTEGER 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); -- 2.20.1