mirror of
https://github.com/modrinth/code.git
synced 2026-08-30 11:36:05 +00:00
104 lines
2.9 KiB
SQL
104 lines
2.9 KiB
SQL
ALTER TYPE delphi_severity ADD VALUE IF NOT EXISTS 'hidden' BEFORE 'low';
|
|
ALTER TYPE delphi_severity ADD VALUE IF NOT EXISTS 'malware' AFTER 'severe';
|
|
|
|
CREATE TABLE delphi_rules (
|
|
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
created_by BIGINT REFERENCES users(id)
|
|
ON DELETE SET NULL,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_by BIGINT REFERENCES users(id)
|
|
ON DELETE SET NULL,
|
|
name VARCHAR(256) NOT NULL,
|
|
rule VARCHAR(65536) NOT NULL,
|
|
priority INTEGER NOT NULL DEFAULT 0,
|
|
revision BIGINT NOT NULL DEFAULT 0,
|
|
delete_on_next_revision BOOL NOT NULL DEFAULT FALSE
|
|
);
|
|
|
|
CREATE TABLE delphi_rule_revisions (
|
|
revision BIGINT PRIMARY KEY
|
|
);
|
|
|
|
INSERT INTO delphi_rule_revisions (revision)
|
|
VALUES (1);
|
|
|
|
CREATE TABLE delphi_rule_effects (
|
|
revision BIGINT NOT NULL,
|
|
detail_id BIGINT NOT NULL REFERENCES delphi_report_issue_details(id)
|
|
ON DELETE CASCADE
|
|
ON UPDATE CASCADE,
|
|
rule_id BIGINT NOT NULL REFERENCES delphi_rules(id)
|
|
ON UPDATE CASCADE,
|
|
severity delphi_severity NOT NULL,
|
|
PRIMARY KEY (revision, detail_id)
|
|
);
|
|
|
|
CREATE INDEX delphi_rule_effects_rule_id ON delphi_rule_effects(rule_id);
|
|
|
|
DROP VIEW delphi_issue_details_with_statuses;
|
|
|
|
CREATE VIEW delphi_issue_details_with_statuses AS
|
|
SELECT
|
|
drid.id,
|
|
drid.issue_id,
|
|
drid.key,
|
|
drid.jar,
|
|
drid.file_path,
|
|
drid.decompiled_source,
|
|
drid.data,
|
|
drid.severity AS original_severity,
|
|
COALESCE(dre.severity, drid.severity) AS severity,
|
|
m.id AS project_id,
|
|
didv.verdict AS local_status,
|
|
dgdv.verdict AS global_status,
|
|
COALESCE(dgdv.verdict, didv.verdict, 'pending') AS status
|
|
FROM delphi_report_issue_details drid
|
|
INNER JOIN delphi_report_issues dri ON dri.id = drid.issue_id
|
|
INNER JOIN delphi_reports dr ON dr.id = dri.report_id
|
|
INNER JOIN files f ON f.id = dr.file_id
|
|
INNER JOIN versions v ON v.id = f.version_id
|
|
INNER JOIN mods m ON m.id = v.mod_id
|
|
LEFT JOIN delphi_global_detail_verdicts dgdv
|
|
ON drid.key = dgdv.detail_key
|
|
LEFT JOIN delphi_issue_detail_verdicts didv
|
|
ON m.id = didv.project_id
|
|
AND drid.key = didv.detail_key
|
|
LEFT JOIN (
|
|
SELECT revision
|
|
FROM delphi_rule_revisions
|
|
LIMIT 1
|
|
) drr ON TRUE
|
|
LEFT JOIN delphi_rule_effects dre
|
|
ON dre.revision = drr.revision
|
|
AND dre.detail_id = drid.id;
|
|
|
|
CREATE TABLE delphi_tech_review_queue (
|
|
project_id BIGINT PRIMARY KEY REFERENCES mods(id)
|
|
ON DELETE CASCADE
|
|
);
|
|
|
|
INSERT INTO delphi_tech_review_queue (project_id)
|
|
SELECT DISTINCT didws.project_id
|
|
FROM delphi_issue_details_with_statuses didws
|
|
INNER JOIN delphi_report_issues dri ON dri.id = didws.issue_id
|
|
WHERE
|
|
(
|
|
dri.issue_type = '__dummy'
|
|
AND didws.status = 'pending'
|
|
)
|
|
OR (
|
|
dri.issue_type != '__dummy'
|
|
AND didws.status IN ('pending', 'unsafe')
|
|
AND didws.severity::text != 'hidden'
|
|
);
|
|
|
|
DELETE FROM delphi_report_issue_details detail
|
|
USING delphi_report_issues issue
|
|
WHERE
|
|
detail.issue_id = issue.id
|
|
AND issue.issue_type = '__dummy';
|
|
|
|
DELETE FROM delphi_report_issues
|
|
WHERE issue_type = '__dummy';
|