code.gitea.io/gitea@v1.21.7/models/migrations/v1_18/v229.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_18 //nolint 5 6 import ( 7 "fmt" 8 9 "code.gitea.io/gitea/models/issues" 10 11 "xorm.io/builder" 12 "xorm.io/xorm" 13 ) 14 15 func UpdateOpenMilestoneCounts(x *xorm.Engine) error { 16 var openMilestoneIDs []int64 17 err := x.Table("milestone").Select("id").Where(builder.Neq{"is_closed": 1}).Find(&openMilestoneIDs) 18 if err != nil { 19 return fmt.Errorf("error selecting open milestone IDs: %w", err) 20 } 21 22 for _, id := range openMilestoneIDs { 23 _, err := x.ID(id). 24 SetExpr("num_issues", builder.Select("count(*)").From("issue").Where( 25 builder.Eq{"milestone_id": id}, 26 )). 27 SetExpr("num_closed_issues", builder.Select("count(*)").From("issue").Where( 28 builder.Eq{ 29 "milestone_id": id, 30 "is_closed": true, 31 }, 32 )). 33 Update(&issues.Milestone{}) 34 if err != nil { 35 return fmt.Errorf("error updating issue counts in milestone %d: %w", id, err) 36 } 37 _, err = x.Exec("UPDATE `milestone` SET completeness=100*num_closed_issues/(CASE WHEN num_issues > 0 THEN num_issues ELSE 1 END) WHERE id=?", 38 id, 39 ) 40 if err != nil { 41 return fmt.Errorf("error setting completeness on milestone %d: %w", id, err) 42 } 43 } 44 45 return nil 46 }