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