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 }