From 8a56a8bca79af4266a7bcfb911d5837d2123d22a Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Tue, 24 Aug 2021 21:21:05 +0100 Subject: [PATCH] Add primary_key to issue_index 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 --- models/index.go | 2 +- models/migrations/migrations.go | 2 ++ models/migrations/v182.go | 4 ++-- models/migrations/v182_test.go | 4 ++-- models/migrations/v192.go | 18 ++++++++++++++++++ 5 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 models/migrations/v192.go diff --git a/models/index.go b/models/index.go index 18db13c490c7c..121a149ca0fbd 100644 --- a/models/index.go +++ b/models/index.go @@ -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"` } diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 6c35d34c9707a..5b22dec8e54ec 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -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 diff --git a/models/migrations/v182.go b/models/migrations/v182.go index dd9a04f27e725..29c2d2654a266 100644 --- a/models/migrations/v182.go +++ b/models/migrations/v182.go @@ -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() diff --git a/models/migrations/v182_test.go b/models/migrations/v182_test.go index 6f418f7794613..9fb371e07873a 100644 --- a/models/migrations/v182_test.go +++ b/models/migrations/v182_test.go @@ -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 diff --git a/models/migrations/v192.go b/models/migrations/v192.go new file mode 100644 index 0000000000000..f436e93d621b0 --- /dev/null +++ b/models/migrations/v192.go @@ -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) +}