]> source.dussan.org Git - gitea.git/commitdiff
Fix `doctor --run check-db-consistency --fix` with label fix (#16094)
authorLunny Xiao <xiaolunwen@gmail.com>
Tue, 8 Jun 2021 04:36:23 +0000 (12:36 +0800)
committerGitHub <noreply@github.com>
Tue, 8 Jun 2021 04:36:23 +0000 (12:36 +0800)
* Add doctor for wrong label and issue_label data

* Fix labels and issue labels check

* Remove unnecessary functions

models/consistency.go

index 77a8018266e5121698590bc32e3069cc7c3f5f39..9cfd02195effddb3280ee0c7bcd59932b56456c7 100644 (file)
@@ -180,17 +180,21 @@ func CountOrphanedLabels() (int64, error) {
        }
 
        norepo, err := x.Table("label").
-               Join("LEFT", "repository", "label.repo_id=repository.id").
-               Where(builder.IsNull{"repository.id"}).And(builder.Gt{"label.repo_id": 0}).
-               Count("id")
+               Where(builder.And(
+                       builder.Gt{"repo_id": 0},
+                       builder.NotIn("repo_id", builder.Select("id").From("repository")),
+               )).
+               Count()
        if err != nil {
                return 0, err
        }
 
        noorg, err := x.Table("label").
-               Join("LEFT", "`user`", "label.org_id=`user`.id").
-               Where(builder.IsNull{"`user`.id"}).And(builder.Gt{"label.org_id": 0}).
-               Count("id")
+               Where(builder.And(
+                       builder.Gt{"org_id": 0},
+                       builder.NotIn("org_id", builder.Select("id").From("user")),
+               )).
+               Count()
        if err != nil {
                return 0, err
        }
@@ -206,17 +210,21 @@ func DeleteOrphanedLabels() error {
        }
 
        // delete labels with none existing repos
-       if _, err := x.In("id", builder.Select("label.id").From("label").
-               Join("LEFT", "repository", "label.repo_id=repository.id").
-               Where(builder.IsNull{"repository.id"}).And(builder.Gt{"label.repo_id": 0})).
+       if _, err := x.
+               Where(builder.And(
+                       builder.Gt{"repo_id": 0},
+                       builder.NotIn("repo_id", builder.Select("id").From("repository")),
+               )).
                Delete(Label{}); err != nil {
                return err
        }
 
        // delete labels with none existing orgs
-       if _, err := x.In("id", builder.Select("label.id").From("label").
-               Join("LEFT", "`user`", "label.org_id=`user`.id").
-               Where(builder.IsNull{"`user`.id"}).And(builder.Gt{"label.org_id": 0})).
+       if _, err := x.
+               Where(builder.And(
+                       builder.Gt{"org_id": 0},
+                       builder.NotIn("org_id", builder.Select("id").From("user")),
+               )).
                Delete(Label{}); err != nil {
                return err
        }
@@ -227,15 +235,14 @@ func DeleteOrphanedLabels() error {
 // CountOrphanedIssueLabels return count of IssueLabels witch have no label behind anymore
 func CountOrphanedIssueLabels() (int64, error) {
        return x.Table("issue_label").
-               Join("LEFT", "label", "issue_label.label_id = label.id").
-               Where(builder.IsNull{"label.id"}).Count()
+               NotIn("label_id", builder.Select("id").From("label")).
+               Count()
 }
 
 // DeleteOrphanedIssueLabels delete IssueLabels witch have no label behind anymore
 func DeleteOrphanedIssueLabels() error {
-       _, err := x.In("id", builder.Select("issue_label.id").From("issue_label").
-               Join("LEFT", "label", "issue_label.label_id = label.id").
-               Where(builder.IsNull{"label.id"})).
+       _, err := x.
+               NotIn("label_id", builder.Select("id").From("label")).
                Delete(IssueLabel{})
 
        return err