AkurAI Build
Menu

Public repository / main

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;