| # Copyright 2016 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file or at |
| # https://developers.google.com/open-source/licenses/bsd |
| |
| This file contains a log of ALTER TABLE statements that need to be executed |
| to bring a Monorail SQL database up to the current schema. |
| |
| ================================================================ |
| 2012-05-24: Added more Project fields. |
| |
| ALTER TABLE Project ADD COLUMN read_only_reason VARCHAR(80); |
| ALTER TABLE Project ADD COLUMN issue_notify_address VARCHAR(80); |
| ALTER TABLE Project ADD COLUMN attachment_bytes_used INT DEFAULT 0; |
| ALTER TABLE Project ADD COLUMN attachment_quota INT DEFAULT 52428800; |
| ALTER TABLE Project ADD COLUMN moved_to VARCHAR(250); |
| ALTER TABLE Project ADD COLUMN process_inbound_email BOOLEAN DEFAULT FALSE; |
| |
| ================================================================ |
| 2012-06-01: Added inbound_message for issue comments |
| |
| ALTER TABLE Comment ADD COLUMN inbound_message TEXT; |
| |
| |
| ================================================================ |
| 2012-06-05: Removed send_notifications_from_user because Monorail will |
| not offer that feature any time soon. |
| |
| ALTER TABLE ProjectIssueConfig DROP COLUMN send_notifications_from_user; |
| |
| |
| ================================================================ |
| 2012-06-05: Add initial subscription options. |
| |
| ALTER TABLE User2SavedQuery ADD COLUMN subscription_mode |
| ENUM ('noemail', 'immediate') DEFAULT 'noemail' NOT NULL; |
| |
| |
| ================================================================ |
| 2012-07-02: Revised project states and added state_reason and delete_time |
| |
| ALTER TABLE Project MODIFY COLUMN state ENUM ('live', 'archived', 'deletable') |
| NOT NULL; |
| |
| ALTER TABLE Project ADD COLUMN state_reason VARCHAR(80); |
| ALTER TABLE Project ADD COLUMN delete_time INT; |
| |
| |
| ================================================================ |
| 2012-07-05: Added action limits and dismissed cues |
| |
| CREATE TABLE ActionLimit ( |
| user_id INT NOT NULL AUTO_INCREMENT, |
| action_kind ENUM ( |
| 'project_creation', 'issue_comment', 'issue_attachment', |
| 'issue_bulk_edit'), |
| recent_count INT, |
| reset_timestamp INT, |
| lifetime_count INT, |
| lifetime_limit INT, |
| |
| PRIMARY KEY (user_id, action_kind) |
| ) ENGINE=INNODB; |
| |
| |
| CREATE TABLE DismissedCues ( |
| user_id INT NOT NULL AUTO_INCREMENT, |
| cue VARCHAR(40), -- names of the cue cards that the user has dismissed. |
| |
| INDEX (user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ALTER TABLE User ADD COLUMN ignore_action_limits BOOLEAN DEFAULT FALSE; |
| |
| ================================================================ |
| 2012-07-11: No longer using Counter table. |
| |
| DROP TABLE Counter; |
| |
| ================================================================ |
| 2012-09-06: Drop AttachmentContent, put blobkey in Attachment |
| and drop some redundant columns. |
| |
| Note: This loses attachment data that might currently be in your |
| instance. Good thing these schema refinements are getting done |
| before launch. |
| |
| ALTER TABLE Attachment DROP COLUMN attachment_id; |
| ALTER TABLE Attachment DROP COLUMN comment_created; |
| ALTER TABLE Attachment ADD COLUMN blobkey VARCHAR(1024) NOT NULL; |
| |
| DROP TABLE AttachmentContent; |
| |
| ALTER TABLE IssueUpdate DROP COLUMN comment_created; |
| |
| |
| ================================================================ |
| 2012-11-01: Add Components to IssueUpdate enum. |
| |
| alter table IssueUpdate modify field ENUM ('summary', 'status', 'owner', |
| 'cc', 'labels', 'blockedon', 'blocking', 'mergedinto', 'project', |
| 'components') NOT NULL; |
| |
| |
| ================================================================ |
| 2012-12-10: Add template admins and field admins |
| |
| |
| CREATE TABLE FieldDef2Admin ( |
| field_id INT NOT NULL, |
| admin_id INT NOT NULL, |
| |
| PRIMARY KEY (field_id, admin_id), |
| FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (admin_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Template2Admin ( |
| template_id INT NOT NULL, |
| admin_id INT NOT NULL, |
| |
| PRIMARY KEY (template_id, admin_id), |
| FOREIGN KEY (template_id) REFERENCES Template(id), |
| FOREIGN KEY (admin_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2012-12-14: Add a table of custom field values |
| |
| ALTER TABLE FieldDef MODIFY field_type ENUM ( |
| 'enum_type', 'int_type', 'str_type', 'user_type') NOT NULL; |
| |
| CREATE TABLE Issue2FieldValue ( |
| iid INT NOT NULL, |
| field_id INT NOT NULL, |
| |
| int_value INT, |
| str_value VARCHAR(1024), |
| user_id INT, |
| |
| derived BOOLEAN DEFAULT FALSE, |
| |
| INDEX (iid, field_id), |
| INDEX (field_id, int_value), |
| INDEX (field_id, str_value), |
| INDEX (field_id, user_id), |
| |
| FOREIGN KEY (iid) REFERENCES Issue(id), |
| -- FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2012-12-18: persistence for update objects on custom fields |
| |
| ALTER TABLE IssueUpdate MODIFY field ENUM ( |
| 'summary', 'status', 'owner', 'cc', 'labels', 'blockedon', 'blocking', 'mergedinto', |
| 'project', 'components', 'custom' ) NOT NULL; |
| |
| ALTER TABLE IssueUpdate ADD custom_field_name VARCHAR(255); |
| |
| |
| ================================================================ |
| 2012-12-27: Rename component owner to component admin |
| |
| DROP TABLE Component2Owner; |
| |
| CREATE TABLE Component2Admin ( |
| component_id SMALLINT UNSIGNED NOT NULL, |
| admin_id INT NOT NULL, |
| |
| PRIMARY KEY (component_id, admin_id), |
| |
| FOREIGN KEY (component_id) REFERENCES ComponentDef(id), |
| FOREIGN KEY (admin_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2013-01-20: add field applicability predicate |
| |
| ALTER TABLE FieldDef ADD applicable_type VARCHAR(80); |
| ALTER TABLE FieldDef ADD applicable_predicate TEXT; |
| |
| ================================================================ |
| 2013-01-25: add field validation details |
| |
| ALTER TABLE FieldDef ADD max_value INT; |
| ALTER TABLE FieldDef ADD min_value INT; |
| ALTER TABLE FieldDef ADD regex VARCHAR(80); |
| ALTER TABLE FieldDef ADD needs_member BOOLEAN; |
| ALTER TABLE FieldDef ADD needs_perm VARCHAR(80); |
| |
| |
| ================================================================ |
| 2013-02-11: add grant and notify to user-valued fields |
| |
| ALTER TABLE FieldDef ADD grants_perm VARCHAR(80); |
| ALTER TABLE FieldDef ADD notify_on ENUM ('never', 'any_comment') DEFAULT 'never' NOT NULL; |
| |
| |
| ================================================================ |
| 2013-03-17: Add Template2FieldValue |
| |
| CREATE TABLE Template2FieldValue ( |
| template_id INT NOT NULL, |
| field_id INT NOT NULL, |
| |
| int_value INT, |
| str_value VARCHAR(1024), |
| user_id INT, |
| |
| INDEX (template_id, field_id), |
| |
| FOREIGN KEY (template_id) REFERENCES Template(id), |
| -- FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2013-05-08: eliminated same_org_only |
| |
| -- This needs to be done on all shards. |
| UPDATE Project SET access = 'members_only' WHERE access = 'same_org_only'; |
| ALTER TABLE Project MODIFY COLUMN access ENUM ('anyone', 'members_only'); |
| |
| ================================================================ |
| 2013-05-08: implemented recent activity timestamp |
| |
| -- This needs to be done on all shards. |
| ALTER TABLE Project ADD recent_activity_timestamp INT; |
| |
| ================================================================ |
| 2013-07-01: use BIGINT for Invalidate timesteps |
| |
| ALTER TABLE Invalidate MODIFY COLUMN timestep BIGINT NOT NULL AUTO_INCREMENT; |
| |
| |
| ================================================================ |
| 2013-07-23: renamed to avoid "participant" |
| |
| RENAME TABLE ParticipantDuty TO MemberDuty; |
| RENAME TABLE ParticipantNotes TO MemberNotes; |
| |
| ================================================================ |
| 2013-08-22: renamed issue_id to local_id |
| |
| -- On primary and all shards |
| ALTER TABLE Issue CHANGE issue_id local_id INT NOT NULL; |
| |
| -- On primary only |
| ALTER TABLE IssueFormerLocations CHANGE issue_id local_id INT NOT NULL; |
| |
| ================================================================ |
| 2013-08-24: renamed iid to issue_id |
| |
| -- On primary and all shards |
| |
| ALTER TABLE IssueSummary DROP FOREIGN KEY IssueSummary_ibfk_1; |
| ALTER TABLE IssueSummary CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE IssueSummary ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE Issue2Label DROP FOREIGN KEY Issue2Label_ibfk_1; |
| ALTER TABLE Issue2Label CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Issue2Label ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE Issue2Component DROP FOREIGN KEY Issue2Component_ibfk_1; |
| ALTER TABLE Issue2Component CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Issue2Component ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE Issue2Cc DROP FOREIGN KEY Issue2Cc_ibfk_1; |
| ALTER TABLE Issue2Cc CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Issue2Cc ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE Issue2Notify DROP FOREIGN KEY Issue2Notify_ibfk_1; |
| ALTER TABLE Issue2Notify CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Issue2Notify ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE IssueStar DROP FOREIGN KEY IssueStar_ibfk_1; |
| ALTER TABLE IssueStar CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE IssueStar ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE IssueRelation DROP FOREIGN KEY IssueRelation_ibfk_1; |
| ALTER TABLE IssueRelation CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE IssueRelation ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE IssueRelation CHANGE dst_iid dst_issue_id INT NOT NULL; |
| |
| ALTER TABLE Issue2FieldValue DROP FOREIGN KEY Issue2FieldValue_ibfk_1; |
| ALTER TABLE Issue2FieldValue CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Issue2FieldValue ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| -- On primary only |
| ALTER TABLE Comment DROP FOREIGN KEY Comment_ibfk_2; |
| ALTER TABLE Comment CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Comment ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE Attachment DROP FOREIGN KEY Attachment_ibfk_1; |
| ALTER TABLE Attachment CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE Attachment ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| ALTER TABLE IssueUpdate DROP FOREIGN KEY IssueUpdate_ibfk_1; |
| ALTER TABLE IssueUpdate CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE IssueUpdate ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| -- I was missing a foreign key constraint here. Adding now. |
| ALTER TABLE IssueFormerLocations CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE IssueFormerLocations ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| -- I was missing a foreign key constraint here. Adding now. |
| ALTER TABLE ReindexQueue CHANGE iid issue_id INT NOT NULL; |
| ALTER TABLE ReindexQueue ADD FOREIGN KEY (issue_id) REFERENCES Issue(id); |
| |
| |
| ================================================================ |
| 2013-08-30: added per-project email sending flag |
| |
| -- On primary and all shards |
| ALTER TABLE Project ADD COLUMN deliver_outbound_email BOOLEAN DEFAULT FALSE; |
| |
| |
| ================================================================ |
| 2013-10-30: renamed prompts to templates |
| |
| ALTER TABLE ProjectIssueConfig |
| CHANGE default_prompt_for_developers default_template_for_developers INT NOT NULL; |
| |
| ALTER TABLE ProjectIssueConfig |
| CHANGE default_prompt_for_users default_template_for_users INT NOT NULL; |
| |
| ALTER TABLE Template |
| CHANGE prompt_name name VARCHAR(255) NOT NULL, |
| CHANGE prompt_text content TEXT, |
| CHANGE prompt_summary summary TEXT, |
| CHANGE prompt_summary_must_be_edited summary_must_be_edited BOOLEAN, |
| CHANGE prompt_owner_id owner_id INT, |
| CHANGE prompt_status status VARCHAR(255), |
| CHANGE prompt_members_only members_only BOOLEAN; |
| |
| |
| ================================================================ |
| 2013-11-18: add LocalIDCounter to primary DB only, and fill in values. |
| |
| CREATE TABLE LocalIDCounter ( |
| project_id SMALLINT UNSIGNED NOT NULL, |
| used_local_id INT NOT NULL, |
| |
| PRIMARY KEY (project_id), |
| FOREIGN KEY (project_id) REFERENCES Project(project_id) |
| ) ENGINE=INNODB; |
| |
| |
| -- Note: this ignores former issue locations, so it can only be run |
| -- now, before the "move issue" feature is offered. |
| REPLACE INTO LocalIDCounter |
| SELECT project_id, MAX(local_id) |
| FROM Issue |
| GROUP BY project_id; |
| |
| ================================================================ |
| 2015-06-12: add issue_id to Invalidate's enum for kind. |
| |
| ALTER TABLE Invalidate CHANGE kind kind ENUM('user', 'project', 'issue', 'issue_id'); |
| |
| ================================================================ |
| 2015-07-24: Rename blobkey to gcs_object_id because we are using |
| Google Cloud storage now. |
| |
| ALTER TABLE Attachment CHANGE blobkey gcs_object_id VARCHAR(1024) NOT NULL; |
| |
| =============================================================== |
| 2015-08-14: Use MurmurHash3 to deterministically generate user ids. |
| |
| -- First, drop foreign key constraints, then alter the keys, then |
| -- add back the foreign key constraints. |
| |
| ALTER TABLE User2Project DROP FOREIGN KEY user2project_ibfk_2; |
| ALTER TABLE ExtraPerm DROP FOREIGN KEY extraperm_ibfk_2; |
| ALTER TABLE MemberNotes DROP FOREIGN KEY membernotes_ibfk_2; |
| ALTER TABLE UserStar DROP FOREIGN KEY userstar_ibfk_1; |
| ALTER TABLE UserStar DROP FOREIGN KEY userstar_ibfk_2; |
| ALTER TABLE ProjectStar DROP FOREIGN KEY projectstar_ibfk_1; |
| ALTER TABLE UserGroup DROP FOREIGN KEY usergroup_ibfk_1; |
| ALTER TABLE UserGroup DROP FOREIGN KEY usergroup_ibfk_2; |
| ALTER TABLE UserGroupSettings DROP FOREIGN KEY usergroupsettings_ibfk_1; |
| ALTER TABLE QuickEditHistory DROP FOREIGN KEY quickedithistory_ibfk_2; |
| ALTER TABLE QuickEditMostRecent DROP FOREIGN KEY quickeditmostrecent_ibfk_2; |
| ALTER TABLE Issue DROP FOREIGN KEY issue_ibfk_2; |
| ALTER TABLE Issue DROP FOREIGN KEY issue_ibfk_3; |
| ALTER TABLE Issue DROP FOREIGN KEY issue_ibfk_4; |
| ALTER TABLE Issue2Cc DROP FOREIGN KEY issue2cc_ibfk_2; |
| ALTER TABLE IssueStar DROP FOREIGN KEY issuestar_ibfk_1; -- ? |
| ALTER TABLE Issue2FieldValue DROP FOREIGN KEY issue2fieldvalue_ibfk_2; |
| ALTER TABLE Comment DROP FOREIGN KEY comment_ibfk_3; |
| ALTER TABLE Comment DROP FOREIGN KEY comment_ibfk_4; |
| ALTER TABLE FieldDef2Admin DROP FOREIGN KEY fielddef2admin_ibfk_2; |
| ALTER TABLE Template2Admin DROP FOREIGN KEY template2admin_ibfk_2; |
| ALTER TABLE Template2FieldValue DROP FOREIGN KEY template2fieldvalue_ibfk_2; |
| ALTER TABLE Component2Admin DROP FOREIGN KEY component2admin_ibfk_2; |
| ALTER TABLE Component2Cc DROP FOREIGN KEY component2cc_ibfk_2; |
| ALTER TABLE User2SavedQuery DROP FOREIGN KEY user2savedquery_ibfk_1; |
| |
| |
| ALTER TABLE User MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE ActionLimit MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE DismissedCues MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE User2Project MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE ExtraPerm MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE MemberNotes MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE UserStar MODIFY starred_user_id INT UNSIGNED NOT NULL, |
| MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE ProjectStar MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE UserGroup MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE UserGroup MODIFY group_id INT UNSIGNED NOT NULL; |
| ALTER TABLE UserGroupSettings MODIFY group_id INT UNSIGNED NOT NULL; |
| ALTER TABLE QuickEditHistory MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE QuickEditMostRecent MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Issue MODIFY reporter_id INT UNSIGNED NOT NULL, |
| MODIFY owner_id INT UNSIGNED, |
| MODIFY derived_owner_id INT UNSIGNED; |
| ALTER TABLE Issue2Cc MODIFY cc_id INT UNSIGNED NOT NULL; |
| ALTER TABLE IssueStar MODIFY user_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Issue2FieldValue MODIFY user_id INT UNSIGNED; |
| ALTER TABLE Comment MODIFY commenter_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Comment MODIFY deleted_by INT UNSIGNED; |
| ALTER TABLE IssueUpdate MODIFY added_user_id INT UNSIGNED, |
| MODIFY removed_user_id INT UNSIGNED; |
| ALTER TABLE Template MODIFY owner_id INT UNSIGNED; |
| ALTER TABLE FieldDef2Admin MODIFY admin_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Template2Admin MODIFY admin_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Template2FieldValue MODIFY user_id INT UNSIGNED; |
| ALTER TABLE Component2Admin MODIFY admin_id INT UNSIGNED NOT NULL; |
| ALTER TABLE Component2Cc MODIFY cc_id INT UNSIGNED NOT NULL; |
| ALTER TABLE User2SavedQuery MODIFY user_id INT UNSIGNED NOT NULL; |
| |
| ALTER TABLE User2Project ADD CONSTRAINT user2project_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE ExtraPerm ADD CONSTRAINT extraperm_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE MemberNotes ADD CONSTRAINT membernotes_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE UserStar ADD CONSTRAINT userstar_ibfk_1 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE UserStar ADD CONSTRAINT userstar_ibfk_2 FOREIGN KEY (starred_user_id) REFERENCES User(user_id); |
| ALTER TABLE ProjectStar ADD CONSTRAINT projectstar_ibfk_1 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE UserGroup ADD CONSTRAINT usergroup_ibfk_1 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE UserGroup ADD CONSTRAINT usergroup_ibfk_2 FOREIGN KEY (group_id) REFERENCES User(user_id); |
| ALTER TABLE UserGroupSettings ADD CONSTRAINT usergroupsettings_ibfk_1 FOREIGN KEY (group_id) REFERENCES User(user_id); |
| ALTER TABLE QuickEditHistory ADD CONSTRAINT quickedithistory_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE QuickEditMostRecent ADD CONSTRAINT quickeditmostrecent_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE Issue ADD CONSTRAINT issue_ibfk_2 FOREIGN KEY (reporter_id) REFERENCES User(user_id); |
| ALTER TABLE Issue ADD CONSTRAINT issue_ibfk_3 FOREIGN KEY (owner_id) REFERENCES User(user_id); |
| ALTER TABLE Issue ADD CONSTRAINT issue_ibfk_4 FOREIGN KEY (derived_owner_id) REFERENCES User(user_id); |
| ALTER TABLE Issue2Cc ADD CONSTRAINT issue2cc_ibfk_2 FOREIGN KEY (cc_id) REFERENCES User(user_id); |
| ALTER TABLE IssueStar ADD CONSTRAINT issuestar_ibfk_1 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE Issue2FieldValue ADD CONSTRAINT issue2fieldvalue_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE Comment ADD CONSTRAINT comment_ibfk_3 FOREIGN KEY (commenter_id) REFERENCES User(user_id); |
| ALTER TABLE Comment ADD CONSTRAINT comment_ibfk_4 FOREIGN KEY (deleted_by) REFERENCES User(user_id); |
| ALTER TABLE FieldDef2Admin ADD CONSTRAINT fielddef2admin_ibfk_2 FOREIGN KEY (admin_id) REFERENCES User(user_id); |
| ALTER TABLE Template2Admin ADD CONSTRAINT template2admin_ibfk_2 FOREIGN KEY (admin_id) REFERENCES User(user_id); |
| ALTER TABLE Template2FieldValue ADD CONSTRAINT template2fieldvalue_ibfk_2 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| ALTER TABLE Component2Admin ADD CONSTRAINT component2admin_ibfk_2 FOREIGN KEY (admin_id) REFERENCES User(user_id); |
| ALTER TABLE Component2Cc ADD CONSTRAINT component2cc_ibfk_2 FOREIGN KEY (cc_id) REFERENCES User(user_id); |
| ALTER TABLE User2SavedQuery ADD CONSTRAINT user2savedquery_ibfk_1 FOREIGN KEY (user_id) REFERENCES User(user_id); |
| |
| ================================================================ |
| 2015-08-20: Add obscure_email column to User. |
| |
| ALTER TABLE User ADD obscure_email BOOLEAN DEFAULT TRUE; |
| |
| ================================================================ |
| 2015-09-14: Add role column to UserGroup. |
| |
| ALTER TABLE UserGroup ADD COLUMN role ENUM ('owner', 'member') NOT NULL DEFAULT 'member'; |
| |
| ================================================================ |
| 2015-09-14: Remove via_id column from UserGroup. |
| |
| ALTER TABLE UserGroup DROP COLUMN via_id; |
| |
| ================================================================ |
| 2015-09-14: Add foreign key constraints to Issue2Foo tables |
| |
| ALTER TABLE Issue ADD CONSTRAINT issue_ibfk_5 FOREIGN KEY (status_id) REFERENCES StatusDef(id); |
| ALTER TABLE Issue2Component ADD CONSTRAINT issue2component_ibfk_2 FOREIGN KEY (component_id) REFERENCES ComponentDef(id); |
| ALTER TABLE Issue2Label ADD CONSTRAINT issue2label_ibfk_2 FOREIGN KEY (label_id) REFERENCES LabelDef(id); |
| ALTER TABLE Issue2FieldValue ADD CONSTRAINT issue2fieldvalue_ibfk_3 FOREIGN KEY (field_id) REFERENCES FieldDef(id); |
| |
| ================================================================ |
| 2015-09-16: Use Binary collation on Varchar unique keys |
| |
| ALTER TABLE StatusDef MODIFY status VARCHAR(80) BINARY NOT NULL; |
| ALTER TABLE ComponentDef MODIFY path VARCHAR(255) BINARY NOT NULL; |
| ALTER TABLE LabelDef MODIFY label VARCHAR(80) BINARY NOT NULL; |
| ALTER TABLE FieldDef MODIFY field_name VARCHAR(80) BINARY NOT NULL; |
| ALTER TABLE Template MODIFY name VARCHAR(255) BINARY NOT NULL; |
| |
| ================================================================ |
| 2015-09-16: Have components use the same ID schema as Labels/Statuses |
| |
| ALTER TABLE ComponentDef MODIFY id INT NOT NULL AUTO_INCREMENT; |
| ALTER TABLE Component2Admin MODIFY component_id INT NOT NULL; |
| ALTER TABLE Component2Cc MODIFY component_id INT NOT NULL; |
| ALTER TABLE Issue2Component MODIFY component_id INT NOT NULL; |
| |
| ================================================================ |
| 2015-09-17: Introduce DanglingIssueRelation table |
| |
| ALTER TABLE IssueRelation ADD CONSTRAINT issuerelation_ibfk_2 FOREIGN KEY (dst_issue_id) REFERENCES Issue(id); |
| |
| CREATE TABLE DanglingIssueRelation ( |
| issue_id INT NOT NULL, |
| dst_issue_project VARCHAR(80), |
| dst_issue_local_id INT, |
| |
| -- This table uses 'blocking' so that it can guarantee the src issue |
| -- always exists, while the dst issue is always the dangling one. |
| kind ENUM ('blockedon', 'blocking', 'mergedinto') NOT NULL, |
| |
| PRIMARY KEY (issue_id, dst_issue_project, dst_issue_local_id), |
| INDEX (issue_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2015-09-18: Convert table char encodings to utf8. |
| |
| ALTER DATABASE monorail CHARACTER SET = utf8 COLLATE = utf8_unicode_ci; |
| ALTER TABLE Comment CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE ComponentDef CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE FieldDef CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE IssueSummary CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE LabelDef CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE MemberNotes CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE Project CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| ALTER TABLE StatusDef CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; |
| |
| ================================================================ |
| 2015-09-22: Make IssueRelation primary key more specific |
| |
| ALTER TABLE IssueRelation DROP PRIMARY KEY, ADD PRIMARY KEY (issue_id, dst_issue_id, kind); |
| ALTER TABLE DanglingIssueRelation DROP PRIMARY KEY, ADD PRIMARY KEY (issue_id, dst_issue_project, dst_issue_local_id, kind); |
| |
| ================================================================ |
| 2015-09-29: Make cache_key unsigned so unsigned user ids can be invalidated. |
| |
| ALTER TABLE Invalidate MODIFY cache_key INT UNSIGNED NOT NULL; |
| |
| ================================================================ |
| 2015-09-29: Add external_group_type and external_group_name to UserGroupSettings |
| |
| ALTER TABLE UserGroupSettings ADD COLUMN external_group_type ENUM ('chrome_infra_auth', 'mdb'); |
| ALTER TABLE UserGroupSettings ADD COLUMN last_sync_time INT; |
| |
| ================================================================ |
| 2015-10-27: Eliminate Project.deliver_outbound_email because we have separate staging and prod instances. |
| |
| ALTER TABLE Project DROP COLUMN deliver_outbound_email; |
| |
| ================================================================ |
| 2015-10-27: Add SpamReport and is_spam fields to Issue and Comment |
| |
| ALTER TABLE Issue ADD COLUMN is_spam BOOL DEFAULT FALSE; |
| ALTER TABLE Issue ADD INDEX (is_spam, project_id); |
| |
| ALTER TABLE Comment ADD COLUMN is_spam BOOL DEFAULT FALSE; |
| ALTER TABLE Comment ADD INDEX (is_spam, project_id, created); |
| |
| -- Created whenever a user reports an issue or comment as spam. |
| -- Note this is distinct from a SpamVerdict, which is issued by |
| -- the system rather than a human user. |
| CREATE TABLE SpamReport ( |
| -- when this report was generated |
| created TIMESTAMP NOT NULL, |
| -- when the reported content was generated |
| content_created TIMESTAMP NOT NULL, |
| -- id of the reporting user |
| user_id INT UNSIGNED NOT NULL, |
| -- id of the reported user |
| reported_user_id INT UNSIGNED NOT NULL, |
| -- either this or issue_id must be set |
| comment_id INT, |
| -- either this or comment_id must be set |
| issue_id INT, |
| |
| INDEX (issue_id), |
| INDEX (comment_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (comment_id) REFERENCES Comment(id) |
| ); |
| |
| ================================================================ |
| 2015-11-03: Add new external group type chromium_committers |
| |
| ALTER TABLE UserGroupSettings MODIFY COLUMN external_group_type ENUM ('chrome_infra_auth', 'mdb', 'chromium_committers'); |
| |
| ================================================================ |
| 2015-11-4: Add SpamVerdict table. |
| |
| -- Any time a human or the system sets is_spam to true, |
| -- or changes it from true to false, we want to have a |
| -- record of who did it and why. |
| CREATE TABLE SpamVerdict ( |
| -- when this verdict was generated |
| created TIMESTAMP NOT NULL, |
| |
| -- id of the reporting user, may be null if it was |
| -- an automatic classification. |
| user_id INT UNSIGNED, |
| |
| -- either this or issue_id must be set |
| comment_id INT, |
| |
| -- either this or comment_id must be set |
| issue_id INT, |
| |
| INDEX (issue_id), |
| INDEX (comment_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (comment_id) REFERENCES Comment(id), |
| |
| -- If the classifier issued the verdict, this should |
| -- be set. |
| classifier_confidence FLOAT, |
| |
| -- This should reflect the new is_spam value that was applied |
| -- by this verdict, not the value it had prior. |
| is_spam BOOLEAN NOT NULL, |
| |
| -- owner: a project owner marked it as spam |
| -- threshhold: number of SpamReports from non-members was exceeded. |
| -- classifier: the automatic classifier reports it as spam. |
| reason ENUM ("manual", "threshold", "classifier") NOT NULL |
| ); |
| |
| ALTER TABLE LocalIDCounter ADD used_spam_id int(11) NOT NULL; |
| |
| ================================================================ |
| 2015-11-13: Add Template2Component table. |
| |
| CREATE TABLE Template2Component ( |
| template_id INT NOT NULL, |
| component_id INT NOT NULL, |
| |
| PRIMARY KEY (template_id, component_id), |
| |
| FOREIGN KEY (template_id) REFERENCES Template(id), |
| FOREIGN KEY (component_id) REFERENCES ComponentDef(id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2015-11-13: Add new external group type baggins |
| |
| ALTER TABLE UserGroupSettings MODIFY COLUMN external_group_type ENUM ('chrome_infra_auth', 'mdb', 'chromium_committers', 'baggins'); |
| |
| ================================================================ |
| 2015-11-18: Add new action kind api_request in ActionLimit |
| |
| ALTER TABLE ActionLimit MODIFY COLUMN action_kind ENUM ('project_creation', 'issue_comment', 'issue_attachment', 'issue_bulk_edit', 'api_request'); |
| |
| ================================================================ |
| 2015-11-24: Add shard column to Issue, add indexes, and UPDATE existing rows. |
| |
| ALTER TABLE Issue ADD COLUMN shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL; |
| |
| UPDATE Issue set shard = id % 10; |
| |
| ALTER TABLE Issue ADD INDEX (shard, status_id); |
| ALTER TABLE Issue ADD INDEX (shard, project_id); |
| |
| ================================================================ |
| 2015-11-25: Remove external group type chromium_committers |
| |
| ALTER TABLE UserGroupSettings MODIFY COLUMN external_group_type ENUM ('chrome_infra_auth', 'mdb', 'baggins'); |
| |
| ================================================================ |
| 2015-12-08: Modify handling of hidden well-known labels/statuses |
| |
| ALTER TABLE StatusDef ADD COLUMN hidden BOOLEAN DEFAULT FALSE; |
| ALTER TABLE LabelDef ADD COLUMN hidden BOOLEAN DEFAULT FALSE; |
| |
| UPDATE StatusDef SET status=TRIM(LEADING '#' FROM status), hidden=TRUE WHERE status COLLATE UTF8_GENERAL_CI LIKE '#%'; |
| UPDATE LabelDef SET label=TRIM(LEADING '#' FROM label), hidden=TRUE WHERE label COLLATE UTF8_GENERAL_CI LIKE '#%'; |
| |
| ================================================================ |
| 2015-12-11: Speed up moderation queue queries. |
| |
| ALTER TABLE SpamVerdict ADD INDEX(classifier_confidence); |
| |
| ================================================================ |
| 2015-12-14: Give components 'deprecated' col to match labels/statuses |
| |
| ALTER TABLE StatusDef CHANGE hidden deprecated BOOLEAN DEFAULT FALSE; |
| ALTER TABLE LabelDef CHANGE hidden deprecated BOOLEAN DEFAULT FALSE; |
| ALTER TABLE ComponentDef ADD COLUMN deprecated BOOLEAN DEFAULT FALSE; |
| |
| ================================================================ |
| 2015-12-14: Add table Group2Project |
| |
| CREATE TABLE Group2Project ( |
| group_id INT UNSIGNED NOT NULL, |
| project_id SMALLINT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (group_id, project_id), |
| |
| FOREIGN KEY (group_id) REFERENCES UserGroupSettings(group_id), |
| FOREIGN KEY (project_id) REFERENCES Project(project_id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2015-12-15: Increase maximum attachment quota bytes |
| |
| ALTER TABLE Project MODIFY attachment_bytes_used BIGINT DEFAULT 0; |
| ALTER TABLE Project MODIFY attachment_quota BIGINT DEFAULT 0; |
| |
| ================================================================ |
| 2015-12-15: Simplify moderation queue queries. |
| |
| ALTER TABLE SpamVerdict ADD COLUMN overruled BOOL NOT NULL; |
| ALTER TABLE SpamVerdict ADD COLUMN project_id INT NOT NULL; |
| UPDATE SpamVerdict s JOIN Issue i ON i.id=s.issue_id SET s.project_id=i.project_id; |
| |
| ================================================================ |
| 2015-12-17: Add cols home_page and logo to table Project |
| |
| ALTER TABLE Project ADD COLUMN home_page VARCHAR(250); |
| ALTER TABLE Project ADD COLUMN logo_gcs_id VARCHAR(250); |
| ALTER TABLE Project ADD COLUMN logo_file_name VARCHAR(250); |
| |
| ================================================================ |
| 2015-12-28: Add component_required col to table Template; |
| |
| ALTER TABLE Template ADD component_required BOOLEAN DEFAULT FALSE; |
| |
| ================================================================ |
| 2016-01-05: Add issue_shard column to Issue2Label, Issue2Component, |
| add indexes, and UPDATE existing rows. |
| |
| ALTER TABLE Issue2Component ADD COLUMN issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL; |
| UPDATE Issue2Component set issue_shard = issue_id % 10; |
| ALTER TABLE Issue2Component ADD INDEX (component_id, issue_shard); |
| |
| ALTER TABLE Issue2Label ADD COLUMN issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL; |
| UPDATE Issue2Label set issue_shard = issue_id % 10; |
| ALTER TABLE Issue2Label ADD INDEX (label_id, issue_shard); |
| |
| ================================================================ |
| 2016-01-06: Add period_soft_limit and period_hard_limit columns to ActionLimit |
| |
| ALTER TABLE ActionLimit ADD COLUMN period_soft_limit INT; |
| ALTER TABLE ActionLimit ADD COLUMN period_hard_limit INT; |
| |
| ================================================================ |
| 2016-01-08: Add issue_shard column to Issue2FieldValue, Issue2Cc, |
| add indexes, and UPDATE existing rows. |
| |
| ALTER TABLE Issue2FieldValue ADD COLUMN issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL; |
| UPDATE Issue2FieldValue SET issue_shard = issue_id % 10; |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, issue_shard, int_value); |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, issue_shard, str_value(255)); |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, issue_shard, user_id); |
| |
| ALTER TABLE Issue2Cc ADD COLUMN issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL; |
| UPDATE Issue2Cc SET issue_shard = issue_id % 10; |
| ALTER TABLE Issue2Cc ADD INDEX (cc_id, issue_shard); |
| |
| ================================================================ |
| 2015-12-17: Add documentation forwarding for /wiki urls |
| |
| ALTER TABLE Project ADD COLUMN docs_url VARCHAR(250); |
| |
| ================================================================ |
| 2015-12-17: Ensure SavedQueries never have null ids |
| |
| ALTER TABLE SavedQuery MODIFY id INT NOT NULL AUTO INCREMENT; |
| |
| ================================================================ |
| 2016-02-04: Add created, creator_id, modified, modifier_id for components |
| |
| ALTER TABLE ComponentDef ADD COLUMN created INT; |
| ALTER TABLE ComponentDef ADD COLUMN creator_id INT UNSIGNED; |
| ALTER TABLE ComponentDef ADD FOREIGN KEY (creator_id) REFERENCES User(user_id); |
| ALTER TABLE ComponentDef ADD COLUMN modified INT; |
| ALTER TABLE ComponentDef ADD COLUMN modifier_id INT UNSIGNED; |
| ALTER TABLE ComponentDef ADD FOREIGN KEY (modifier_id) REFERENCES User(user_id); |
| |
| ================================================================ |
| 2016-02-19: Opt all privileged accounts into displaying full email. |
| |
| UPDATE User SET obscure_email = FALSE WHERE email LIKE "%@chromium.org"; |
| UPDATE User SET obscure_email = FALSE WHERE email LIKE "%@webrtc.org"; |
| UPDATE User SET obscure_email = FALSE WHERE email LIKE "%@google.com"; |
| |
| ================================================================ |
| 2016-04-11: Increase email length limit to 255 |
| |
| ALTER TABLE User MODIFY email VARCHAR(255); |
| |
| ================================================================ |
| 2016-04-14: Add forwarding for /source urls |
| |
| ALTER TABLE Project ADD COLUMN source_url VARCHAR(250); |
| |
| ================================================================ |
| 2016-04-27: Add prefs for compact email subject lines |
| |
| ALTER TABLE User ADD COLUMN email_compact_subject BOOLEAN DEFAULT FALSE; |
| ALTER TABLE User ADD COLUMN email_view_widget BOOLEAN DEFAULT TRUE; |
| |
| ================================================================ |
| 2016-05-13: Add component labels |
| |
| CREATE TABLE Component2Label ( |
| component_id INT NOT NULL, |
| label_id INT NOT NULL, |
| |
| PRIMARY KEY (component_id, label_id), |
| |
| FOREIGN KEY (component_id) REFERENCES ComponentDef(id), |
| FOREIGN KEY (label_id) REFERENCES LabelDef(id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2016-05-23: Add default search for members |
| |
| ALTER TABLE ProjectIssueConfig ADD COLUMN member_default_query TEXT; |
| |
| ================================================================ |
| 2016-06-17: Add is_description column to Comment |
| |
| Local: |
| % pt-online-schema-change --alter "ADD COLUMN is_description BOOLEAN DEFAULT FALSE" D=monorail,t=Comment --host=localhost --user=root --alter-foreign-keys-method=rebuild_constraints --execute |
| |
| Staging/Production: |
| % pt-online-schema-change --alter "ADD COLUMN is_description BOOLEAN DEFAULT FALSE" D=monorail,t=Comment,h=<primary IP address>,u=$USER,p=test --alter-forieign-keys-method=rebuild_constraints --recursion-method=hosts --execute |
| |
| ================================================================ |
| 2016-05-13: Add table AutocompleteExclusion |
| |
| CREATE TABLE AutocompleteExclusion ( |
| project_id SMALLINT UNSIGNED NOT NULL, |
| user_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (project_id, user_id), |
| FOREIGN KEY (project_id) REFERENCES Project(project_id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| =============================================================== |
| 2016-06-30: Update table character encodings to allow Emoji support. |
| |
| /* DO NOT RUN THESE STATEMENTS ON PROD OR STAGING. They are fine for localhost |
| but be warned they will lock the db for some time if you have gigs of data in |
| these tables */ |
| |
| ALTER TABLE `monorail`.`Comment` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| ALTER TABLE `monorail`.`IssueUpdate` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| ALTER TABLE `monorail`.`IssueSummary` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| |
| /* This is what I ran on production: */ |
| % pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" D=monorail,t=Comment,h=<primary IP> --alter-foreign-keys-method=rebuild_constraints --no-drop-old-table --recursion-method=hosts --check-slave-lag=h=<one of the replicas' IP> --print --execute |
| |
| % pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" D=monorail,t=IssueUpdate,h=<primary IP> --alter-foreign-keys-method=rebuild_constraints --no-drop-old-table --recursion-method=hosts --check-slave-lag=h=<one of the replicas' IP> --print --execute |
| |
| % pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" D=monorail,t=IssueSummary,h=<primary IP> --alter-foreign-keys-method=rebuild_constraints --no-drop-old-table --recursion-method=hosts --check-slave-lag=h=<one of the replicas' IP> --print --execute |
| |
| /* And then these two which ran very quickly: */ |
| ALTER TABLE `monorail`.`Template` CHANGE `content` `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| ALTER TABLE `monorail`.`Template` CHANGE `summary` `summary` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| |
| =============================================================== |
| 2016-07-07: Add rank to IssueRelation |
| |
| ALTER TABLE IssueRelation ADD COLUMN rank BIGINT; |
| |
| ============================================================== |
| 2016-07-13: Set default rank for blockedon relations |
| |
| UPDATE IssueRelation SET rank = 0 WHERE kind = 'blockedon'; |
| |
| ================================================================ |
| 2016-08-01: Add timestamps for issue field changes |
| |
| DO NOT RUN THIS STATEMENT ON PROD OR STAGING. It is fine for localhost |
| but be warned that it will lock the db for some time if you have gigs of data in |
| these tables. |
| ALTER TABLE Issue |
| ADD COLUMN owner_modified INT, |
| ADD COLUMN status_modified INT, |
| ADD COLUMN component_modified INT; |
| |
| Staging/Production: |
| % pt-online-schema-change \ |
| --alter "ADD COLUMN owner_modified INT, ADD COLUMN status_modified INT, ADD COLUMN component_modified INT" \ |
| D=monorail,t=Issue,h=<primary IP address>,u=$USER,p=<your mysql password> \ |
| --alter-foreign-keys-method=rebuild_constraints --recursion-method=hosts --execute |
| |
| ============================================================== |
| 2016-08-05: Add tables Hotlist, Hotlist2Issue, Hotlist2User |
| |
| CREATE TABLE Hotlist ( |
| id INT UNSIGNED NOT NULL AUTO_INCREMENT, |
| name VARCHAR(80) NOT NULL, |
| |
| summary TEXT, |
| description TEXT, |
| |
| is_private BOOLEAN DEFAULT FALSE, |
| |
| PRIMARY KEY (id) |
| ) ENGINE=INNODB; |
| |
| |
| CREATE TABLE Hotlist2Issue ( |
| hotlist_id INT UNSIGNED NOT NULL, |
| issue_id INT NOT NULL, |
| |
| rank BIGINT NOT NULL, |
| |
| PRIMARY KEY (hotlist_id, issue_id), |
| INDEX (hotlist_id), |
| INDEX (issue_id), |
| FOREIGN KEY (hotlist_id) REFERENCES Hotlist(id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id) |
| ) ENGINE=INNODB; |
| |
| |
| CREATE TABLE Hotlist2User ( |
| hotlist_id INT UNSIGNED NOT NULL, |
| user_id INT UNSIGNED NOT NULL, |
| |
| role_name ENUM ('owner', 'member', 'follower') NOT NULL, |
| |
| PRIMARY KEY (hotlist_id, user_id), |
| INDEX (hotlist_id), |
| INDEX (user_id), |
| FOREIGN KEY (hotlist_id) REFERENCES Hotlist(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ============================================================== |
| 2016-08-10: Improve Hotlist schema |
| |
| ALTER TABLE Hotlist ADD COLUMN default_col_spec TEXT; |
| |
| ALTER TABLE Hotlist2User CHANGE role_name |
| role_name ENUM('owner', 'editor', 'follower'); |
| |
| ============================================================== |
| 2016-08-15: Add hotlist to Invalidate table |
| |
| ALTER TABLE Invalidate CHANGE kind |
| kind ENUM('user', 'project', 'issue', 'issue_id', 'hotlist'); |
| |
| ================================================================ |
| 2016-09-21: Create the CommentContent table with emoji support. |
| |
| CREATE TABLE CommentContent ( |
| id INT NOT NULL AUTO_INCREMENT, |
| -- TODO(jrobbins): drop comment_id after Comment.commentcontent_id is added. |
| comment_id INT NOT NULL, -- Note: no forign key reference. |
| content MEDIUMTEXT COLLATE utf8mb4_unicode_ci, |
| inbound_message MEDIUMTEXT COLLATE utf8mb4_unicode_ci, |
| |
| PRIMARY KEY (id), |
| UNIQUE KEY (comment_id) -- TODO: drop this too. |
| ) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
| |
| To copy comment strings from Comment to CommentContent, use |
| the SQL procedure in monorail/tools/copy-comment-to-commentcontent.sql. |
| |
| If you need to roll back, you can reverse the process by reading |
| and carefully using the SQL procedure in |
| monorail/tools/copy-new-commentcontent-back-to-comment.sql. |
| |
| Optionally, after you have all comment content strings in |
| CommentContent, you can reduce the size of the Comment table by using |
| the procedure in monorail/tools/null-comment-table-strings.sql. |
| This can make it faster to make more changes to the Comment table. |
| |
| ================================================================ |
| 2016-09-29: Drop was_escaped after Comment table is made smaller |
| |
| ALTER TABLE Comment DROP COLUMN was_escaped; |
| |
| ================================================================ |
| 2016-10-03: Add date-type custom fields |
| |
| ALTER TABLE Issue2FieldValue ADD date_value INT; |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, issue_shard, date_value); |
| ALTER TABLE Template2FieldValue ADD date_value INT; |
| ALTER TABLE FieldDef CHANGE field_type field_type ENUM ( |
| 'enum_type', 'int_type', 'str_type', 'user_type', 'date_type') NOT NULL; |
| |
| ================================================================ |
| 2016-10-13: Follow-up on splitting the Comment table |
| |
| ALTER TABLE Comment |
| DROP COLUMN content, |
| DROP COLUMN inbound_message, |
| ADD COLUMN commentcontent_id INT; |
| |
| ALTER TABLE Comment |
| ADD FOREIGN KEY (commentcontent_id) REFERENCES CommentContent(id); |
| |
| After making those schema changes, run the commands in |
| tools/backfill-commentcontent-id.sql to fill in commentcontent_id |
| for existing comments. |
| |
| ================================================================ |
| 2016-10-13: Add new User fields |
| |
| ALTER TABLE User |
| ADD COLUMN last_visit_timestamp INT, |
| ADD COLUMN email_bounce_timestamp INT, |
| ADD COLUMN vacation_message VARCHAR(80); |
| |
| ================================================================ |
| 2016-11-30: Drop unique key constraint on CommentContent.comment_id. |
| This is a prerequiste for deleting the code that sets a value for |
| that column. This resolves one TODO from 2016-09-21. Later the |
| column itself can be dropped, which is the other TODO from 2016-09-21. |
| |
| ALTER TABLE CommentContent DROP INDEX comment_id; |
| |
| ================================================================ |
| 2016-12-20: Add a table to keep track of hotlists that users have |
| starred. |
| |
| CREATE TABLE HotlistStar ( |
| hotlist_id INT UNSIGNED NOT NULL, |
| user_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (hotlist_id, user_id), |
| INDEX (user_id), |
| FOREIGN KEY (hotlist_id) REFERENCES Hotlist(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2017-12-04: Add two new columns to Hotlist2Issue. |
| |
| ALTER TABLE Hotlist2Issue |
| ADD COLUMN adder_id INT UNSIGNED, |
| ADD COLUMN added INT, |
| ADD FOREIGN KEY (adder_id) REFERENCES User(user_id); |
| |
| ================================================================ |
| 2017-01-30: Add one new column to SpamVerdict. |
| |
| ALTER TABLE SpamVerdict CHANGE reason |
| reason ENUM ("manual", "threshold", "classifier", "fail_open") NOT NULL; |
| |
| ================================================================ |
| 2017-02-1: Add two tables to keep track of hotlists and bugs |
| that users have visited |
| |
| CREATE TABLE HotlistVisitHistory ( |
| hotlist_id INT UNSIGNED NOT NULL, |
| user_id INT UNSIGNED NOT NULL, |
| viewed INT NOT NULL, |
| |
| PRIMARY KEY (user_id, hotlist_id), |
| FOREIGN KEY (hotlist_id) REFERENCES Hotlist(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE IssueVisitHistory ( |
| issue_id INT NOT NULL, |
| user_id INT UNSIGNED NOT NULL, |
| viewed INT NOT NULL, |
| |
| PRIMARY KEY (user_id, issue_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (user_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2017-02-16: Add 'note' column to Hotlist2Issue table. |
| |
| ALTER TABLE Hotlist2Issue ADD COLUMN note TEXT; |
| |
| |
| ================================================================ |
| 2017-02-23: Add 'is_niche' column to FieldDef table. |
| |
| ALTER TABLE FieldDef ADD COLUMN is_niche BOOLEAN; |
| |
| |
| ================================================================ |
| 2017-03-05: Add 'ping_who' column to FieldDef table. |
| |
| ALTER TABLE FieldDef |
| ADD COLUMN date_action ENUM ('no_action', 'ping_owner_only', 'ping_participants'); |
| |
| |
| ================================================================ |
| 2017-05-02: Add index to make commentby: query term faster. |
| |
| ALTER TABLE Comment ADD INDEX (commenter_id, deleted_by, issue_id); |
| |
| |
| ================================================================ |
| 2017-05-12: Add user preference to ping issue starrers. |
| |
| ALTER TABLE User ADD COLUMN notify_starred_ping BOOLEAN DEFAULT FALSE; |
| |
| ================================================================ |
| 2017-06-15: Add table to map @google.com to @chromium.org accounts. |
| |
| CREATE TABLE LinkedAccount ( |
| parent_email VARCHAR(255) NOT NULL, -- lowercase |
| child_email VARCHAR(255) NOT NULL, -- lowercase |
| |
| KEY (parent_email), |
| UNIQUE KEY (child_email) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2017-11-14: Add field_type ENUM url_type to FieldDef. |
| |
| ALTER TABLE FieldDef MODIFY field_type ENUM ( |
| 'enum_type', 'int_type', 'str_type', 'user_type', 'date_type', 'url_type') NOT NULL; |
| |
| ALTER TABLE Issue2FieldValue ADD COLUMN url_value VARCHAR(1024); |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, url_value); |
| |
| ================================================================ |
| 2017-11-22: Add url_value column to Template2FieldValue table. |
| |
| ALTER TABLE Template2FieldValue ADD COLUMN url_value VARCHAR(1024); |
| |
| ================================================================ |
| 2018-01-22: Add table to keep track of the latest timestamp that issues with |
| their component data were collected and uploaded to GCS. |
| |
| CREATE TABLE ComponentIssueClosedIndex ( |
| closed_index INT NOT NULL, |
| PRIMARY KEY (closed_index) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2018-01-22: Add approval tables and approval_type to FieldDef. |
| |
| ALTER TABLE FieldDef MODIFY field_type ENUM ( |
| 'enum_type', 'int_type', 'str_type', 'user_type', 'date_type', 'url_type', 'approval_type') NOT NULL; |
| |
| CREATE TABLE ApprovalStatusDef ( |
| id INT NOT NULL AUTO_INCREMENT, |
| field_id INT NOT NULL, |
| status VARCHAR(80) BINARY NOT NULL, |
| docstring TEXT, |
| |
| PRIMARY KEY (id), |
| UNIQUE KEY (field_id, status), |
| FOREIGN KEY (field_id) REFERENCES FieldDef(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Issue2ApprovalValue ( |
| issue_id INT NOT NULL, |
| issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL, |
| field_id INT NOT NULL, |
| status_id INT NOT NULL, |
| setter_id INT UNSIGNED, |
| set_on INT, |
| |
| PRIMARY KEY (issue_id, field_id), |
| INDEX (field_id, issue_shard, status_id), |
| INDEX (field_id, issue_shard, setter_id), |
| INDEX (field_id, issue_shard, set_on), |
| |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (status_id) REFERENCES ApprovalStatusDef(id), |
| FOREIGN KEY (setter_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Approval2Approvers ( |
| field_id INT NOT NULL, |
| approver_id INT UNSIGNED NOT NULL, |
| issue_id INT, |
| issue_shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL, |
| |
| PRIMARY KEY (issue_id, field_id, approver_id), |
| INDEX (approver_id, field_id, issue_shard), |
| |
| FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (approver_id) REFERENCES User(user_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2018-01-29: Add is_deleted column to ComponentDef table and remove |
| uniqueness constraint for component names in a project. |
| |
| ALTER TABLE ComponentDef ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE; |
| ALTER TABLE ComponentDef ADD INDEX project_id2 (project_id, path); |
| ALTER TABLE ComponentDef DROP INDEX project_id; |
| |
| ================================================================ |
| 2018-01-30: Add IssueSnapshot table and join tables |
| |
| CREATE TABLE IssueSnapshot ( |
| id INT NOT NULL AUTO_INCREMENT, |
| issue_id INT NOT NULL, |
| shard SMALLINT UNSIGNED DEFAULT 0 NOT NULL, |
| project_id SMALLINT UNSIGNED NOT NULL, |
| local_id INT NOT NULL, |
| reporter_id INT UNSIGNED NOT NULL, |
| owner_id INT UNSIGNED, |
| status_id INT NOT NULL, |
| period_start INT NOT NULL, |
| period_end INT NOT NULL, |
| is_open BOOLEAN DEFAULT TRUE, |
| |
| PRIMARY KEY (id), |
| FOREIGN KEY (project_id) REFERENCES Project(project_id), |
| FOREIGN KEY (reporter_id) REFERENCES User(user_id), |
| FOREIGN KEY (owner_id) REFERENCES User(user_id), |
| FOREIGN KEY (status_id) REFERENCES StatusDef(id), |
| INDEX (shard, project_id, period_start, period_end), |
| UNIQUE KEY (issue_id, period_start, period_end) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE IssueSnapshot2Component ( |
| issuesnapshot_id INT NOT NULL, |
| component_id INT NOT NULL, |
| |
| PRIMARY KEY (issuesnapshot_id, component_id), |
| FOREIGN KEY (issuesnapshot_id) REFERENCES IssueSnapshot(id), |
| FOREIGN KEY (component_id) REFERENCES ComponentDef(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE IssueSnapshot2Label( |
| issuesnapshot_id INT NOT NULL, |
| label_id INT NOT NULL, |
| |
| PRIMARY KEY (issuesnapshot_id, label_id), |
| FOREIGN KEY (issuesnapshot_id) REFERENCES IssueSnapshot(id), |
| FOREIGN KEY (label_id) REFERENCES LabelDef(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE IssueSnapshot2Cc( |
| issuesnapshot_id INT NOT NULL, |
| cc_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (issuesnapshot_id, cc_id), |
| FOREIGN KEY (issuesnapshot_id) REFERENCES IssueSnapshot(id), |
| FOREIGN KEY (cc_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| =============================================================== |
| 2018-01-29: Add approval_id column to FieldDef table |
| |
| ALTER TABLE FieldDef ADD COLUMN approval_id INT; |
| |
| =============================================================== |
| 2018-02-08: Drop previous approval tables and add default approvers table |
| |
| DROP TABLE ApprovalStatusDef; |
| DROP TABLE Approval2Approver; |
| DROP TABLE Issue2ApprovalValue; |
| |
| CREATE TABLE ApprovalDef2Approver ( |
| approval_id INT NOT NULL, |
| approver_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (approval_id, approver_id), |
| |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (approver_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ================================================================== |
| 2018-02-09: Add project_id column to default approvers table |
| |
| ALTER TABLE ApprovalDef2Approver ADD project_id SMALLINT UNSIGNED NOT NULL; |
| ALTER TABLE ApprovalDef2Approver ADD CONSTRAINT ApprovalDef2Approver_ibfk_3 FOREIGN KEY (project_id) REFERENCES Project(project_id); |
| |
| ================================================================== |
| 2018-02-14: Expand IssueSnapshot time columns from INT to INT UNSIGNED |
| ALTER TABLE IssueSnapshot MODIFY period_start INT UNSIGNED NOT NULL; |
| ALTER TABLE IssueSnapshot MODIFY period_end INT UNSIGNED NOT NULL; |
| |
| |
| ================================================================ |
| 2018-02-22: Relax some constraints on issue snapshots |
| |
| ALTER TABLE IssueSnapshot MODIFY status_id int; |
| ALTER TABLE IssueSnapshot DROP INDEX issue_id; |
| ALTER TABLE IssueSnapshot ADD INDEX (`issue_id`,`period_start`,`period_end`); |
| |
| ================================================================ |
| 2018-03-12: Add launch template milestones and approval tables |
| |
| CREATE TABLE Template2Milestone ( |
| id INT NOT NULL AUTO_INCREMENT, |
| template_id INT NOT NULL, |
| name VARCHAR(255) BINARY NOT NULL, |
| rank SMALLINT UNSIGNED, |
| |
| PRIMARY KEY (id, template_id), |
| FOREIGN KEY (template_id) REFERENCES Template(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Template2ApprovalValue ( |
| approval_id INT NOT NULL, |
| template_id INT NOT NULL, |
| milestone_id INT NOT NULL, |
| launch_status ENUM ('NA', 'review_requested', 'started', 'need_info', 'approved', 'not_approved'), |
| |
| PRIMARY KEY (approval_id, template_id, milestone_id), |
| |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (template_id) REFERENCES Template(id), |
| FOREIGN KEY (milestone_id) REFERENCES Template2Milestone(id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2018-03-13: Edit approval state enum |
| |
| ALTER TABLE Template2ApprovalValue CHANGE launch_status status ENUM ( |
| 'needs_review', 'na', 'review_requested', 'started', 'need_info', 'approved', 'not_approved'); |
| |
| |
| ================================================================ |
| 2018-03-14: Edit approval state enum *AGAIN* |
| |
| ALTER TABLE Template2ApprovalValue MODIFY status ENUM ( |
| 'needs_review', 'na', 'review_requested', 'started', 'need_info', 'approved', 'not_approved', 'not_set'); |
| |
| |
| ================================================================ |
| 2018-03-15: Add Issue Approval and Mileston tables |
| |
| DROP TABLE IF EXISTS Approval2Approver; |
| DROP TABLE IF EXISTS Issue2ApprovalValue; |
| |
| CREATE TABLE Issue2Milestone ( |
| id INT NOT NULL AUTO_INCREMENT, |
| issue_id INT NOT NULL, |
| name VARCHAR(255) BINARY NOT NULL, |
| rank SMALLINT UNSIGNED, |
| |
| PRIMARY KEY (id, issue_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Issue2ApprovalValue ( |
| issue_id INT NOT NULL, |
| approval_id INT NOT NULL, |
| milestone_id INT NOT NULL, |
| status ENUM ('needs_review', 'na', 'review_requested', 'started', 'need_info', 'approved', 'not_approved', 'not_set') DEFAULT 'not_set' NOT NULL, |
| setter_id INT UNSIGNED, |
| set_on INT, |
| |
| PRIMARY KEY (issue_id, approval_id, milestone_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (milestone_id) REFERENCES Issue2Milestone(id), |
| FOREIGN KEY (setter_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE IssueApproval2Approvers ( |
| issue_id INT NOT NULL, |
| approval_id INT NOT NULL, |
| approver_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (issue_id, approval_id, approver_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id), |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (approver_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ALTER TABLE Template2ApprovalValue MODIFY status ENUM ( |
| 'needs_review', 'na', 'review_requested', 'started', 'need_info', 'approved', 'not_approved', 'not_set') DEFAULT 'not_set' NOT NULL; |
| |
| ================================================================ |
| 2018-03-15: Soft-delete Hotlists. |
| ALTER TABLE Hotlist ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE; |
| |
| =============================================================== |
| 2018-03-19: Rename issue approvers table. |
| |
| RENAME TABLE IssueApproval2Approvers TO IssueApproval2Approver; |
| |
| ================================================================ |
| 2018-03-22: Add Hotlist support to IssueSnapshots. |
| |
| CREATE TABLE IssueSnapshot2Hotlist( |
| issuesnapshot_id INT NOT NULL, |
| hotlist_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (issuesnapshot_id, hotlist_id), |
| FOREIGN KEY (issuesnapshot_id) REFERENCES IssueSnapshot(id), |
| FOREIGN KEY (hotlist_id) REFERENCES Hotlist(id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2018-03-23: Add ApprovalDef2Survey table. |
| |
| CREATE TABLE ApprovalDef2Survey ( |
| approval_id INT NOT NULL, |
| survey TEXT, |
| project_id SMALLINT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (approval_id, project_id), |
| |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (project_id) REFERENCES Project(project_id) |
| ) ENGINE=INNODB; |
| |
| =============================================================== |
| 2018-03-24: Add IssueApproval2Comment table. |
| |
| CREATE TABLE IssueApproval2Comment ( |
| approval_id INT NOT NULL, |
| comment_id INT NOT NULL, |
| |
| PRIMARY KEY (comment_id), |
| INDEX (approval_id), |
| FOREIGN KEY (approval_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (comment_id) REFERENCES Comment(id) |
| ) ENGINE=INNODB; |
| |
| =============================================================== |
| 2018-03-29: Rename Milestones to Phases. |
| |
| CREATE TABLE Issue2Phase ( |
| id INT NOT NULL AUTO_INCREMENT, |
| issue_id INT NOT NULL, |
| name VARCHAR(255) BINARY NOT NULL, |
| rank SMALLINT UNSIGNED, |
| |
| PRIMARY KEY (id, issue_id), |
| FOREIGN KEY (issue_id) REFERENCES Issue(id) |
| ) ENGINE=INNODB; |
| |
| CREATE TABLE Template2Phase ( |
| id INT NOT NULL AUTO_INCREMENT, |
| template_id INT NOT NULL, |
| name VARCHAR(255) BINARY NOT NULL, |
| rank SMALLINT UNSIGNED, |
| |
| PRIMARY KEY (id, template_id), |
| FOREIGN KEY (template_id) REFERENCES Template(id) |
| ) ENGINE=INNODB; |
| |
| ALTER TABLE Issue2ApprovalValue DROP FOREIGN KEY Issue2ApprovalValue_ibfk_4; |
| ALTER TABLE Issue2ApprovalValue ADD COLUMN phase_id int NOT NULL; |
| CREATE INDEX IF NOT EXISTS phase_id ON Issue2ApprovalValue (phase_id); |
| ALTER TABLE Issue2ApprovalValue ADD FOREIGN KEY (phase_id) REFERENCES Issue2Phase(id); |
| |
| ALTER TABLE Template2ApprovalValue DROP FOREIGN KEY Template2ApprovalValue_ibfk_3; |
| ALTER TABLE Template2ApprovalValue ADD COLUMN phase_id int NOT NULL; |
| CREATE INDEX IF NOT EXISTS phase_id ON Template2ApprovalValue (phase_id); |
| ALTER TABLE Template2ApprovalValue ADD FOREIGN KEY (phase_id) REFERENCES Template2Phase(id); |
| |
| ================================================================ |
| 2018-04-18: Drop all milestone schema. |
| |
| ALTER TABLE Template2ApprovalValue DROP COLUMN milestone_id; |
| ALTER TABLE Issue2ApprovalValue DROP COLUMN milestone_id; |
| |
| DROP TABLE Template2Milestone; |
| DROP TABLE Issue2Milestone; |
| |
| ================================================================ |
| 2018-04-25: Add phase_id to X2ApprovalValue tables' primary keys. |
| |
| ALTER TABLE Template2ApprovalValue DROP PRIMARY KEY, ADD PRIMARY KEY(approval_id, template_id, phase_id); |
| ALTER TABLE Issue2ApprovalValue DROP PRIMARY KEY, ADD PRIMARY KEY(issue_id, approval_id, phase_id); |
| |
| ================================================================== |
| 2018-04-30: Rename Issue2Phase table to IssuePhaseDef: Part One |
| |
| CREATE TABLE IssuePhaseDef ( |
| id INT NOT NULL AUTO_INCREMENT, |
| name VARCHAR(255) BINARY NOT NULL, |
| rank SMALLINT UNSIGNED, |
| |
| PRIMARY KEY (id) |
| ) ENGINE=INNODB; |
| |
| ALTER TABLE Issue2ApprovalValue DROP FOREIGN KEY Issue2ApprovalValue_ibfk_4; |
| ALTER TABLE Issue2ApprovalValue ADD FOREIGN KEY (phase_id) REFERENCES IssuePhaseDef(id); |
| |
| ================================================================== |
| 2018-05-02: Add phase_id to Issue2FieldValue table. |
| |
| ALTER TABLE Issue2FieldValue ADD COLUMN phase_id INT; |
| ALTER TABLE Issue2FieldValue ADD FOREIGN KEY (phase_id) REFERENCES IssuePhaseDef(id); |
| |
| =================================================================== |
| 2018-5-01: Add is_phase_field to FieldDef. |
| |
| ALTER TABLE FieldDef ADD COLUMN is_phase_field BOOLEAN DEFAULT FALSE; |
| |
| =================================================================== |
| 2018-5-11: Rename Issue2Phase table to IssuePhaseDef: Part Two, drop Issue2Phase |
| |
| DROP TABLE Issue2Phase; |
| ================================================================== |
| 2018-05-11: Restrict size of index field in Issue2FieldValue |
| |
| ALTER TABLE Issue2FieldValue DROP INDEX field_id_5; |
| ALTER TABLE Issue2FieldValue ADD INDEX (field_id, issue_shard, url_value(255)); |
| |
| ================================================================== |
| 2018-05-18: Replace Template2Phase FK with IssuePhaseDef. |
| |
| TRUNCATE TABLE Template2ApprovalValue; |
| ALTER TABLE Template2ApprovalValue DROP FOREIGN KEY Template2ApprovalValue_ibfk_3; |
| ALTER TABLE Template2ApprovalValue ADD FOREIGN KEY (phase_id) REFERENCES IssuePhaseDef(id); |
| |
| ================================================================ |
| 2018-05-22: Add boolean columns to control autocomplete exclusions. |
| |
| ALTER TABLE AutocompleteExclusion |
| ADD COLUMN ac_exclude BOOLEAN DEFAULT TRUE, |
| ADD COLUMN no_expand BOOLEAN DEFAULT FALSE; |
| |
| ================================================================== |
| 2018-05-30: Add comment to Invalidate table |
| |
| ALTER TABLE Invalidate CHANGE kind |
| kind ENUM('user', 'project', 'issue', 'issue_id', 'hotlist', |
| 'comment'); |
| |
| ================================================================= |
| 2018-06-05: Drop Template2Phase tbl and NOT NULL constraint for approval value phase_id columns. |
| |
| DROP TABLE Template2Phase; |
| |
| ALTER TABLE Issue2ApprovalValue DROP PRIMARY KEY, ADD PRIMARY KEY(issue_id, approval_id); |
| ALTER TABLE Issue2ApprovalValue MODIFY COLUMN phase_id INT; |
| |
| ALTER TABLE Template2ApprovalValue DROP PRIMARY KEY, ADD PRIMARY KEY(approval_id, template_id); |
| ALTER TABLE Template2ApprovalValue MODIFY COLUMN phase_id INT; |
| |
| ================================================================= |
| 2018-06-22: Add 'template' to Invalidate.kind_enum |
| |
| ALTER TABLE Invalidate MODIFY COLUMN kind enum('user', 'project', 'issue', 'issue_id', 'hotlist', 'comment', 'template') NOT NULL; |
| |
| ================================================================= |
| 2018-07-02: Add UserCommits table to keep track of commits. |
| |
| CREATE TABLE UserCommits ( |
| commit_sha VARCHAR(40), |
| parent_sha VARCHAR(40), |
| author_id INT UNSIGNED NOT NULL, |
| commit_time INT NOT NULL, |
| commit_message TEXT, |
| commit_repo VARCHAR(255), |
| |
| PRIMARY KEY (commit_sha), |
| INDEX (author_id, commit_time), |
| INDEX (commit_time) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================= |
| 2018-07-16: Drop parent_sha because it isn't needed in this table and give commit_repo a clearer name. |
| |
| ALTER TABLE UserCommits DROP COLUMN parent_sha; |
| ALTER TABLE UserCommits CHANGE commit_repo commit_repo_url VARCHAR(255); |
| |
| |
| ================================================================ |
| 2018-08-27: Allow computed external user groups, e.g., everyone@google.com. |
| |
| ALTER TABLE UserGroupSettings |
| MODIFY COLUMN |
| external_group_type ENUM ('chrome_infra_auth', 'mdb', 'baggins', 'computed'); |
| |
| |
| ================================================================ |
| 2018-09-24: Add 'usergroup to Invalidate.kind enum |
| |
| ALTER TABLE Invalidate MODIFY COLUMN kind enum( |
| 'user', 'usergroup', 'project', 'issue', 'issue_id', |
| 'hotlist', 'comment', 'template') NOT NULL; |
| |
| ================================================================ |
| 2018-10-30: Fix ApprovalValue status enum for 'review_started' |
| |
| ALTER TABLE Template2ApprovalValue MODIFY status ENUM ( |
| 'needs_review', 'na', 'review_requested', 'review_started', 'need_info', 'approved', 'not_approved', 'not_set') DEFAULT 'not_set' NOT NULL; |
| |
| ALTER TABLE Issue2ApprovalValue MODIFY status ENUM ( |
| 'needs_review', 'na', 'review_requested', 'review_started', 'need_info', 'approved', 'not_approved', 'not_set') DEFAULT 'not_set' NOT NULL; |
| |
| |
| ================================================================ |
| 2018-11-02: Redo LinkedAccount table. |
| |
| DROP TABLE LinkedAccount; |
| CREATE TABLE LinkedAccount ( |
| parent_id INT UNSIGNED NOT NULL, |
| child_id INT UNSIGNED NOT NULL, |
| |
| KEY (parent_id), |
| UNIQUE KEY (child_id), |
| FOREIGN KEY (parent_id) REFERENCES User(user_id), |
| FOREIGN KEY (child_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2018-12-03: Create LinkedAccountInvite table. |
| |
| CREATE TABLE LinkedAccountInvite ( |
| parent_id INT UNSIGNED NOT NULL, |
| child_id INT UNSIGNED NOT NULL, |
| |
| KEY (parent_id), |
| UNIQUE KEY (child_id), |
| FOREIGN KEY (parent_id) REFERENCES User(user_id), |
| FOREIGN KEY (child_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| ================================================================================== |
| 2018-1-15: Add notify_group and notify_members bool col to UserGroupSettings table. |
| |
| ALTER TABLE UserGroupSettings ADD COLUMN notify_members BOOLEAN DEFAULT TRUE; |
| ALTER TABLE UserGroupSettings ADD COLUMN notify_group BOOLEAN DEFAULT FALSE; |
| |
| ================================================================= |
| 2019-01-23: Add two new indexes to IssueSnapshot for performance. |
| |
| CREATE INDEX by_period_start ON IssueSnapshot (shard, project_id, status_id, period_start); |
| CREATE INDEX by_period_end ON IssueSnapshot (shard, project_id, status_id, period_end); |
| |
| |
| ================================================================ |
| 2019-01-25: Start a more flexible way of storing user preferences. |
| |
| CREATE TABLE UserPrefs ( |
| user_id INT UNSIGNED NOT NULL, |
| name VARCHAR(40), |
| value VARCHAR(80), |
| |
| UNIQUE KEY (user_id, name) |
| ) ENGINE=INNODB; |
| |
| ================================================================ |
| 2019-04-10: Set UserPrefs that indicate that privacy click-through was seen. |
| This is part of phasing out DismissedCues. |
| |
| INSERT IGNORE INTO UserPrefs (user_id, name, value) |
| SELECT user_id, cue, 'true' |
| FROM DismissedCues; |
| |
| ================================================================ |
| 2019-05-13: Drop unused ActionLimit table. |
| |
| DROP TABLE ActionLimit; |
| |
| ================================================================ |
| 2019-05-24: Add ext_issue_identifier column to DanglingIssueRelation table. |
| |
| ALTER TABLE DanglingIssueRelation ADD COLUMN ext_issue_identifier VARCHAR(2048); |
| ALTER TABLE DanglingIssueRelation ADD INDEX (ext_issue_identifier); |
| |
| ================================================================ |
| 2019-06-06: Allow full unicode labels. |
| |
| ALTER TABLE LabelDef CHANGE label label VARCHAR(80) BINARY NOT NULL COLLATE utf8mb4_unicode_ci; |
| |
| ================================================================ |
| 2019-06-07: Add indexes to reduce cases of using filesort |
| |
| ALTER TABLE HotlistVisitHistory ADD INDEX (user_id, viewed); |
| ALTER TABLE ReindexQueue ADD INDEX (created); |
| |
| ================================================================ |
| 2019-06-13: Add ext_issue_identifier to DanglingIssueRelation PRIMARY KEY. |
| |
| ALTER TABLE DanglingIssueRelation MODIFY COLUMN ext_issue_identifier VARCHAR(255); |
| ALTER TABLE DanglingIssueRelation DROP PRIMARY KEY, ADD PRIMARY KEY(issue_id, dst_issue_project, dst_issue_local_id, kind, ext_issue_identifier); |
| |
| ================================================================ |
| 2019-06-25: Add unique constraint on SpamReport. |
| |
| ALTER IGNORE TABLE SpamReport ADD UNIQUE (user_id, comment_id, issue_id); |
| |
| ================================================================ |
| 2019-07-03: Add CommentImporter table. |
| |
| CREATE TABLE CommentImporter ( |
| comment_id INT NOT NULL, |
| importer_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (comment_id), |
| FOREIGN KEY (comment_id) REFERENCES Comment(id), |
| FOREIGN KEY (importer_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ================================================================ |
| 2019-10-09: Drop DismissedCues because that data has been in UserPrefs since April. |
| |
| DROP TABLE DismissedCues; |
| |
| ================================================================ |
| 2019-10-24: Insert row representing deleted user. |
| |
| INSERT IGNORE INTO User (user_id, email) VALUES (1, ''); |
| |
| ================================================================== |
| 2019-11-21: Add hotlist_id to Invalidate table. |
| |
| ALTER TABLE Invalidate CHANGE kind |
| kind ENUM('user', 'usergroup', 'project', 'issue', 'issue_id', 'hotlist', 'comment', 'template', 'hotlist_id'); |
| |
| |
| ================================================================ |
| 2019-12-30: Set custom revision_url_format for pigweed project. |
| |
| UPDATE Project SET revision_url_format = 'https://pigweed-review.git.corp.google.com/q/{revnum}' WHERE project_name='pigweed'; |
| |
| ================================================================ |
| 2020-02-19: Create table for editors of a field. Also, add column in FieldDef |
| to indicate if the editors of that field are being restricted. |
| |
| CREATE TABLE FieldDef2Editor ( |
| field_id INT NOT NULL, |
| editor_id INT UNSIGNED NOT NULL, |
| |
| PRIMARY KEY (field_id, editor_id), |
| FOREIGN KEY (field_id) REFERENCES FieldDef(id), |
| FOREIGN KEY (editor_id) REFERENCES User(user_id) |
| ) ENGINE=INNODB; |
| |
| |
| ALTER TABLE FieldDef ADD COLUMN is_restricted_field BOOL DEFAULT FALSE; |
| |
| ================================================================ |
| 2020-05-14: Add option to force detailed notifications for projects. |
| |
| ALTER TABLE Project ADD COLUMN issue_notify_always_detailed BOOLEAN DEFAULT FALSE; |
| |