package core import ( "database/sql/driver" "encoding/json" ) // Type alias for storing string array as jsonb type argList []string func (a argList) Value() (driver.Value, error) { return json.Marshal(a) } func (a *argList) Scan(value interface{}) error { return json.Unmarshal([]byte(value.(string)), a) } func AddAction(db DB, source string, name string, argv []string) error { _, err := db.Exec(` insert into actions (source, name, argv) values (?, ?, jsonb(?)) `, source, name, argList(argv)) return err } func UpdateAction(db DB, source string, name string, argv []string) error { _, err := db.Exec(` update actions set argv = jsonb(?) where source = ? and name = ? `, argList(argv), source, name) return err } func GetActionsForSource(db DB, source string) ([]string, error) { rows, err := db.Query(` select name from actions where source = ? `, source) if err != nil { return nil, err } defer rows.Close() var names []string for rows.Next() { var name string err = rows.Scan(&name) if err != nil { return nil, err } names = append(names, name) } if err := rows.Err(); err != nil { return nil, err } return names, nil } func GetArgvForAction(db DB, source string, name string) ([]string, error) { rows := db.QueryRow(` select json(argv) from actions where source = ? and name = ? `, source, name) var argv argList err := rows.Scan(&argv) if err != nil { return nil, err } return argv, nil } func DeleteAction(db DB, source string, name string) error { _, err := db.Exec(` delete from actions where source = ? and name = ? `, source, name) return err }