golang.org/x/build@v0.0.0-20240506185731-218518f32b70/internal/relui/queries/workflows.sql (about) 1 -- Copyright 2021 The Go Authors. All rights reserved. 2 -- Use of this source code is governed by a BSD-style 3 -- license that can be found in the LICENSE file. 4 5 -- name: Workflows :many 6 SELECT * 7 FROM workflows 8 ORDER BY created_at DESC; 9 10 -- name: WorkflowsByName :many 11 SELECT * 12 FROM workflows 13 WHERE name = $1 14 ORDER BY created_at DESC; 15 16 -- name: WorkflowsByNames :many 17 SELECT * 18 FROM workflows 19 WHERE name = ANY(@names::text[]) 20 ORDER BY created_at DESC; 21 22 -- name: WorkflowNames :many 23 SELECT DISTINCT name::text 24 FROM workflows; 25 26 -- name: Workflow :one 27 SELECT * 28 FROM workflows 29 WHERE id = $1; 30 31 -- name: WorkflowCount :one 32 SELECT COUNT(*) 33 FROM workflows; 34 35 -- name: WorkflowSidebar :many 36 SELECT name, COUNT(*) 37 FROM workflows 38 GROUP BY name 39 ORDER BY name; 40 41 -- name: CreateWorkflow :one 42 INSERT INTO workflows (id, params, name, schedule_id, created_at, updated_at) 43 VALUES ($1, $2, $3, $4, $5, $6) 44 RETURNING *; 45 46 -- name: CreateTask :one 47 INSERT INTO tasks (workflow_id, name, finished, result, error, created_at, updated_at, approved_at, 48 ready_for_approval) 49 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) 50 RETURNING *; 51 52 -- name: UpsertTask :one 53 INSERT INTO tasks (workflow_id, name, started, finished, result, error, created_at, updated_at, 54 retry_count) 55 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) 56 ON CONFLICT (workflow_id, name) DO UPDATE 57 SET workflow_id = excluded.workflow_id, 58 name = excluded.name, 59 started = excluded.started, 60 finished = excluded.finished, 61 result = excluded.result, 62 error = excluded.error, 63 updated_at = excluded.updated_at, 64 retry_count = excluded.retry_count 65 RETURNING *; 66 67 -- name: Tasks :many 68 WITH most_recent_logs AS ( 69 SELECT workflow_id, task_name, MAX(updated_at) AS updated_at 70 FROM task_logs 71 GROUP BY workflow_id, task_name 72 ) 73 SELECT tasks.*, 74 GREATEST(most_recent_logs.updated_at, tasks.updated_at)::timestamptz AS most_recent_update 75 FROM tasks 76 LEFT JOIN most_recent_logs ON tasks.workflow_id = most_recent_logs.workflow_id AND 77 tasks.name = most_recent_logs.task_name 78 ORDER BY most_recent_update DESC; 79 80 -- name: TasksForWorkflowSorted :many 81 WITH most_recent_logs AS ( 82 SELECT workflow_id, task_name, MAX(updated_at) AS updated_at 83 FROM task_logs 84 GROUP BY workflow_id, task_name 85 ) 86 SELECT tasks.*, 87 GREATEST(most_recent_logs.updated_at, tasks.updated_at)::timestamptz AS most_recent_update 88 FROM tasks 89 LEFT JOIN most_recent_logs ON tasks.workflow_id = most_recent_logs.workflow_id AND 90 tasks.name = most_recent_logs.task_name 91 WHERE tasks.workflow_id = $1 92 ORDER BY most_recent_update DESC; 93 94 -- name: TasksForWorkflow :many 95 SELECT tasks.* 96 FROM tasks 97 WHERE workflow_id = $1 98 ORDER BY created_at; 99 100 -- name: Task :one 101 SELECT tasks.* 102 FROM tasks 103 WHERE workflow_id = $1 104 AND name = $2 105 LIMIT 1; 106 107 -- name: CreateTaskLog :one 108 INSERT INTO task_logs (workflow_id, task_name, body) 109 VALUES ($1, $2, $3) 110 RETURNING *; 111 112 -- name: TaskLogsForTask :many 113 SELECT task_logs.* 114 FROM task_logs 115 WHERE workflow_id = $1 116 AND task_name = $2 117 ORDER BY created_at; 118 119 -- name: TaskLogsForWorkflow :many 120 SELECT task_logs.* 121 FROM task_logs 122 WHERE workflow_id = $1 123 ORDER BY created_at; 124 125 -- name: TaskLogs :many 126 SELECT task_logs.* 127 FROM task_logs 128 ORDER BY created_at; 129 130 -- name: UnfinishedWorkflows :many 131 SELECT workflows.* 132 FROM workflows 133 WHERE workflows.finished = FALSE; 134 135 -- name: FailUnfinishedTasks :exec 136 UPDATE tasks 137 SET finished = TRUE, 138 started = TRUE, 139 error = 'task interrupted before completion', 140 updated_at = $2 141 WHERE workflow_id = $1 and started and not finished; 142 143 -- name: WorkflowFinished :one 144 UPDATE workflows 145 SET finished = $2, 146 output = $3, 147 error = $4, 148 updated_at = $5 149 WHERE workflows.id = $1 150 RETURNING *; 151 152 -- name: ApproveTask :one 153 UPDATE tasks 154 SET approved_at = $3, 155 updated_at = $3 156 WHERE workflow_id = $1 157 AND name = $2 158 RETURNING *; 159 160 -- name: UpdateTaskReadyForApproval :one 161 UPDATE tasks 162 SET ready_for_approval = $3 163 WHERE workflow_id = $1 164 AND name = $2 165 RETURNING *; 166 167 -- name: Schedules :many 168 SELECT * 169 FROM schedules 170 ORDER BY id; 171 172 -- name: CreateSchedule :one 173 INSERT INTO schedules (workflow_name, workflow_params, spec, once, interval_minutes, created_at, updated_at) 174 VALUES ($1, $2, $3, $4, $5, $6, $7) 175 RETURNING *; 176 177 -- name: DeleteSchedule :one 178 DELETE 179 FROM schedules 180 WHERE id = $1 181 RETURNING *; 182 183 -- name: ClearWorkflowSchedule :many 184 UPDATE workflows 185 SET schedule_id = NULL 186 WHERE schedule_id = $1::int 187 RETURNING id; 188 189 -- name: SchedulesLastRun :many 190 WITH last_scheduled_run AS ( 191 SELECT DISTINCT ON (schedule_id) schedule_id, id, created_at, workflows.error, finished 192 FROM workflows 193 ORDER BY schedule_id, workflows.created_at DESC 194 ) 195 SELECT schedules.id, 196 last_scheduled_run.id AS workflow_id, 197 last_scheduled_run.created_at AS workflow_created_at, 198 last_scheduled_run.error AS workflow_error, 199 last_scheduled_run.finished AS workflow_finished 200 FROM schedules 201 LEFT OUTER JOIN last_scheduled_run ON last_scheduled_run.schedule_id = schedules.id;