| Index: appengine/monorail/sql/project.sql
|
| diff --git a/appengine/monorail/sql/project.sql b/appengine/monorail/sql/project.sql
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f0bf38f7b1fe426827c570f4390fde73645ad615
|
| --- /dev/null
|
| +++ b/appengine/monorail/sql/project.sql
|
| @@ -0,0 +1,211 @@
|
| +-- 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
|
| +
|
| +
|
| +-- Create project-realted tables in monorail db.
|
| +
|
| +
|
| +CREATE TABLE User (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + email VARCHAR(255) NOT NULL, -- lowercase
|
| +
|
| + is_site_admin BOOLEAN DEFAULT FALSE,
|
| + obscure_email BOOLEAN DEFAULT TRUE,
|
| + notify_issue_change BOOLEAN DEFAULT TRUE,
|
| + notify_starred_issue_change BOOLEAN DEFAULT TRUE,
|
| + banned VARCHAR(80),
|
| + after_issue_update ENUM ('up_to_list', 'stay_same_issue', 'next_in_list'),
|
| + keep_people_perms_open BOOLEAN DEFAULT FALSE,
|
| + preview_on_hover BOOLEAN DEFAULT TRUE,
|
| + ignore_action_limits BOOLEAN DEFAULT FALSE,
|
| +
|
| + PRIMARY KEY (user_id),
|
| + UNIQUE KEY (email)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +
|
| +CREATE TABLE Project (
|
| + project_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
| + project_name VARCHAR(80) NOT NULL,
|
| +
|
| + summary TEXT,
|
| + description TEXT,
|
| +
|
| + state ENUM ('live', 'archived', 'deletable') NOT NULL,
|
| + access ENUM ('anyone', 'members_only') NOT NULL,
|
| + read_only_reason VARCHAR(80), -- normally empty for read-write.
|
| + state_reason VARCHAR(80), -- optional reason for doomed project.
|
| + delete_time INT, -- if set, automatically transition to state deletable.
|
| +
|
| + issue_notify_address VARCHAR(80),
|
| + attachment_bytes_used BIGINT DEFAULT 0,
|
| + attachment_quota BIGINT DEFAULT 0, -- 50 MB default set in python code.
|
| +
|
| + cached_content_timestamp INT,
|
| + recent_activity_timestamp INT,
|
| + moved_to VARCHAR(250),
|
| + process_inbound_email BOOLEAN DEFAULT FALSE,
|
| +
|
| + only_owners_remove_restrictions BOOLEAN DEFAULT FALSE,
|
| + only_owners_see_contributors BOOLEAN DEFAULT FALSE,
|
| +
|
| + revision_url_format VARCHAR(250),
|
| +
|
| + home_page VARCHAR(250),
|
| + docs_url VARCHAR(250),
|
| + logo_gcs_id VARCHAR(250),
|
| + logo_file_name VARCHAR(250),
|
| +
|
| + PRIMARY KEY (project_id),
|
| + UNIQUE KEY (project_name)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE ActionLimit (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + action_kind ENUM (
|
| + 'project_creation', 'issue_comment', 'issue_attachment',
|
| + 'issue_bulk_edit', 'api_request'),
|
| + recent_count INT,
|
| + reset_timestamp INT,
|
| + lifetime_count INT,
|
| + lifetime_limit INT,
|
| + period_soft_limit INT,
|
| + period_hard_limit INT,
|
| +
|
| + PRIMARY KEY (user_id, action_kind)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE DismissedCues (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + cue VARCHAR(40), -- names of the cue cards that the user has dismissed.
|
| +
|
| + INDEX (user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE User2Project (
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + user_id INT UNSIGNED NOT NULL,
|
| + role_name ENUM ('owner', 'committer', 'contributor'),
|
| +
|
| + PRIMARY KEY (project_id, user_id),
|
| + INDEX (user_id),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE ExtraPerm (
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + user_id INT UNSIGNED NOT NULL,
|
| + perm VARCHAR(80),
|
| +
|
| + PRIMARY KEY (project_id, user_id, perm),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE MemberNotes (
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + user_id INT UNSIGNED NOT NULL,
|
| + notes TEXT,
|
| +
|
| + PRIMARY KEY (project_id, user_id),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE UserStar (
|
| + starred_user_id INT UNSIGNED NOT NULL,
|
| + user_id INT UNSIGNED NOT NULL,
|
| +
|
| + PRIMARY KEY (starred_user_id, user_id),
|
| + INDEX (user_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id),
|
| + FOREIGN KEY (starred_user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE ProjectStar (
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + user_id INT UNSIGNED NOT NULL,
|
| +
|
| + PRIMARY KEY (project_id, user_id),
|
| + INDEX (user_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE UserGroup (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + group_id INT UNSIGNED NOT NULL,
|
| + role ENUM ('owner', 'member') NOT NULL DEFAULT 'member',
|
| +
|
| + PRIMARY KEY (user_id, group_id),
|
| + INDEX (group_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id),
|
| + FOREIGN KEY (group_id) REFERENCES User(user_id)
|
| +
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +CREATE TABLE UserGroupSettings (
|
| + group_id INT UNSIGNED NOT NULL,
|
| +
|
| + who_can_view_members ENUM ('owners', 'members', 'anyone'),
|
| +
|
| + external_group_type ENUM ('chrome_infra_auth', 'mdb', 'baggins'),
|
| + -- timestamps in seconds since the epoch.
|
| + last_sync_time INT,
|
| +
|
| + PRIMARY KEY (group_id),
|
| + FOREIGN KEY (group_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +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;
|
| +
|
| +
|
| +-- These are quick-edit commands that the user can easily repeat.
|
| +CREATE TABLE QuickEditHistory (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + slot_num SMALLINT UNSIGNED NOT NULL,
|
| +
|
| + command VARCHAR(255) NOT NULL,
|
| + comment TEXT NOT NULL,
|
| +
|
| + PRIMARY KEY (user_id, project_id, slot_num),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
| +
|
| +
|
| +-- This allows us to offer the most recent command to the user again
|
| +-- as the default quick-edit command for next time.
|
| +CREATE TABLE QuickEditMostRecent (
|
| + user_id INT UNSIGNED NOT NULL,
|
| + project_id SMALLINT UNSIGNED NOT NULL,
|
| + slot_num SMALLINT UNSIGNED NOT NULL,
|
| +
|
| + PRIMARY KEY (user_id, project_id),
|
| + FOREIGN KEY (project_id) REFERENCES Project(project_id),
|
| + FOREIGN KEY (user_id) REFERENCES User(user_id)
|
| +) ENGINE=INNODB;
|
|
|