Menu
Public repository / 8d41f1e10aceed387d425b43038f2070e399a349
AkurAI-Build / migrations/005_pull_requests.sql
Latest change 0e01aafc5042febc63a50aafdb66008ea3187006 - Pull requests with reviews, comments and server-side merge/squash/rebase (OLI-267) by Ólafur Búi Ólafsson
CREATE TABLE pull_requests (
id INTEGER PRIMARY KEY,
repository_id INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
number INTEGER NOT NULL CHECK (number > 0),
title TEXT NOT NULL CHECK (length(title) BETWEEN 1 AND 256),
body TEXT NOT NULL DEFAULT '' CHECK (length(body) <= 65536),
author TEXT NOT NULL CHECK (length(author) BETWEEN 1 AND 128),
base_ref TEXT NOT NULL CHECK (length(base_ref) BETWEEN 1 AND 200),
head_ref TEXT NOT NULL CHECK (length(head_ref) BETWEEN 1 AND 200),
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'closed', 'merged')),
merge_method TEXT CHECK (merge_method IS NULL OR merge_method IN ('merge', 'squash', 'rebase')),
merge_sha TEXT CHECK (merge_sha IS NULL OR length(merge_sha) IN (40, 64)),
merged_by TEXT,
created_at INTEGER NOT NULL DEFAULT (unixepoch()),
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
merged_at INTEGER,
UNIQUE (repository_id, number)
) STRICT;
CREATE INDEX pull_requests_repository_status
ON pull_requests(repository_id, status, number DESC);
CREATE TABLE reviews (
id INTEGER PRIMARY KEY,
pull_request_id INTEGER NOT NULL REFERENCES pull_requests(id) ON DELETE CASCADE,
author TEXT NOT NULL CHECK (length(author) BETWEEN 1 AND 128),
state TEXT NOT NULL CHECK (state IN ('approved', 'changes_requested', 'commented')),
body TEXT NOT NULL DEFAULT '' CHECK (length(body) <= 65536),
created_at INTEGER NOT NULL DEFAULT (unixepoch())
) STRICT;
CREATE INDEX reviews_pull_request ON reviews(pull_request_id, id);
CREATE TABLE review_comments (
id INTEGER PRIMARY KEY,
pull_request_id INTEGER NOT NULL REFERENCES pull_requests(id) ON DELETE CASCADE,
review_id INTEGER REFERENCES reviews(id) ON DELETE CASCADE,
author TEXT NOT NULL CHECK (length(author) BETWEEN 1 AND 128),
path TEXT CHECK (path IS NULL OR length(path) <= 1024),
line INTEGER CHECK (line IS NULL OR line > 0),
body TEXT NOT NULL CHECK (length(body) BETWEEN 1 AND 65536),
created_at INTEGER NOT NULL DEFAULT (unixepoch())
) STRICT;
CREATE INDEX review_comments_pull_request ON review_comments(pull_request_id, id);
PRAGMA user_version = 5;