golang.org/x/build@v0.0.0-20240506185731-218518f32b70/internal/relui/db/workflows.sql.go (about)

     1  // Code generated by sqlc. DO NOT EDIT.
     2  // versions:
     3  //   sqlc v1.15.0
     4  // source: workflows.sql
     5  
     6  package db
     7  
     8  import (
     9  	"context"
    10  	"database/sql"
    11  	"time"
    12  
    13  	"github.com/google/uuid"
    14  )
    15  
    16  const approveTask = `-- name: ApproveTask :one
    17  UPDATE tasks
    18  SET approved_at = $3,
    19      updated_at  = $3
    20  WHERE workflow_id = $1
    21    AND name = $2
    22  RETURNING workflow_id, name, finished, result, error, created_at, updated_at, approved_at, ready_for_approval, started, retry_count
    23  `
    24  
    25  type ApproveTaskParams struct {
    26  	WorkflowID uuid.UUID
    27  	Name       string
    28  	ApprovedAt sql.NullTime
    29  }
    30  
    31  func (q *Queries) ApproveTask(ctx context.Context, arg ApproveTaskParams) (Task, error) {
    32  	row := q.db.QueryRow(ctx, approveTask, arg.WorkflowID, arg.Name, arg.ApprovedAt)
    33  	var i Task
    34  	err := row.Scan(
    35  		&i.WorkflowID,
    36  		&i.Name,
    37  		&i.Finished,
    38  		&i.Result,
    39  		&i.Error,
    40  		&i.CreatedAt,
    41  		&i.UpdatedAt,
    42  		&i.ApprovedAt,
    43  		&i.ReadyForApproval,
    44  		&i.Started,
    45  		&i.RetryCount,
    46  	)
    47  	return i, err
    48  }
    49  
    50  const clearWorkflowSchedule = `-- name: ClearWorkflowSchedule :many
    51  UPDATE workflows
    52  SET schedule_id = NULL
    53  WHERE schedule_id = $1::int
    54  RETURNING id
    55  `
    56  
    57  func (q *Queries) ClearWorkflowSchedule(ctx context.Context, dollar_1 int32) ([]uuid.UUID, error) {
    58  	rows, err := q.db.Query(ctx, clearWorkflowSchedule, dollar_1)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	defer rows.Close()
    63  	var items []uuid.UUID
    64  	for rows.Next() {
    65  		var id uuid.UUID
    66  		if err := rows.Scan(&id); err != nil {
    67  			return nil, err
    68  		}
    69  		items = append(items, id)
    70  	}
    71  	if err := rows.Err(); err != nil {
    72  		return nil, err
    73  	}
    74  	return items, nil
    75  }
    76  
    77  const createSchedule = `-- name: CreateSchedule :one
    78  INSERT INTO schedules (workflow_name, workflow_params, spec, once, interval_minutes, created_at, updated_at)
    79  VALUES ($1, $2, $3, $4, $5, $6, $7)
    80  RETURNING id, workflow_name, workflow_params, spec, once, interval_minutes, created_at, updated_at
    81  `
    82  
    83  type CreateScheduleParams struct {
    84  	WorkflowName    string
    85  	WorkflowParams  sql.NullString
    86  	Spec            string
    87  	Once            time.Time
    88  	IntervalMinutes int32
    89  	CreatedAt       time.Time
    90  	UpdatedAt       time.Time
    91  }
    92  
    93  func (q *Queries) CreateSchedule(ctx context.Context, arg CreateScheduleParams) (Schedule, error) {
    94  	row := q.db.QueryRow(ctx, createSchedule,
    95  		arg.WorkflowName,
    96  		arg.WorkflowParams,
    97  		arg.Spec,
    98  		arg.Once,
    99  		arg.IntervalMinutes,
   100  		arg.CreatedAt,
   101  		arg.UpdatedAt,
   102  	)
   103  	var i Schedule
   104  	err := row.Scan(
   105  		&i.ID,
   106  		&i.WorkflowName,
   107  		&i.WorkflowParams,
   108  		&i.Spec,
   109  		&i.Once,
   110  		&i.IntervalMinutes,
   111  		&i.CreatedAt,
   112  		&i.UpdatedAt,
   113  	)
   114  	return i, err
   115  }
   116  
   117  const createTask = `-- name: CreateTask :one
   118  INSERT INTO tasks (workflow_id, name, finished, result, error, created_at, updated_at, approved_at,
   119                     ready_for_approval)
   120  VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
   121  RETURNING workflow_id, name, finished, result, error, created_at, updated_at, approved_at, ready_for_approval, started, retry_count
   122  `
   123  
   124  type CreateTaskParams struct {
   125  	WorkflowID       uuid.UUID
   126  	Name             string
   127  	Finished         bool
   128  	Result           sql.NullString
   129  	Error            sql.NullString
   130  	CreatedAt        time.Time
   131  	UpdatedAt        time.Time
   132  	ApprovedAt       sql.NullTime
   133  	ReadyForApproval bool
   134  }
   135  
   136  func (q *Queries) CreateTask(ctx context.Context, arg CreateTaskParams) (Task, error) {
   137  	row := q.db.QueryRow(ctx, createTask,
   138  		arg.WorkflowID,
   139  		arg.Name,
   140  		arg.Finished,
   141  		arg.Result,
   142  		arg.Error,
   143  		arg.CreatedAt,
   144  		arg.UpdatedAt,
   145  		arg.ApprovedAt,
   146  		arg.ReadyForApproval,
   147  	)
   148  	var i Task
   149  	err := row.Scan(
   150  		&i.WorkflowID,
   151  		&i.Name,
   152  		&i.Finished,
   153  		&i.Result,
   154  		&i.Error,
   155  		&i.CreatedAt,
   156  		&i.UpdatedAt,
   157  		&i.ApprovedAt,
   158  		&i.ReadyForApproval,
   159  		&i.Started,
   160  		&i.RetryCount,
   161  	)
   162  	return i, err
   163  }
   164  
   165  const createTaskLog = `-- name: CreateTaskLog :one
   166  INSERT INTO task_logs (workflow_id, task_name, body)
   167  VALUES ($1, $2, $3)
   168  RETURNING id, workflow_id, task_name, body, created_at, updated_at
   169  `
   170  
   171  type CreateTaskLogParams struct {
   172  	WorkflowID uuid.UUID
   173  	TaskName   string
   174  	Body       string
   175  }
   176  
   177  func (q *Queries) CreateTaskLog(ctx context.Context, arg CreateTaskLogParams) (TaskLog, error) {
   178  	row := q.db.QueryRow(ctx, createTaskLog, arg.WorkflowID, arg.TaskName, arg.Body)
   179  	var i TaskLog
   180  	err := row.Scan(
   181  		&i.ID,
   182  		&i.WorkflowID,
   183  		&i.TaskName,
   184  		&i.Body,
   185  		&i.CreatedAt,
   186  		&i.UpdatedAt,
   187  	)
   188  	return i, err
   189  }
   190  
   191  const createWorkflow = `-- name: CreateWorkflow :one
   192  INSERT INTO workflows (id, params, name, schedule_id, created_at, updated_at)
   193  VALUES ($1, $2, $3, $4, $5, $6)
   194  RETURNING id, params, name, created_at, updated_at, finished, output, error, schedule_id
   195  `
   196  
   197  type CreateWorkflowParams struct {
   198  	ID         uuid.UUID
   199  	Params     sql.NullString
   200  	Name       sql.NullString
   201  	ScheduleID sql.NullInt32
   202  	CreatedAt  time.Time
   203  	UpdatedAt  time.Time
   204  }
   205  
   206  func (q *Queries) CreateWorkflow(ctx context.Context, arg CreateWorkflowParams) (Workflow, error) {
   207  	row := q.db.QueryRow(ctx, createWorkflow,
   208  		arg.ID,
   209  		arg.Params,
   210  		arg.Name,
   211  		arg.ScheduleID,
   212  		arg.CreatedAt,
   213  		arg.UpdatedAt,
   214  	)
   215  	var i Workflow
   216  	err := row.Scan(
   217  		&i.ID,
   218  		&i.Params,
   219  		&i.Name,
   220  		&i.CreatedAt,
   221  		&i.UpdatedAt,
   222  		&i.Finished,
   223  		&i.Output,
   224  		&i.Error,
   225  		&i.ScheduleID,
   226  	)
   227  	return i, err
   228  }
   229  
   230  const deleteSchedule = `-- name: DeleteSchedule :one
   231  DELETE
   232  FROM schedules
   233  WHERE id = $1
   234  RETURNING id, workflow_name, workflow_params, spec, once, interval_minutes, created_at, updated_at
   235  `
   236  
   237  func (q *Queries) DeleteSchedule(ctx context.Context, id int32) (Schedule, error) {
   238  	row := q.db.QueryRow(ctx, deleteSchedule, id)
   239  	var i Schedule
   240  	err := row.Scan(
   241  		&i.ID,
   242  		&i.WorkflowName,
   243  		&i.WorkflowParams,
   244  		&i.Spec,
   245  		&i.Once,
   246  		&i.IntervalMinutes,
   247  		&i.CreatedAt,
   248  		&i.UpdatedAt,
   249  	)
   250  	return i, err
   251  }
   252  
   253  const failUnfinishedTasks = `-- name: FailUnfinishedTasks :exec
   254  UPDATE tasks
   255      SET finished = TRUE,
   256      started      = TRUE,
   257      error        = 'task interrupted before completion',
   258      updated_at   = $2
   259  WHERE workflow_id = $1 and started and not finished
   260  `
   261  
   262  type FailUnfinishedTasksParams struct {
   263  	WorkflowID uuid.UUID
   264  	UpdatedAt  time.Time
   265  }
   266  
   267  func (q *Queries) FailUnfinishedTasks(ctx context.Context, arg FailUnfinishedTasksParams) error {
   268  	_, err := q.db.Exec(ctx, failUnfinishedTasks, arg.WorkflowID, arg.UpdatedAt)
   269  	return err
   270  }
   271  
   272  const schedules = `-- name: Schedules :many
   273  SELECT id, workflow_name, workflow_params, spec, once, interval_minutes, created_at, updated_at
   274  FROM schedules
   275  ORDER BY id
   276  `
   277  
   278  func (q *Queries) Schedules(ctx context.Context) ([]Schedule, error) {
   279  	rows, err := q.db.Query(ctx, schedules)
   280  	if err != nil {
   281  		return nil, err
   282  	}
   283  	defer rows.Close()
   284  	var items []Schedule
   285  	for rows.Next() {
   286  		var i Schedule
   287  		if err := rows.Scan(
   288  			&i.ID,
   289  			&i.WorkflowName,
   290  			&i.WorkflowParams,
   291  			&i.Spec,
   292  			&i.Once,
   293  			&i.IntervalMinutes,
   294  			&i.CreatedAt,
   295  			&i.UpdatedAt,
   296  		); err != nil {
   297  			return nil, err
   298  		}
   299  		items = append(items, i)
   300  	}
   301  	if err := rows.Err(); err != nil {
   302  		return nil, err
   303  	}
   304  	return items, nil
   305  }
   306  
   307  const schedulesLastRun = `-- name: SchedulesLastRun :many
   308  WITH last_scheduled_run AS (
   309      SELECT DISTINCT ON (schedule_id) schedule_id, id, created_at, workflows.error, finished
   310      FROM workflows
   311      ORDER BY schedule_id, workflows.created_at DESC
   312  )
   313  SELECT schedules.id,
   314         last_scheduled_run.id AS workflow_id,
   315         last_scheduled_run.created_at AS workflow_created_at,
   316         last_scheduled_run.error AS workflow_error,
   317         last_scheduled_run.finished AS workflow_finished
   318  FROM schedules
   319  LEFT OUTER JOIN last_scheduled_run ON last_scheduled_run.schedule_id = schedules.id
   320  `
   321  
   322  type SchedulesLastRunRow struct {
   323  	ID                int32
   324  	WorkflowID        uuid.UUID
   325  	WorkflowCreatedAt sql.NullTime
   326  	WorkflowError     sql.NullString
   327  	WorkflowFinished  sql.NullBool
   328  }
   329  
   330  func (q *Queries) SchedulesLastRun(ctx context.Context) ([]SchedulesLastRunRow, error) {
   331  	rows, err := q.db.Query(ctx, schedulesLastRun)
   332  	if err != nil {
   333  		return nil, err
   334  	}
   335  	defer rows.Close()
   336  	var items []SchedulesLastRunRow
   337  	for rows.Next() {
   338  		var i SchedulesLastRunRow
   339  		if err := rows.Scan(
   340  			&i.ID,
   341  			&i.WorkflowID,
   342  			&i.WorkflowCreatedAt,
   343  			&i.WorkflowError,
   344  			&i.WorkflowFinished,
   345  		); err != nil {
   346  			return nil, err
   347  		}
   348  		items = append(items, i)
   349  	}
   350  	if err := rows.Err(); err != nil {
   351  		return nil, err
   352  	}
   353  	return items, nil
   354  }
   355  
   356  const task = `-- name: Task :one
   357  SELECT tasks.workflow_id, tasks.name, tasks.finished, tasks.result, tasks.error, tasks.created_at, tasks.updated_at, tasks.approved_at, tasks.ready_for_approval, tasks.started, tasks.retry_count
   358  FROM tasks
   359  WHERE workflow_id = $1
   360    AND name = $2
   361  LIMIT 1
   362  `
   363  
   364  type TaskParams struct {
   365  	WorkflowID uuid.UUID
   366  	Name       string
   367  }
   368  
   369  func (q *Queries) Task(ctx context.Context, arg TaskParams) (Task, error) {
   370  	row := q.db.QueryRow(ctx, task, arg.WorkflowID, arg.Name)
   371  	var i Task
   372  	err := row.Scan(
   373  		&i.WorkflowID,
   374  		&i.Name,
   375  		&i.Finished,
   376  		&i.Result,
   377  		&i.Error,
   378  		&i.CreatedAt,
   379  		&i.UpdatedAt,
   380  		&i.ApprovedAt,
   381  		&i.ReadyForApproval,
   382  		&i.Started,
   383  		&i.RetryCount,
   384  	)
   385  	return i, err
   386  }
   387  
   388  const taskLogs = `-- name: TaskLogs :many
   389  SELECT task_logs.id, task_logs.workflow_id, task_logs.task_name, task_logs.body, task_logs.created_at, task_logs.updated_at
   390  FROM task_logs
   391  ORDER BY created_at
   392  `
   393  
   394  func (q *Queries) TaskLogs(ctx context.Context) ([]TaskLog, error) {
   395  	rows, err := q.db.Query(ctx, taskLogs)
   396  	if err != nil {
   397  		return nil, err
   398  	}
   399  	defer rows.Close()
   400  	var items []TaskLog
   401  	for rows.Next() {
   402  		var i TaskLog
   403  		if err := rows.Scan(
   404  			&i.ID,
   405  			&i.WorkflowID,
   406  			&i.TaskName,
   407  			&i.Body,
   408  			&i.CreatedAt,
   409  			&i.UpdatedAt,
   410  		); err != nil {
   411  			return nil, err
   412  		}
   413  		items = append(items, i)
   414  	}
   415  	if err := rows.Err(); err != nil {
   416  		return nil, err
   417  	}
   418  	return items, nil
   419  }
   420  
   421  const taskLogsForTask = `-- name: TaskLogsForTask :many
   422  SELECT task_logs.id, task_logs.workflow_id, task_logs.task_name, task_logs.body, task_logs.created_at, task_logs.updated_at
   423  FROM task_logs
   424  WHERE workflow_id = $1
   425    AND task_name = $2
   426  ORDER BY created_at
   427  `
   428  
   429  type TaskLogsForTaskParams struct {
   430  	WorkflowID uuid.UUID
   431  	TaskName   string
   432  }
   433  
   434  func (q *Queries) TaskLogsForTask(ctx context.Context, arg TaskLogsForTaskParams) ([]TaskLog, error) {
   435  	rows, err := q.db.Query(ctx, taskLogsForTask, arg.WorkflowID, arg.TaskName)
   436  	if err != nil {
   437  		return nil, err
   438  	}
   439  	defer rows.Close()
   440  	var items []TaskLog
   441  	for rows.Next() {
   442  		var i TaskLog
   443  		if err := rows.Scan(
   444  			&i.ID,
   445  			&i.WorkflowID,
   446  			&i.TaskName,
   447  			&i.Body,
   448  			&i.CreatedAt,
   449  			&i.UpdatedAt,
   450  		); err != nil {
   451  			return nil, err
   452  		}
   453  		items = append(items, i)
   454  	}
   455  	if err := rows.Err(); err != nil {
   456  		return nil, err
   457  	}
   458  	return items, nil
   459  }
   460  
   461  const taskLogsForWorkflow = `-- name: TaskLogsForWorkflow :many
   462  SELECT task_logs.id, task_logs.workflow_id, task_logs.task_name, task_logs.body, task_logs.created_at, task_logs.updated_at
   463  FROM task_logs
   464  WHERE workflow_id = $1
   465  ORDER BY created_at
   466  `
   467  
   468  func (q *Queries) TaskLogsForWorkflow(ctx context.Context, workflowID uuid.UUID) ([]TaskLog, error) {
   469  	rows, err := q.db.Query(ctx, taskLogsForWorkflow, workflowID)
   470  	if err != nil {
   471  		return nil, err
   472  	}
   473  	defer rows.Close()
   474  	var items []TaskLog
   475  	for rows.Next() {
   476  		var i TaskLog
   477  		if err := rows.Scan(
   478  			&i.ID,
   479  			&i.WorkflowID,
   480  			&i.TaskName,
   481  			&i.Body,
   482  			&i.CreatedAt,
   483  			&i.UpdatedAt,
   484  		); err != nil {
   485  			return nil, err
   486  		}
   487  		items = append(items, i)
   488  	}
   489  	if err := rows.Err(); err != nil {
   490  		return nil, err
   491  	}
   492  	return items, nil
   493  }
   494  
   495  const tasks = `-- name: Tasks :many
   496  WITH most_recent_logs AS (
   497      SELECT workflow_id, task_name, MAX(updated_at) AS updated_at
   498      FROM task_logs
   499      GROUP BY workflow_id, task_name
   500  )
   501  SELECT tasks.workflow_id, tasks.name, tasks.finished, tasks.result, tasks.error, tasks.created_at, tasks.updated_at, tasks.approved_at, tasks.ready_for_approval, tasks.started, tasks.retry_count,
   502         GREATEST(most_recent_logs.updated_at, tasks.updated_at)::timestamptz AS most_recent_update
   503  FROM tasks
   504  LEFT JOIN most_recent_logs ON tasks.workflow_id = most_recent_logs.workflow_id AND
   505                                tasks.name = most_recent_logs.task_name
   506  ORDER BY most_recent_update DESC
   507  `
   508  
   509  type TasksRow struct {
   510  	WorkflowID       uuid.UUID
   511  	Name             string
   512  	Finished         bool
   513  	Result           sql.NullString
   514  	Error            sql.NullString
   515  	CreatedAt        time.Time
   516  	UpdatedAt        time.Time
   517  	ApprovedAt       sql.NullTime
   518  	ReadyForApproval bool
   519  	Started          bool
   520  	RetryCount       int32
   521  	MostRecentUpdate time.Time
   522  }
   523  
   524  func (q *Queries) Tasks(ctx context.Context) ([]TasksRow, error) {
   525  	rows, err := q.db.Query(ctx, tasks)
   526  	if err != nil {
   527  		return nil, err
   528  	}
   529  	defer rows.Close()
   530  	var items []TasksRow
   531  	for rows.Next() {
   532  		var i TasksRow
   533  		if err := rows.Scan(
   534  			&i.WorkflowID,
   535  			&i.Name,
   536  			&i.Finished,
   537  			&i.Result,
   538  			&i.Error,
   539  			&i.CreatedAt,
   540  			&i.UpdatedAt,
   541  			&i.ApprovedAt,
   542  			&i.ReadyForApproval,
   543  			&i.Started,
   544  			&i.RetryCount,
   545  			&i.MostRecentUpdate,
   546  		); err != nil {
   547  			return nil, err
   548  		}
   549  		items = append(items, i)
   550  	}
   551  	if err := rows.Err(); err != nil {
   552  		return nil, err
   553  	}
   554  	return items, nil
   555  }
   556  
   557  const tasksForWorkflow = `-- name: TasksForWorkflow :many
   558  SELECT tasks.workflow_id, tasks.name, tasks.finished, tasks.result, tasks.error, tasks.created_at, tasks.updated_at, tasks.approved_at, tasks.ready_for_approval, tasks.started, tasks.retry_count
   559  FROM tasks
   560  WHERE workflow_id = $1
   561  ORDER BY created_at
   562  `
   563  
   564  func (q *Queries) TasksForWorkflow(ctx context.Context, workflowID uuid.UUID) ([]Task, error) {
   565  	rows, err := q.db.Query(ctx, tasksForWorkflow, workflowID)
   566  	if err != nil {
   567  		return nil, err
   568  	}
   569  	defer rows.Close()
   570  	var items []Task
   571  	for rows.Next() {
   572  		var i Task
   573  		if err := rows.Scan(
   574  			&i.WorkflowID,
   575  			&i.Name,
   576  			&i.Finished,
   577  			&i.Result,
   578  			&i.Error,
   579  			&i.CreatedAt,
   580  			&i.UpdatedAt,
   581  			&i.ApprovedAt,
   582  			&i.ReadyForApproval,
   583  			&i.Started,
   584  			&i.RetryCount,
   585  		); err != nil {
   586  			return nil, err
   587  		}
   588  		items = append(items, i)
   589  	}
   590  	if err := rows.Err(); err != nil {
   591  		return nil, err
   592  	}
   593  	return items, nil
   594  }
   595  
   596  const tasksForWorkflowSorted = `-- name: TasksForWorkflowSorted :many
   597  WITH most_recent_logs AS (
   598      SELECT workflow_id, task_name, MAX(updated_at) AS updated_at
   599      FROM task_logs
   600      GROUP BY workflow_id, task_name
   601  )
   602  SELECT tasks.workflow_id, tasks.name, tasks.finished, tasks.result, tasks.error, tasks.created_at, tasks.updated_at, tasks.approved_at, tasks.ready_for_approval, tasks.started, tasks.retry_count,
   603         GREATEST(most_recent_logs.updated_at, tasks.updated_at)::timestamptz AS most_recent_update
   604  FROM tasks
   605  LEFT JOIN most_recent_logs ON tasks.workflow_id = most_recent_logs.workflow_id AND
   606                                tasks.name = most_recent_logs.task_name
   607  WHERE tasks.workflow_id = $1
   608  ORDER BY most_recent_update DESC
   609  `
   610  
   611  type TasksForWorkflowSortedRow struct {
   612  	WorkflowID       uuid.UUID
   613  	Name             string
   614  	Finished         bool
   615  	Result           sql.NullString
   616  	Error            sql.NullString
   617  	CreatedAt        time.Time
   618  	UpdatedAt        time.Time
   619  	ApprovedAt       sql.NullTime
   620  	ReadyForApproval bool
   621  	Started          bool
   622  	RetryCount       int32
   623  	MostRecentUpdate time.Time
   624  }
   625  
   626  func (q *Queries) TasksForWorkflowSorted(ctx context.Context, workflowID uuid.UUID) ([]TasksForWorkflowSortedRow, error) {
   627  	rows, err := q.db.Query(ctx, tasksForWorkflowSorted, workflowID)
   628  	if err != nil {
   629  		return nil, err
   630  	}
   631  	defer rows.Close()
   632  	var items []TasksForWorkflowSortedRow
   633  	for rows.Next() {
   634  		var i TasksForWorkflowSortedRow
   635  		if err := rows.Scan(
   636  			&i.WorkflowID,
   637  			&i.Name,
   638  			&i.Finished,
   639  			&i.Result,
   640  			&i.Error,
   641  			&i.CreatedAt,
   642  			&i.UpdatedAt,
   643  			&i.ApprovedAt,
   644  			&i.ReadyForApproval,
   645  			&i.Started,
   646  			&i.RetryCount,
   647  			&i.MostRecentUpdate,
   648  		); err != nil {
   649  			return nil, err
   650  		}
   651  		items = append(items, i)
   652  	}
   653  	if err := rows.Err(); err != nil {
   654  		return nil, err
   655  	}
   656  	return items, nil
   657  }
   658  
   659  const unfinishedWorkflows = `-- name: UnfinishedWorkflows :many
   660  SELECT workflows.id, workflows.params, workflows.name, workflows.created_at, workflows.updated_at, workflows.finished, workflows.output, workflows.error, workflows.schedule_id
   661  FROM workflows
   662  WHERE workflows.finished = FALSE
   663  `
   664  
   665  func (q *Queries) UnfinishedWorkflows(ctx context.Context) ([]Workflow, error) {
   666  	rows, err := q.db.Query(ctx, unfinishedWorkflows)
   667  	if err != nil {
   668  		return nil, err
   669  	}
   670  	defer rows.Close()
   671  	var items []Workflow
   672  	for rows.Next() {
   673  		var i Workflow
   674  		if err := rows.Scan(
   675  			&i.ID,
   676  			&i.Params,
   677  			&i.Name,
   678  			&i.CreatedAt,
   679  			&i.UpdatedAt,
   680  			&i.Finished,
   681  			&i.Output,
   682  			&i.Error,
   683  			&i.ScheduleID,
   684  		); err != nil {
   685  			return nil, err
   686  		}
   687  		items = append(items, i)
   688  	}
   689  	if err := rows.Err(); err != nil {
   690  		return nil, err
   691  	}
   692  	return items, nil
   693  }
   694  
   695  const updateTaskReadyForApproval = `-- name: UpdateTaskReadyForApproval :one
   696  UPDATE tasks
   697  SET ready_for_approval = $3
   698  WHERE workflow_id = $1
   699    AND name = $2
   700  RETURNING workflow_id, name, finished, result, error, created_at, updated_at, approved_at, ready_for_approval, started, retry_count
   701  `
   702  
   703  type UpdateTaskReadyForApprovalParams struct {
   704  	WorkflowID       uuid.UUID
   705  	Name             string
   706  	ReadyForApproval bool
   707  }
   708  
   709  func (q *Queries) UpdateTaskReadyForApproval(ctx context.Context, arg UpdateTaskReadyForApprovalParams) (Task, error) {
   710  	row := q.db.QueryRow(ctx, updateTaskReadyForApproval, arg.WorkflowID, arg.Name, arg.ReadyForApproval)
   711  	var i Task
   712  	err := row.Scan(
   713  		&i.WorkflowID,
   714  		&i.Name,
   715  		&i.Finished,
   716  		&i.Result,
   717  		&i.Error,
   718  		&i.CreatedAt,
   719  		&i.UpdatedAt,
   720  		&i.ApprovedAt,
   721  		&i.ReadyForApproval,
   722  		&i.Started,
   723  		&i.RetryCount,
   724  	)
   725  	return i, err
   726  }
   727  
   728  const upsertTask = `-- name: UpsertTask :one
   729  INSERT INTO tasks (workflow_id, name, started, finished, result, error, created_at, updated_at,
   730                     retry_count)
   731  VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
   732  ON CONFLICT (workflow_id, name) DO UPDATE
   733      SET workflow_id = excluded.workflow_id,
   734          name        = excluded.name,
   735          started     = excluded.started,
   736          finished    = excluded.finished,
   737          result      = excluded.result,
   738          error       = excluded.error,
   739          updated_at  = excluded.updated_at,
   740          retry_count = excluded.retry_count
   741  RETURNING workflow_id, name, finished, result, error, created_at, updated_at, approved_at, ready_for_approval, started, retry_count
   742  `
   743  
   744  type UpsertTaskParams struct {
   745  	WorkflowID uuid.UUID
   746  	Name       string
   747  	Started    bool
   748  	Finished   bool
   749  	Result     sql.NullString
   750  	Error      sql.NullString
   751  	CreatedAt  time.Time
   752  	UpdatedAt  time.Time
   753  	RetryCount int32
   754  }
   755  
   756  func (q *Queries) UpsertTask(ctx context.Context, arg UpsertTaskParams) (Task, error) {
   757  	row := q.db.QueryRow(ctx, upsertTask,
   758  		arg.WorkflowID,
   759  		arg.Name,
   760  		arg.Started,
   761  		arg.Finished,
   762  		arg.Result,
   763  		arg.Error,
   764  		arg.CreatedAt,
   765  		arg.UpdatedAt,
   766  		arg.RetryCount,
   767  	)
   768  	var i Task
   769  	err := row.Scan(
   770  		&i.WorkflowID,
   771  		&i.Name,
   772  		&i.Finished,
   773  		&i.Result,
   774  		&i.Error,
   775  		&i.CreatedAt,
   776  		&i.UpdatedAt,
   777  		&i.ApprovedAt,
   778  		&i.ReadyForApproval,
   779  		&i.Started,
   780  		&i.RetryCount,
   781  	)
   782  	return i, err
   783  }
   784  
   785  const workflow = `-- name: Workflow :one
   786  SELECT id, params, name, created_at, updated_at, finished, output, error, schedule_id
   787  FROM workflows
   788  WHERE id = $1
   789  `
   790  
   791  func (q *Queries) Workflow(ctx context.Context, id uuid.UUID) (Workflow, error) {
   792  	row := q.db.QueryRow(ctx, workflow, id)
   793  	var i Workflow
   794  	err := row.Scan(
   795  		&i.ID,
   796  		&i.Params,
   797  		&i.Name,
   798  		&i.CreatedAt,
   799  		&i.UpdatedAt,
   800  		&i.Finished,
   801  		&i.Output,
   802  		&i.Error,
   803  		&i.ScheduleID,
   804  	)
   805  	return i, err
   806  }
   807  
   808  const workflowCount = `-- name: WorkflowCount :one
   809  SELECT COUNT(*)
   810  FROM workflows
   811  `
   812  
   813  func (q *Queries) WorkflowCount(ctx context.Context) (int64, error) {
   814  	row := q.db.QueryRow(ctx, workflowCount)
   815  	var count int64
   816  	err := row.Scan(&count)
   817  	return count, err
   818  }
   819  
   820  const workflowFinished = `-- name: WorkflowFinished :one
   821  UPDATE workflows
   822  SET finished   = $2,
   823      output     = $3,
   824      error      = $4,
   825      updated_at = $5
   826  WHERE workflows.id = $1
   827  RETURNING id, params, name, created_at, updated_at, finished, output, error, schedule_id
   828  `
   829  
   830  type WorkflowFinishedParams struct {
   831  	ID        uuid.UUID
   832  	Finished  bool
   833  	Output    string
   834  	Error     string
   835  	UpdatedAt time.Time
   836  }
   837  
   838  func (q *Queries) WorkflowFinished(ctx context.Context, arg WorkflowFinishedParams) (Workflow, error) {
   839  	row := q.db.QueryRow(ctx, workflowFinished,
   840  		arg.ID,
   841  		arg.Finished,
   842  		arg.Output,
   843  		arg.Error,
   844  		arg.UpdatedAt,
   845  	)
   846  	var i Workflow
   847  	err := row.Scan(
   848  		&i.ID,
   849  		&i.Params,
   850  		&i.Name,
   851  		&i.CreatedAt,
   852  		&i.UpdatedAt,
   853  		&i.Finished,
   854  		&i.Output,
   855  		&i.Error,
   856  		&i.ScheduleID,
   857  	)
   858  	return i, err
   859  }
   860  
   861  const workflowNames = `-- name: WorkflowNames :many
   862  SELECT DISTINCT name::text
   863  FROM workflows
   864  `
   865  
   866  func (q *Queries) WorkflowNames(ctx context.Context) ([]string, error) {
   867  	rows, err := q.db.Query(ctx, workflowNames)
   868  	if err != nil {
   869  		return nil, err
   870  	}
   871  	defer rows.Close()
   872  	var items []string
   873  	for rows.Next() {
   874  		var name string
   875  		if err := rows.Scan(&name); err != nil {
   876  			return nil, err
   877  		}
   878  		items = append(items, name)
   879  	}
   880  	if err := rows.Err(); err != nil {
   881  		return nil, err
   882  	}
   883  	return items, nil
   884  }
   885  
   886  const workflowSidebar = `-- name: WorkflowSidebar :many
   887  SELECT name, COUNT(*)
   888  FROM workflows
   889  GROUP BY name
   890  ORDER BY name
   891  `
   892  
   893  type WorkflowSidebarRow struct {
   894  	Name  sql.NullString
   895  	Count int64
   896  }
   897  
   898  func (q *Queries) WorkflowSidebar(ctx context.Context) ([]WorkflowSidebarRow, error) {
   899  	rows, err := q.db.Query(ctx, workflowSidebar)
   900  	if err != nil {
   901  		return nil, err
   902  	}
   903  	defer rows.Close()
   904  	var items []WorkflowSidebarRow
   905  	for rows.Next() {
   906  		var i WorkflowSidebarRow
   907  		if err := rows.Scan(&i.Name, &i.Count); err != nil {
   908  			return nil, err
   909  		}
   910  		items = append(items, i)
   911  	}
   912  	if err := rows.Err(); err != nil {
   913  		return nil, err
   914  	}
   915  	return items, nil
   916  }
   917  
   918  const workflows = `-- name: Workflows :many
   919  
   920  SELECT id, params, name, created_at, updated_at, finished, output, error, schedule_id
   921  FROM workflows
   922  ORDER BY created_at DESC
   923  `
   924  
   925  // Copyright 2021 The Go Authors. All rights reserved.
   926  // Use of this source code is governed by a BSD-style
   927  // license that can be found in the LICENSE file.
   928  func (q *Queries) Workflows(ctx context.Context) ([]Workflow, error) {
   929  	rows, err := q.db.Query(ctx, workflows)
   930  	if err != nil {
   931  		return nil, err
   932  	}
   933  	defer rows.Close()
   934  	var items []Workflow
   935  	for rows.Next() {
   936  		var i Workflow
   937  		if err := rows.Scan(
   938  			&i.ID,
   939  			&i.Params,
   940  			&i.Name,
   941  			&i.CreatedAt,
   942  			&i.UpdatedAt,
   943  			&i.Finished,
   944  			&i.Output,
   945  			&i.Error,
   946  			&i.ScheduleID,
   947  		); err != nil {
   948  			return nil, err
   949  		}
   950  		items = append(items, i)
   951  	}
   952  	if err := rows.Err(); err != nil {
   953  		return nil, err
   954  	}
   955  	return items, nil
   956  }
   957  
   958  const workflowsByName = `-- name: WorkflowsByName :many
   959  SELECT id, params, name, created_at, updated_at, finished, output, error, schedule_id
   960  FROM workflows
   961  WHERE name = $1
   962  ORDER BY created_at DESC
   963  `
   964  
   965  func (q *Queries) WorkflowsByName(ctx context.Context, name sql.NullString) ([]Workflow, error) {
   966  	rows, err := q.db.Query(ctx, workflowsByName, name)
   967  	if err != nil {
   968  		return nil, err
   969  	}
   970  	defer rows.Close()
   971  	var items []Workflow
   972  	for rows.Next() {
   973  		var i Workflow
   974  		if err := rows.Scan(
   975  			&i.ID,
   976  			&i.Params,
   977  			&i.Name,
   978  			&i.CreatedAt,
   979  			&i.UpdatedAt,
   980  			&i.Finished,
   981  			&i.Output,
   982  			&i.Error,
   983  			&i.ScheduleID,
   984  		); err != nil {
   985  			return nil, err
   986  		}
   987  		items = append(items, i)
   988  	}
   989  	if err := rows.Err(); err != nil {
   990  		return nil, err
   991  	}
   992  	return items, nil
   993  }
   994  
   995  const workflowsByNames = `-- name: WorkflowsByNames :many
   996  SELECT id, params, name, created_at, updated_at, finished, output, error, schedule_id
   997  FROM workflows
   998  WHERE name = ANY($1::text[])
   999  ORDER BY created_at DESC
  1000  `
  1001  
  1002  func (q *Queries) WorkflowsByNames(ctx context.Context, names []string) ([]Workflow, error) {
  1003  	rows, err := q.db.Query(ctx, workflowsByNames, names)
  1004  	if err != nil {
  1005  		return nil, err
  1006  	}
  1007  	defer rows.Close()
  1008  	var items []Workflow
  1009  	for rows.Next() {
  1010  		var i Workflow
  1011  		if err := rows.Scan(
  1012  			&i.ID,
  1013  			&i.Params,
  1014  			&i.Name,
  1015  			&i.CreatedAt,
  1016  			&i.UpdatedAt,
  1017  			&i.Finished,
  1018  			&i.Output,
  1019  			&i.Error,
  1020  			&i.ScheduleID,
  1021  		); err != nil {
  1022  			return nil, err
  1023  		}
  1024  		items = append(items, i)
  1025  	}
  1026  	if err := rows.Err(); err != nil {
  1027  		return nil, err
  1028  	}
  1029  	return items, nil
  1030  }