Просмотр исходного кода

fix(db): remove stars and tags when removing user or dashboard, fixes #2016

Torkel Ödegaard 10 лет назад
Родитель
Сommit
e6d09b3266
3 измененных файлов с 37 добавлено и 13 удалено
  1. 22 5
      pkg/services/sqlstore/dashboard.go
  2. 2 4
      pkg/services/sqlstore/org.go
  3. 13 4
      pkg/services/sqlstore/user.go

+ 22 - 5
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
+	})
 }

+ 2 - 4
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

+ 13 - 4
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
 	})
 }