Add primary_key to issue_index (#16813)

Make the group_id a primary key in issue_index. This already has an unique index
and therefore is a good candidate for becoming a primary key.

This PR also changes all other uses of this table to add the group_id as the
primary key.

Fix #16802

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2021-08-25 09:42:51 +01:00 committed by GitHub
parent e891d68dd7
commit 697213bdb3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 5 deletions

View File

@ -14,7 +14,7 @@ import (
// ResourceIndex represents a resource index which could be used as issue/release and others
// We can create different tables i.e. issue_index, release_index and etc.
type ResourceIndex struct {
GroupID int64 `xorm:"unique"`
GroupID int64 `xorm:"pk"`
MaxIndex int64 `xorm:"index"`
}

View File

@ -336,6 +336,8 @@ var migrations = []Migration{
NewMigration("Add agit flow pull request support", addAgitFlowPullRequest),
// v191 -> v192
NewMigration("Alter issue/comment table TEXT fields to LONGTEXT", alterIssueAndCommentTextFieldsToLongText),
// v192 -> v193
NewMigration("RecreateIssueResourceIndexTable to have a primary key instead of an unique index", recreateIssueResourceIndexTable),
}
// GetCurrentDBVersion returns the current db version

View File

@ -10,8 +10,8 @@ import (
func addIssueResourceIndexTable(x *xorm.Engine) error {
type ResourceIndex struct {
GroupID int64 `xorm:"index unique(s)"`
MaxIndex int64 `xorm:"index unique(s)"`
GroupID int64 `xorm:"pk"`
MaxIndex int64 `xorm:"index"`
}
sess := x.NewSession()

View File

@ -33,8 +33,8 @@ func Test_addIssueResourceIndexTable(t *testing.T) {
}
type ResourceIndex struct {
GroupID int64 `xorm:"index unique(s)"`
MaxIndex int64 `xorm:"index unique(s)"`
GroupID int64 `xorm:"pk"`
MaxIndex int64 `xorm:"index"`
}
var start = 0

18
models/migrations/v192.go Normal file
View File

@ -0,0 +1,18 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"xorm.io/xorm"
)
func recreateIssueResourceIndexTable(x *xorm.Engine) error {
type IssueIndex struct {
GroupID int64 `xorm:"pk"`
MaxIndex int64 `xorm:"index"`
}
return RecreateTables(new(IssueIndex))(x)
}