Files

94 lines
2.3 KiB
SQL

-- name: CreateWorktree :one
INSERT INTO workspace_worktrees (
id, workspace_id, branch, path, status, active_holder, acquired_at
) VALUES ($1,$2,$3,$4,$5,$6,$7)
RETURNING *;
-- name: GetWorktreeByID :one
SELECT * FROM workspace_worktrees WHERE id = $1;
-- name: GetWorktreeByIDForUpdate :one
SELECT * FROM workspace_worktrees WHERE id = $1
FOR UPDATE;
-- name: GetWorktreeByBranchForUpdate :one
SELECT * FROM workspace_worktrees
WHERE workspace_id = $1 AND branch = $2
FOR UPDATE;
-- name: ListWorktreesByWorkspace :many
SELECT * FROM workspace_worktrees
WHERE workspace_id = $1
ORDER BY created_at DESC;
-- name: SetWorktreeActive :one
UPDATE workspace_worktrees
SET status = 'active',
active_holder = $2,
acquired_at = now(),
last_used_at = now(),
prune_warning_at = NULL
WHERE id = $1
RETURNING *;
-- name: SetWorktreeIdle :one
UPDATE workspace_worktrees
SET status = 'idle',
active_holder = NULL,
acquired_at = NULL,
last_used_at = now(),
prune_warning_at = NULL
WHERE id = $1
RETURNING *;
-- name: SetWorktreePruning :one
UPDATE workspace_worktrees
SET status = 'pruning', last_used_at = now()
WHERE id = $1
RETURNING *;
-- name: DeleteWorktree :exec
DELETE FROM workspace_worktrees WHERE id = $1;
-- name: ListWorktreesNeedingPruneWarning :many
SELECT * FROM workspace_worktrees
WHERE status = 'idle'
AND prune_warning_at IS NULL
AND last_used_at < $1
ORDER BY last_used_at ASC;
-- name: ListWorktreesNeedingPrune :many
SELECT * FROM workspace_worktrees
WHERE status = 'idle'
AND last_used_at < $1
ORDER BY last_used_at ASC;
-- name: MarkPruneWarning :exec
UPDATE workspace_worktrees
SET prune_warning_at = now()
WHERE id = $1 AND prune_warning_at IS NULL;
-- name: TryStartPrune :one
UPDATE workspace_worktrees
SET status = 'pruning'
WHERE id = $1 AND status = 'idle'
RETURNING *;
-- name: FinishPruneSuccess :exec
DELETE FROM workspace_worktrees WHERE id = $1;
-- name: FinishPruneRollback :exec
UPDATE workspace_worktrees
SET status = 'idle'
WHERE id = $1 AND status = 'pruning';
-- name: ReleaseWorktreesByHolder :many
UPDATE workspace_worktrees
SET status = 'idle',
active_holder = NULL,
acquired_at = NULL,
last_used_at = now(),
prune_warning_at = NULL
WHERE active_holder = $1 AND status = 'active'
RETURNING *;