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;