From 68abb894a68542ca94dc41ac93070b7297d181ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Thu, 30 May 2024 13:32:04 +0200 Subject: [PATCH] Don't erase datapoints when used in triggers. --- datapoint.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/datapoint.go b/datapoint.go index afb815e..02acec4 100644 --- a/datapoint.go +++ b/datapoint.go @@ -283,6 +283,37 @@ func DatapointRetrieve(id int, name string) (dp Datapoint, err error) { // {{{ return } // }}} func DatapointDelete(id int) (err error) { // {{{ + var dpName string + row := service.Db.Conn.QueryRow(`SELECT name FROM public.datapoint WHERE id = $1`, id) + err = row.Scan(&dpName) + if err != nil { + err = werr.Wrap(err).WithData(id) + return + } + + var rows *sql.Rows + rows, err = service.Db.Conn.Query(`SELECT name FROM public.trigger WHERE datapoints ? $1`, dpName) + if err != nil { + err = werr.Wrap(err).WithData(dpName) + return + } + defer rows.Close() + + var triggerNames []string + var name string + for rows.Next() { + err = rows.Scan(&name) + if err != nil { + err = werr.Wrap(err) + return + } + triggerNames = append(triggerNames, name) + } + + if len(triggerNames) > 0 { + return werr.New("Datapoint '%s' used in the following triggers: %s", dpName, strings.Join(triggerNames, ", ")) + } + _, err = service.Db.Conn.Exec(`DELETE FROM datapoint WHERE id=$1`, id) if err != nil { err = werr.Wrap(err).WithData(id)