2024-09-26 22:26:30 +02:00

230 lines
5.0 KiB
SQL

-- name: CreateWorker :one
INSERT INTO workers (
created_at,
uuid,
secret,
name,
address,
platform,
software,
status,
last_seen_at,
status_requested,
lazy_status_request,
supported_task_types,
deleted_at,
can_restart
) values (
@created_at,
@uuid,
@secret,
@name,
@address,
@platform,
@software,
@status,
@last_seen_at,
@status_requested,
@lazy_status_request,
@supported_task_types,
@deleted_at,
@can_restart
)
RETURNING id;
-- name: WorkerAddTagMembership :exec
INSERT INTO worker_tag_membership (worker_tag_id, worker_id)
VALUES (@worker_tag_id, @worker_id);
-- name: WorkerRemoveTagMemberships :exec
DELETE
FROM worker_tag_membership
WHERE worker_id=@worker_id;
-- name: FetchWorkers :many
SELECT sqlc.embed(workers) FROM workers
WHERE deleted_at IS NULL;
-- name: FetchWorker :one
-- FetchWorker only returns the worker if it wasn't soft-deleted.
SELECT * FROM workers WHERE workers.uuid = @uuid and deleted_at is NULL;
-- name: FetchWorkerByID :one
-- FetchWorkerByID only returns the worker if it wasn't soft-deleted.
SELECT * FROM workers WHERE workers.id = @worker_id and deleted_at is NULL;
-- name: FetchWorkerUnconditional :one
-- FetchWorkerUnconditional ignores soft-deletion status and just returns the worker.
SELECT * FROM workers WHERE workers.uuid = @uuid;
-- name: FetchWorkerUnconditionalByID :one
-- FetchWorkerUnconditional ignores soft-deletion status and just returns the worker.
SELECT * FROM workers WHERE workers.id = @worker_id;
-- name: FetchTagsOfWorker :many
SELECT worker_tags.*
FROM worker_tags
LEFT JOIN worker_tag_membership m ON (m.worker_tag_id = worker_tags.id)
LEFT JOIN workers on (m.worker_id = workers.id)
WHERE workers.uuid = @uuid;
-- name: FetchWorkerTags :many
SELECT *
FROM worker_tags;
-- name: FetchWorkerTagByUUID :one
SELECT *
FROM worker_tags
WHERE worker_tags.uuid = @uuid;
-- name: FetchWorkerTagsByUUIDs :many
SELECT *
FROM worker_tags
WHERE uuid in (sqlc.slice('uuids'));
-- name: FetchWorkerTagByID :one
SELECT *
FROM worker_tags
WHERE id=@worker_tag_id;
-- name: SaveWorkerTag :exec
UPDATE worker_tags
SET
updated_at=@updated_at,
uuid=@uuid,
name=@name,
description=@description
WHERE id=@worker_tag_id;
-- name: DeleteWorkerTag :execrows
DELETE FROM worker_tags
WHERE uuid=@uuid;
-- name: CreateWorkerTag :execlastid
INSERT INTO worker_tags (
created_at,
uuid,
name,
description
) VALUES (
@created_at,
@uuid,
@name,
@description
);
-- name: CountWorkerTags :one
SELECT count(id) as count FROM worker_tags;
-- name: SoftDeleteWorker :execrows
UPDATE workers SET deleted_at=@deleted_at
WHERE uuid=@uuid;
-- name: SaveWorkerStatus :exec
UPDATE workers SET
updated_at=@updated_at,
status=@status,
status_requested=@status_requested,
lazy_status_request=@lazy_status_request
WHERE id=@id;
-- name: SaveWorker :exec
UPDATE workers SET
updated_at=@updated_at,
uuid=@uuid,
secret=@secret,
name=@name,
address=@address,
platform=@platform,
software=@software,
status=@status,
last_seen_at=@last_seen_at,
status_requested=@status_requested,
lazy_status_request=@lazy_status_request,
supported_task_types=@supported_task_types,
can_restart=@can_restart
WHERE id=@id;
-- name: WorkerSeen :exec
UPDATE workers SET
updated_at=@updated_at,
last_seen_at=@last_seen_at
WHERE id=@id;
-- name: SummarizeWorkerStatuses :many
SELECT status, count(id) as status_count FROM workers
WHERE deleted_at is NULL
GROUP BY status;
-- name: FetchTimedOutWorkers :many
SELECT *
FROM workers
WHERE
last_seen_at <= @last_seen_before
AND deleted_at IS NULL
AND status NOT IN (sqlc.slice('worker_statuses_no_timeout'));
-- name: FetchWorkerSleepSchedule :one
SELECT sleep_schedules.*
FROM sleep_schedules
INNER JOIN workers on workers.id = sleep_schedules.worker_id
WHERE workers.uuid = @workerUUID;
-- name: SetWorkerSleepSchedule :execlastid
-- Note that the use of ?2 and ?3 in the SQL is not desirable, and should be
-- replaced with @updated_at and @job_id as soon as sqlc issue #3334 is fixed.
-- See https://github.com/sqlc-dev/sqlc/issues/3334 for more info.
INSERT INTO sleep_schedules (
created_at,
updated_at,
worker_id,
is_active,
days_of_week,
start_time,
end_time,
next_check
) VALUES (
@created_at,
@updated_at,
@worker_id,
@is_active,
@days_of_week,
@start_time,
@end_time,
@next_check
)
ON CONFLICT DO UPDATE
SET updated_at=?2, is_active=?4, days_of_week=?5, start_time=?6, end_time=?7, next_check=?8
WHERE worker_id=?3;
-- name: SetWorkerSleepScheduleNextCheck :execrows
UPDATE sleep_schedules
SET next_check=@next_check
WHERE ID=@schedule_id;
-- name: FetchSleepSchedulesToCheck :many
SELECT * FROM sleep_schedules
WHERE is_active
AND (next_check <= @next_check OR next_check IS NULL OR next_check = '');
-- name: Test_CreateWorkerSleepSchedule :execlastid
INSERT INTO sleep_schedules (
created_at,
worker_id,
is_active,
days_of_week,
start_time,
end_time,
next_check
) VALUES (
@created_at,
@worker_id,
@is_active,
@days_of_week,
@start_time,
@end_time,
@next_check
);