@@ -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 |
@@ -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 |
@@ -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{}) | |||
} |