mirror of https://github.com/go-gitea/gitea.git
Browse Source
fixes #27877 --------- Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>pull/28472/head
6 changed files with 100 additions and 2 deletions
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
- |
||||
id: 1 |
||||
uid: 1 |
||||
issue_id: 1 |
||||
is_read: true |
||||
is_mentioned: false |
||||
|
||||
- |
||||
id: 2 |
||||
uid: 2 |
||||
issue_id: 1 |
||||
is_read: true |
||||
is_mentioned: false |
||||
|
||||
- |
||||
id: 3 |
||||
uid: 2 |
||||
issue_id: 1 # duplicated with id 2 |
||||
is_read: false |
||||
is_mentioned: true |
||||
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package v1_22 //nolint
|
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
"code.gitea.io/gitea/models/migrations/base" |
||||
) |
||||
|
||||
func TestMain(m *testing.M) { |
||||
base.MainTest(m) |
||||
} |
||||
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
// 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 { |
||||
if _, err := x.Exec("delete from issue_user where id in (SELECT id FROM issue_user WHERE issue_id = ? and uid = ? limit ?)", issueUser.IssueID, issueUser.UID, issueUser.Cnt-1); 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{}) |
||||
} |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
// Copyright 2023 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package v1_22 //nolint
|
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
"code.gitea.io/gitea/models/migrations/base" |
||||
) |
||||
|
||||
func Test_AddCombinedIndexToIssueUser(t *testing.T) { |
||||
type IssueUser struct { |
||||
UID int64 `xorm:"INDEX unique(uid_to_issue)"` // User ID.
|
||||
IssueID int64 `xorm:"INDEX unique(uid_to_issue)"` |
||||
} |
||||
|
||||
// Prepare and load the testing database
|
||||
x, deferable := base.PrepareTestEnv(t, 0, new(IssueUser)) |
||||
defer deferable() |
||||
if x == nil || t.Failed() { |
||||
return |
||||
} |
||||
|
||||
if err := AddCombinedIndexToIssueUser(x); err != nil { |
||||
t.Fatal(err) |
||||
} |
||||
} |
||||
Loading…
Reference in new issue