From 702f4b521e118482e5887664efe69035fff96ceb Mon Sep 17 00:00:00 2001
From: Jason Song <i@wolfogre.com>
Date: Thu, 24 Nov 2022 10:49:41 +0800
Subject: [PATCH] Add index for access_token (#21908)

The `token_last_eight` field has been used in `GetAccessTokenBySHA `:
---
 models/auth/token.go            |  2 +-
 models/migrations/migrations.go |  2 ++
 models/migrations/v1_19/v235.go | 17 +++++++++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 models/migrations/v1_19/v235.go

diff --git a/models/auth/token.go b/models/auth/token.go
index 17c07531f8..9902b80b78 100644
--- a/models/auth/token.go
+++ b/models/auth/token.go
@@ -66,7 +66,7 @@ type AccessToken struct {
 	Token          string `xorm:"-"`
 	TokenHash      string `xorm:"UNIQUE"` // sha256 of token
 	TokenSalt      string
-	TokenLastEight string `xorm:"token_last_eight"`
+	TokenLastEight string `xorm:"INDEX token_last_eight"`
 
 	CreatedUnix       timeutil.TimeStamp `xorm:"INDEX created"`
 	UpdatedUnix       timeutil.TimeStamp `xorm:"INDEX updated"`
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index c48fc8d9a8..a48c837e8b 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -441,6 +441,8 @@ var migrations = []Migration{
 	NewMigration("Add header_authorization_encrypted column to webhook table", v1_19.AddHeaderAuthorizationEncryptedColWebhook),
 	// v234 -> v235
 	NewMigration("Add package cleanup rule table", v1_19.CreatePackageCleanupRuleTable),
+	// v235 -> v236
+	NewMigration("Add index for access_token", v1_19.AddIndexForAccessToken),
 }
 
 // GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v1_19/v235.go b/models/migrations/v1_19/v235.go
new file mode 100644
index 0000000000..b43ee32a56
--- /dev/null
+++ b/models/migrations/v1_19/v235.go
@@ -0,0 +1,17 @@
+// 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 v1_19 //nolint
+
+import (
+	"xorm.io/xorm"
+)
+
+func AddIndexForAccessToken(x *xorm.Engine) error {
+	type AccessToken struct {
+		TokenLastEight string `xorm:"INDEX token_last_eight"`
+	}
+
+	return x.Sync(new(AccessToken))
+}