aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZettat123 <zettat123@gmail.com>2023-03-24 23:44:33 +0800
committerGitHub <noreply@github.com>2023-03-24 23:44:33 +0800
commitb958dba1a0f84b986acdb82a6609d70d98140640 (patch)
treee1dae37308862c147577b639f26cad1fe92e24c2
parente52ea44edd99e6ec1c5567c78e663802cdf3cf91 (diff)
downloadgitea-b958dba1a0f84b986acdb82a6609d70d98140640.tar.gz
gitea-b958dba1a0f84b986acdb82a6609d70d98140640.zip
Improve indices for `action` table (#23532)
Close #21611 Add the index mentioned in https://github.com/go-gitea/gitea/issues/21611#issuecomment-1451113252 . Since we already have an index for `("created_unix", "user_id", "is_deleted")` columns on PostgreSQL, I removed the database type check to apply this index to all types of databases.
-rw-r--r--models/activities/action.go10
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v1_20/v249.go45
3 files changed, 51 insertions, 6 deletions
diff --git a/models/activities/action.go b/models/activities/action.go
index c1d17517ba..4111d8098b 100644
--- a/models/activities/action.go
+++ b/models/activities/action.go
@@ -98,12 +98,10 @@ 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")
- indices := []*schemas.Index{actUserIndex, repoIndex}
- if setting.Database.Type.IsPostgreSQL() {
- cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType)
- cudIndex.AddColumn("created_unix", "user_id", "is_deleted")
- indices = append(indices, cudIndex)
- }
+ cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType)
+ cudIndex.AddColumn("created_unix", "user_id", "is_deleted")
+
+ indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex}
return indices
}
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 6224e1c8d7..bec406f7bf 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -475,6 +475,8 @@ var migrations = []Migration{
NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType),
// v248 -> v249
NewMigration("Add version column to action_runner table", v1_20.AddVersionToActionRunner),
+ // v249 -> v250
+ NewMigration("Improve Action table indices v3", v1_20.ImproveActionTableIndices),
}
// GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v1_20/v249.go b/models/migrations/v1_20/v249.go
new file mode 100644
index 0000000000..02951a74d6
--- /dev/null
+++ b/models/migrations/v1_20/v249.go
@@ -0,0 +1,45 @@
+// Copyright 2023 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_20 //nolint
+
+import (
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "xorm.io/xorm"
+ "xorm.io/xorm/schemas"
+)
+
+type Action struct {
+ UserID int64 // Receiver user id.
+ ActUserID int64 // Action user id.
+ RepoID int64
+ IsDeleted bool `xorm:"NOT NULL DEFAULT false"`
+ IsPrivate bool `xorm:"NOT NULL DEFAULT false"`
+ CreatedUnix timeutil.TimeStamp `xorm:"created"`
+}
+
+// TableName sets the name of this table
+func (a *Action) TableName() string {
+ return "action"
+}
+
+// TableIndices implements xorm's TableIndices interface
+func (a *Action) TableIndices() []*schemas.Index {
+ repoIndex := schemas.NewIndex("r_u_d", schemas.IndexType)
+ repoIndex.AddColumn("repo_id", "user_id", "is_deleted")
+
+ actUserIndex := schemas.NewIndex("au_r_c_u_d", schemas.IndexType)
+ actUserIndex.AddColumn("act_user_id", "repo_id", "created_unix", "user_id", "is_deleted")
+
+ cudIndex := schemas.NewIndex("c_u_d", schemas.IndexType)
+ cudIndex.AddColumn("created_unix", "user_id", "is_deleted")
+
+ indices := []*schemas.Index{actUserIndex, repoIndex, cudIndex}
+
+ return indices
+}
+
+func ImproveActionTableIndices(x *xorm.Engine) error {
+ return x.Sync(new(Action))
+}