mediawiki-extensions-Echo/db_patches/patch-event_variant_nullability.sqlite.sql
Erik Bernhardson 68a4587460 Repairs necessary for echo to support Sqlite
Sqlite's lack of an 'ALTER TABLE CHANGE' statement has prevented echo from
supporting sqlite, and by relation has prevented Echo's unit tests from
running within the foundations jenkins CI environment.  This patch detects
if the database is currently an sqlite database and applies a specially
formulated patch that performs a rename/copy/delete operation to get
the equivilient of an 'ALTER TABLE CHANGE' command. Additionally renames
one index to have a more unique echo-specific name.

Bug: 41987
Change-Id: I9b6468221ba6fe501b15c563f3301694262eec65
2013-06-13 14:34:33 -07:00

34 lines
1.4 KiB
SQL

-- Sqlites alter table statement can NOT change existing columns. The only
-- option since we need to change the nullability of event_variant is to
-- recreate the table and copy the data over.
-- Rename current table to temporary name
ALTER TABLE /*_*/echo_event RENAME TO /*_*/temp_echo_event_variant_nullability;
-- Recreate table using the proper nullability constraint for event_variant
CREATE TABLE /*_*/echo_event (
event_id int unsigned not null primary key auto_increment,
event_type varchar(64) binary not null,
event_variant varchar(64) binary null,
event_agent_id int unsigned null, -- The user who triggered it, if any
event_agent_ip varchar(39) binary null, -- IP address who triggered it, if any
event_page_namespace int unsigned null,
event_page_title varchar(255) binary null,
event_extra BLOB NULL
) /*$wgDBTableOptions*/;
-- Copy over all the old data into the new table
INSERT INTO /*_*/echo_event
(event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_page_namespace, event_page_title, event_extra)
SELECT
event_id, event_type, event_variant, event_agent_id, event_agent_ip, event_page_namespace, event_page_title, event_extra
FROM
/*_*/temp_echo_event_variant_nullability;
-- Drop the original table
DROP TABLE /*_*/temp_echo_event_variant_nullability;
-- recreate indexes
CREATE INDEX /*i*/echo_event_type ON /*_*/echo_event (event_type);