diff options
author | zeripath | 2022-06-18 09:46:50 +0100 |
---|---|---|
committer | GitHub | 2022-06-18 04:46:50 -0400 |
commit | 5d653cc10d49350fb6f85e787b98142cdce8b5df (patch) | |
tree | b2d09cd8d8e8b828ff0bd4ec31d1f41830e78fcb | |
parent | dd1ed35f756ea1087f0c55618d6cf745192b612d (diff) |
Improve action table indices (#19472)
-rw-r--r-- | models/action.go | 26 | ||||
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v216.go | 67 |
3 files changed, 88 insertions, 7 deletions
diff --git a/models/action.go b/models/action.go index 951328070..78cc93e1a 100644 --- a/models/action.go +++ b/models/action.go @@ -30,6 +30,7 @@ import ( "code.gitea.io/gitea/modules/util" "xorm.io/builder" + "xorm.io/xorm/schemas" ) // ActionType represents the type of an action. @@ -70,25 +71,36 @@ const ( // used in template render. type Action struct { ID int64 `xorm:"pk autoincr"` - UserID int64 `xorm:"INDEX"` // Receiver user id. + UserID int64 // Receiver user id. OpType ActionType - ActUserID int64 `xorm:"INDEX"` // Action user id. - ActUser *user_model.User `xorm:"-"` - RepoID int64 `xorm:"INDEX"` + ActUserID int64 // Action user id. + ActUser *user_model.User `xorm:"-"` + RepoID int64 Repo *repo_model.Repository `xorm:"-"` CommentID int64 `xorm:"INDEX"` Comment *issues_model.Comment `xorm:"-"` - IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"` + IsDeleted bool `xorm:"NOT NULL DEFAULT false"` RefName string - IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"` + IsPrivate bool `xorm:"NOT NULL DEFAULT false"` Content string `xorm:"TEXT"` - CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` + CreatedUnix timeutil.TimeStamp `xorm:"created"` } func init() { db.RegisterModel(new(Action)) } +// TableIndices implements xorm's TableIndices interface +func (a *Action) TableIndices() []*schemas.Index { + actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType) + actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted") + + repoIndex := schemas.NewIndex("r_c_u_d", schemas.IndexType) + repoIndex.AddColumn("repo_id", "created_unix", "user_id", "is_deleted") + + return []*schemas.Index{actUserIndex, repoIndex} +} + // GetOpType gets the ActionType of this action. func (a *Action) GetOpType() ActionType { return a.OpType diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 1bed4e2bc..c843e33eb 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -387,6 +387,8 @@ var migrations = []Migration{ NewMigration("Add auto merge table", addAutoMergeTable), // v215 -> v216 NewMigration("allow to view files in PRs", addReviewViewedFiles), + // v216 -> v217 + NewMigration("Improve Action table indices", improveActionTableIndices), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v216.go b/models/migrations/v216.go new file mode 100644 index 000000000..b011c11d9 --- /dev/null +++ b/models/migrations/v216.go @@ -0,0 +1,67 @@ +// Copyright 2022 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 ( + "code.gitea.io/gitea/modules/timeutil" + + "xorm.io/xorm" + "xorm.io/xorm/schemas" +) + +type improveActionTableIndicesAction struct { + ID int64 `xorm:"pk autoincr"` + UserID int64 // Receiver user id. + OpType int + ActUserID int64 // Action user id. + RepoID int64 + CommentID int64 `xorm:"INDEX"` + IsDeleted bool `xorm:"NOT NULL DEFAULT false"` + RefName string + IsPrivate bool `xorm:"NOT NULL DEFAULT false"` + Content string `xorm:"TEXT"` + CreatedUnix timeutil.TimeStamp `xorm:"created"` +} + +// TableName sets the name of this table +func (a *improveActionTableIndicesAction) TableName() string { + return "action" +} + +// TableIndices implements xorm's TableIndices interface +func (a *improveActionTableIndicesAction) TableIndices() []*schemas.Index { + actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType) + actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted") + + repoIndex := schemas.NewIndex("r_c_u_d", schemas.IndexType) + repoIndex.AddColumn("repo_id", "created_unix", "user_id", "is_deleted") + + return []*schemas.Index{actUserIndex, repoIndex} +} + +func improveActionTableIndices(x *xorm.Engine) error { + { + type Action struct { + ID int64 `xorm:"pk autoincr"` + UserID int64 `xorm:"INDEX"` // Receiver user id. + OpType int + ActUserID int64 `xorm:"INDEX"` // Action user id. + RepoID int64 `xorm:"INDEX"` + CommentID int64 `xorm:"INDEX"` + IsDeleted bool `xorm:"INDEX NOT NULL DEFAULT false"` + RefName string + IsPrivate bool `xorm:"INDEX NOT NULL DEFAULT false"` + Content string `xorm:"TEXT"` + CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` + } + if err := x.Sync2(&Action{}); err != nil { + return err + } + if err := x.DropIndexes(&Action{}); err != nil { + return err + } + } + return x.Sync2(&improveActionTableIndicesAction{}) +} |