code.gitea.io/gitea@v1.21.7/models/migrations/v1_14/v177.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_14 //nolint 5 6 import ( 7 "fmt" 8 9 "xorm.io/xorm" 10 ) 11 12 // DeleteOrphanedIssueLabels looks through the database for issue_labels where the label no longer exists and deletes them. 13 func DeleteOrphanedIssueLabels(x *xorm.Engine) error { 14 type IssueLabel struct { 15 ID int64 `xorm:"pk autoincr"` 16 IssueID int64 `xorm:"UNIQUE(s)"` 17 LabelID int64 `xorm:"UNIQUE(s)"` 18 } 19 20 sess := x.NewSession() 21 defer sess.Close() 22 if err := sess.Begin(); err != nil { 23 return err 24 } 25 26 if err := sess.Sync(new(IssueLabel)); err != nil { 27 return fmt.Errorf("Sync: %w", err) 28 } 29 30 if _, err := sess.Exec(`DELETE FROM issue_label WHERE issue_label.id IN ( 31 SELECT ill.id FROM ( 32 SELECT il.id 33 FROM issue_label AS il 34 LEFT JOIN label ON il.label_id = label.id 35 WHERE 36 label.id IS NULL 37 ) AS ill)`); err != nil { 38 return err 39 } 40 41 return sess.Commit() 42 }