11package db
22
3- import "github.com/jmoiron/sqlx"
3+ import (
4+ "fmt"
5+ "strings"
6+
7+ "github.com/jmoiron/sqlx"
8+ )
49
510/*
611CREATE TABLE IF NOT EXISTS public."task_states"
@@ -42,15 +47,16 @@ type TaskState struct {
4247 TaskConfig string `db:"task_config"`
4348 TaskStatus string `db:"task_status"`
4449 TaskResult int `db:"task_result"`
50+ TaskError string `db:"task_error"`
4551}
4652
4753func (db * Database ) InsertTaskState (tx * sqlx.Tx , state * TaskState ) error {
4854 _ , err := tx .Exec (db .EngineQuery (map [EngineType ]string {
4955 EnginePgsql : `
5056 INSERT INTO task_states (
5157 run_id, task_id, parent_task, name, title, timeout, ifcond, is_cleanup, is_started, is_running, is_skipped, is_timeout,
52- start_time, stop_time, task_config, task_status, task_result
53- ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)
58+ start_time, stop_time, task_config, task_status, task_result, task_error
59+ ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18 )
5460 ON CONFLICT (run_id, task_id) DO UPDATE SET
5561 parent_task = excluded.parent_task,
5662 name = excluded.name,
@@ -66,16 +72,79 @@ func (db *Database) InsertTaskState(tx *sqlx.Tx, state *TaskState) error {
6672 stop_time = excluded.stop_time,
6773 task_config = excluded.task_config,
6874 task_status = excluded.task_status,
69- task_result = excluded.task_result` ,
75+ task_result = excluded.task_result,
76+ task_error = excluded.task_error` ,
7077 EngineSqlite : `
7178 INSERT OR REPLACE INTO task_states (
7279 run_id, task_id, parent_task, name, title, timeout, ifcond, is_cleanup, is_started, is_running, is_skipped, is_timeout,
73- start_time, stop_time, task_config, task_status, task_result
74- ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)` ,
80+ start_time, stop_time, task_config, task_status, task_result, task_error
81+ ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18 )` ,
7582 }),
7683 state .RunID , state .TaskID , state .ParentTask , state .Name , state .Title , state .Timeout , state .IfCond , state .IsCleanup , state .IsStarted , state .IsRunning ,
7784 state .IsSkipped , state .IsTimeout , state .StartTime , state .StopTime , state .TaskConfig , state .TaskStatus ,
78- state .TaskResult )
85+ state .TaskResult , state .TaskError )
86+ if err != nil {
87+ return err
88+ }
89+
90+ return nil
91+ }
92+
93+ func (db * Database ) UpdateTaskState (tx * sqlx.Tx , state * TaskState , updateFields []string ) error {
94+ var sql strings.Builder
95+
96+ args := []any {}
97+
98+ fmt .Fprint (& sql , `UPDATE task_states SET ` )
99+
100+ for i , field := range updateFields {
101+ if i > 0 {
102+ fmt .Fprint (& sql , `, ` )
103+ }
104+
105+ switch field {
106+ case "title" :
107+ fmt .Fprintf (& sql , `title = $%v` , len (args )+ 1 )
108+ args = append (args , state .Title )
109+ case "is_started" :
110+ fmt .Fprintf (& sql , `is_started = $%v` , len (args )+ 1 )
111+ args = append (args , state .IsStarted )
112+ case "is_running" :
113+ fmt .Fprintf (& sql , `is_running = $%v` , len (args )+ 1 )
114+ args = append (args , state .IsRunning )
115+ case "is_skipped" :
116+ fmt .Fprintf (& sql , `is_skipped = $%v` , len (args )+ 1 )
117+ args = append (args , state .IsSkipped )
118+ case "is_timeout" :
119+ fmt .Fprintf (& sql , `is_timeout = $%v` , len (args )+ 1 )
120+ args = append (args , state .IsTimeout )
121+ case "start_time" :
122+ fmt .Fprintf (& sql , `start_time = $%v` , len (args )+ 1 )
123+ args = append (args , state .StartTime )
124+ case "stop_time" :
125+ fmt .Fprintf (& sql , `stop_time = $%v` , len (args )+ 1 )
126+ args = append (args , state .StopTime )
127+ case "task_config" :
128+ fmt .Fprintf (& sql , `task_config = $%v` , len (args )+ 1 )
129+ args = append (args , state .TaskConfig )
130+ case "task_status" :
131+ fmt .Fprintf (& sql , `task_status = $%v` , len (args )+ 1 )
132+ args = append (args , state .TaskStatus )
133+ case "task_result" :
134+ fmt .Fprintf (& sql , `task_result = $%v` , len (args )+ 1 )
135+ args = append (args , state .TaskResult )
136+ case "task_error" :
137+ fmt .Fprintf (& sql , `task_error = $%v` , len (args )+ 1 )
138+ args = append (args , state .TaskError )
139+ default :
140+ return fmt .Errorf ("unknown field %q" , field )
141+ }
142+ }
143+
144+ fmt .Fprintf (& sql , ` WHERE run_id = $%v AND task_id = $%v` , len (args )+ 1 , len (args )+ 2 )
145+ args = append (args , state .RunID , state .TaskID )
146+
147+ _ , err := tx .Exec (sql .String (), args ... )
79148 if err != nil {
80149 return err
81150 }
0 commit comments