mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-03 16:01:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package v1_22 //nolint
 | 
						|
 | 
						|
import (
 | 
						|
	"xorm.io/xorm"
 | 
						|
)
 | 
						|
 | 
						|
func AddCombinedIndexToIssueUser(x *xorm.Engine) error {
 | 
						|
	type OldIssueUser struct {
 | 
						|
		IssueID int64
 | 
						|
		UID     int64
 | 
						|
		Cnt     int64
 | 
						|
	}
 | 
						|
 | 
						|
	var duplicatedIssueUsers []OldIssueUser
 | 
						|
	if err := x.SQL("select * from (select issue_id, uid, count(1) as cnt from issue_user group by issue_id, uid) a where a.cnt > 1").
 | 
						|
		Find(&duplicatedIssueUsers); err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	for _, issueUser := range duplicatedIssueUsers {
 | 
						|
		var ids []int64
 | 
						|
		if err := x.SQL("SELECT id FROM issue_user WHERE issue_id = ? and uid = ? limit ?", issueUser.IssueID, issueUser.UID, issueUser.Cnt-1).Find(&ids); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
		if _, err := x.Table("issue_user").In("id", ids).Delete(); err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	type IssueUser struct {
 | 
						|
		UID     int64 `xorm:"INDEX unique(uid_to_issue)"` // User ID.
 | 
						|
		IssueID int64 `xorm:"INDEX unique(uid_to_issue)"`
 | 
						|
	}
 | 
						|
 | 
						|
	return x.Sync(&IssueUser{})
 | 
						|
}
 |