38 lines
1.3 KiB
SQL
38 lines
1.3 KiB
SQL
-- name: CreateJob :exec
|
|||
|
|
INSERT INTO jobs (id, kind, status, payload, created_at, updated_at)
|
||
|
|
VALUES (?, ?, 'queued', ?, ?, ?);
|
||
|
|
|
||
|
|
-- name: ClaimNextJob :one
|
||
|
|
-- Marks the oldest queued job running and returns it. Returns sql.ErrNoRows
|
||
|
|
-- when no job is queued.
|
||
|
|
UPDATE jobs
|
||
|
|
SET status = 'running', started_at = sqlc.arg(now), updated_at = sqlc.arg(now)
|
||
|
|
WHERE id = (SELECT id FROM jobs WHERE status = 'queued' ORDER BY id LIMIT 1)
|
||
|
|
RETURNING *;
|
||
|
|
|
||
|
|
-- name: PublishJobResult :execrows
|
||
|
|
-- Stores a partial result of a running job.
|
||
|
|
UPDATE jobs
|
||
|
|
SET result = ?, updated_at = ?
|
||
|
|
WHERE id = ? AND status = 'running';
|
||
|
|
|
||
|
|
-- name: SucceedJob :execrows
|
||
|
|
UPDATE jobs
|
||
|
|
SET status = 'succeeded', result = sqlc.arg(result), finished_at = sqlc.arg(now), updated_at = sqlc.arg(now)
|
||
|
|
WHERE id = sqlc.arg(id) AND status = 'running';
|
||
|
|
|
||
|
|
-- name: FailJob :execrows
|
||
|
|
UPDATE jobs
|
||
|
|
SET status = 'failed', error = sqlc.arg(error), finished_at = sqlc.arg(now), updated_at = sqlc.arg(now)
|
||
|
|
WHERE id = sqlc.arg(id) AND status = 'running';
|
||
|
|
|
||
|
|
-- name: FailRunningJobs :execrows
|
||
|
|
-- Fails every job left running, at boot before any worker starts.
|
||
|
|
UPDATE jobs
|
||
|
|
SET status = 'failed', error = sqlc.arg(error), finished_at = sqlc.arg(now), updated_at = sqlc.arg(now)
|
||
|
|
WHERE status = 'running';
|
||
|
|
|
||
|
|
-- name: GetJob :one
|
||
|
|
SELECT * FROM jobs
|
||
|
|
WHERE id = ?;
|