You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

v177.go 1014B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package migrations
  5. import (
  6. "fmt"
  7. "xorm.io/xorm"
  8. )
  9. // deleteOrphanedIssueLabels looks through the database for issue_labels where the label no longer exists and deletes them.
  10. func deleteOrphanedIssueLabels(x *xorm.Engine) error {
  11. type IssueLabel struct {
  12. ID int64 `xorm:"pk autoincr"`
  13. IssueID int64 `xorm:"UNIQUE(s)"`
  14. LabelID int64 `xorm:"UNIQUE(s)"`
  15. }
  16. sess := x.NewSession()
  17. defer sess.Close()
  18. if err := sess.Begin(); err != nil {
  19. return err
  20. }
  21. if err := sess.Sync2(new(IssueLabel)); err != nil {
  22. return fmt.Errorf("Sync2: %v", err)
  23. }
  24. if _, err := sess.Exec(`DELETE FROM issue_label WHERE issue_label.id IN (
  25. SELECT ill.id FROM (
  26. SELECT il.id
  27. FROM issue_label AS il
  28. LEFT JOIN label ON il.label_id = label.id
  29. WHERE
  30. label.id IS NULL
  31. ) AS ill)`); err != nil {
  32. return err
  33. }
  34. return sess.Commit()
  35. }