aboutsummaryrefslogtreecommitdiff
path: root/forged/sql
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--forged/sql/queries/repos.sql9
-rw-r--r--forged/sql/schema.sql21
2 files changed, 17 insertions, 13 deletions
diff --git a/forged/sql/queries/repos.sql b/forged/sql/queries/repos.sql
new file mode 100644
index 0000000..cacc5b8
--- /dev/null
+++ b/forged/sql/queries/repos.sql
@@ -0,0 +1,9 @@
+-- name: InsertRepo :one
+INSERT INTO repos (group_id, name, description, contrib_requirements)
+VALUES ($1, $2, $3, $4)
+RETURNING id;
+
+-- name: GetRepoByGroupAndName :one
+SELECT id, name, COALESCE(description, '') AS description
+FROM repos
+WHERE group_id = $1 AND name = $2;
diff --git a/forged/sql/schema.sql b/forged/sql/schema.sql
index 2f5ef9a..72327a9 100644
--- a/forged/sql/schema.sql
+++ b/forged/sql/schema.sql
@@ -24,8 +24,9 @@ CREATE TABLE repos (
name TEXT NOT NULL,
description TEXT,
contrib_requirements contrib_requirement NOT NULL,
- filesystem_path TEXT NOT NULL, -- does not have to be unique, double-mounting is allowed
UNIQUE(group_id, name)
+ -- The filesystem path can be derived from the repo ID.
+ -- The config has repo_dir, then we can do repo_dir/<id>.git
);
CREATE INDEX grepos_group_idx ON repos(group_id);
@@ -113,7 +114,7 @@ CREATE TABLE tickets (
UNIQUE(tracker_id, tracker_local_id)
);
-CREATE OR REPLACE FUNCTION create_tracker_ticket_sequence()
+CREATE FUNCTION create_tracker_ticket_sequence()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('tracker_ticket_seq_%s', NEW.id);
@@ -122,7 +123,7 @@ BEGIN
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-CREATE OR REPLACE FUNCTION drop_tracker_ticket_sequence()
+CREATE FUNCTION drop_tracker_ticket_sequence()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('tracker_ticket_seq_%s', OLD.id);
@@ -131,17 +132,15 @@ BEGIN
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
-DROP TRIGGER IF EXISTS after_insert_ticket_tracker ON ticket_trackers;
CREATE TRIGGER after_insert_ticket_tracker
AFTER INSERT ON ticket_trackers
FOR EACH ROW
EXECUTE FUNCTION create_tracker_ticket_sequence();
-DROP TRIGGER IF EXISTS before_delete_ticket_tracker ON ticket_trackers;
CREATE TRIGGER before_delete_ticket_tracker
BEFORE DELETE ON ticket_trackers
FOR EACH ROW
EXECUTE FUNCTION drop_tracker_ticket_sequence();
-CREATE OR REPLACE FUNCTION assign_tracker_local_id()
+CREATE FUNCTION assign_tracker_local_id()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('tracker_ticket_seq_%s', NEW.tracker_id);
@@ -152,7 +151,6 @@ BEGIN
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-DROP TRIGGER IF EXISTS before_insert_ticket ON tickets;
CREATE TRIGGER before_insert_ticket
BEFORE INSERT ON tickets
FOR EACH ROW
@@ -180,7 +178,7 @@ CREATE UNIQUE INDEX gmr_open_src_dst_uniq
WHERE status = 'open';
CREATE INDEX gmr_repo_idx ON merge_requests(repo_id);
CREATE INDEX gmr_creator_idx ON merge_requests(creator);
-CREATE OR REPLACE FUNCTION create_repo_mr_sequence()
+CREATE FUNCTION create_repo_mr_sequence()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('repo_mr_seq_%s', NEW.id);
@@ -189,7 +187,7 @@ BEGIN
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-CREATE OR REPLACE FUNCTION drop_repo_mr_sequence()
+CREATE FUNCTION drop_repo_mr_sequence()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('repo_mr_seq_%s', OLD.id);
@@ -198,17 +196,15 @@ BEGIN
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
-DROP TRIGGER IF EXISTS after_insert_repo ON repos;
CREATE TRIGGER after_insert_repo
AFTER INSERT ON repos
FOR EACH ROW
EXECUTE FUNCTION create_repo_mr_sequence();
-DROP TRIGGER IF EXISTS before_delete_repo ON repos;
CREATE TRIGGER before_delete_repo
BEFORE DELETE ON repos
FOR EACH ROW
EXECUTE FUNCTION drop_repo_mr_sequence();
-CREATE OR REPLACE FUNCTION assign_repo_local_id()
+CREATE FUNCTION assign_repo_local_id()
RETURNS TRIGGER AS $$
DECLARE
seq_name TEXT := format('repo_mr_seq_%s', NEW.repo_id);
@@ -219,7 +215,6 @@ BEGIN
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-DROP TRIGGER IF EXISTS before_insert_merge_request ON merge_requests;
CREATE TRIGGER before_insert_merge_request
BEFORE INSERT ON merge_requests
FOR EACH ROW