code.gitea.io/gitea@v1.22.3/models/db/consistency.go (about)

     1  // Copyright 2022 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package db
     5  
     6  import (
     7  	"context"
     8  
     9  	"xorm.io/builder"
    10  )
    11  
    12  // CountOrphanedObjects count subjects with have no existing refobject anymore
    13  func CountOrphanedObjects(ctx context.Context, subject, refObject, joinCond string) (int64, error) {
    14  	return GetEngine(ctx).
    15  		Table("`"+subject+"`").
    16  		Join("LEFT", "`"+refObject+"`", joinCond).
    17  		Where(builder.IsNull{"`" + refObject + "`.id"}).
    18  		Select("COUNT(`" + subject + "`.`id`)").
    19  		Count()
    20  }
    21  
    22  // DeleteOrphanedObjects delete subjects with have no existing refobject anymore
    23  func DeleteOrphanedObjects(ctx context.Context, subject, refObject, joinCond string) error {
    24  	subQuery := builder.Select("`"+subject+"`.id").
    25  		From("`"+subject+"`").
    26  		Join("LEFT", "`"+refObject+"`", joinCond).
    27  		Where(builder.IsNull{"`" + refObject + "`.id"})
    28  	b := builder.Delete(builder.In("id", subQuery)).From("`" + subject + "`")
    29  	_, err := GetEngine(ctx).Exec(b)
    30  	return err
    31  }