diff --git a/pkg/services/sqlstore/dashboard.go b/pkg/services/sqlstore/dashboard.go index 7808d2824e5..bbec541589c 100644 --- a/pkg/services/sqlstore/dashboard.go +++ b/pkg/services/sqlstore/dashboard.go @@ -198,11 +198,28 @@ func GetDashboardTags(query *m.GetDashboardTagsQuery) error { } func DeleteDashboard(cmd *m.DeleteDashboardCommand) error { - sess := x.NewSession() - defer sess.Close() + return inTransaction2(func(sess *session) error { + dashboard := m.Dashboard{Slug: cmd.Slug, OrgId: cmd.OrgId} + has, err := x.Get(&dashboard) + if err != nil { + return err + } else if has == false { + return m.ErrDashboardNotFound + } - rawSql := "DELETE FROM dashboard WHERE org_id=? and slug=?" - _, err := sess.Exec(rawSql, cmd.OrgId, cmd.Slug) + deletes := []string{ + "DELETE FROM dashboard_tag WHERE dashboard_id = ? ", + "DELETE FROM star WHERE dashboard_id = ? ", + "DELETE FROM dashboard WHERE id = ?", + } - return err + for _, sql := range deletes { + _, err := sess.Exec(sql, dashboard.Id) + if err != nil { + return err + } + } + + return nil + }) } diff --git a/pkg/services/sqlstore/org.go b/pkg/services/sqlstore/org.go index f132b056f39..6109faad92e 100644 --- a/pkg/services/sqlstore/org.go +++ b/pkg/services/sqlstore/org.go @@ -5,7 +5,6 @@ import ( "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/events" - "github.com/grafana/grafana/pkg/log" m "github.com/grafana/grafana/pkg/models" ) @@ -123,8 +122,8 @@ func DeleteOrg(cmd *m.DeleteOrgCommand) error { return inTransaction2(func(sess *session) error { deletes := []string{ - "DELETE FROM star WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ?)", - "DELETE FROM dashboard_tag WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ?)", + "DELETE FROM star WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ? AND star.dashboard_id = dashboard.id)", + "DELETE FROM dashboard_tag WHERE EXISTS (SELECT 1 FROM dashboard WHERE org_id = ? AND dashboard_tag.dashboard_id = dashboard.id)", "DELETE FROM dashboard WHERE org_id = ?", "DELETE FROM api_key WHERE org_id = ?", "DELETE FROM data_source WHERE org_id = ?", @@ -134,7 +133,6 @@ func DeleteOrg(cmd *m.DeleteOrgCommand) error { } for _, sql := range deletes { - log.Trace(sql) _, err := sess.Exec(sql, cmd.Id) if err != nil { return err diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index 08eec5e586c..e4479be4890 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -1,7 +1,6 @@ package sqlstore import ( - "fmt" "strings" "time" @@ -309,9 +308,19 @@ func SearchUsers(query *m.SearchUsersQuery) error { func DeleteUser(cmd *m.DeleteUserCommand) error { return inTransaction(func(sess *xorm.Session) error { - var rawSql = fmt.Sprintf("DELETE FROM %s WHERE id=?", x.Dialect().Quote("user")) - _, err := sess.Exec(rawSql, cmd.UserId) - return err + deletes := []string{ + "DELETE FROM star WHERE user_id = ?", + "DELETE FROM user WHERE id = ?", + } + + for _, sql := range deletes { + _, err := sess.Exec(sql, cmd.UserId) + if err != nil { + return err + } + } + + return nil }) }