diff options
Diffstat (limited to 'internal/db/migrations')
-rw-r--r-- | internal/db/migrations/migrations.go | 2 | ||||
-rw-r--r-- | internal/db/migrations/v21.go | 19 | ||||
-rw-r--r-- | internal/db/migrations/v21_test.go | 82 |
3 files changed, 103 insertions, 0 deletions
diff --git a/internal/db/migrations/migrations.go b/internal/db/migrations/migrations.go index 9d22681d..664bea5f 100644 --- a/internal/db/migrations/migrations.go +++ b/internal/db/migrations/migrations.go @@ -54,6 +54,8 @@ var migrations = []Migration{ // v19 -> v20:v0.13.0 NewMigration("migrate access tokens to store SHA56", migrateAccessTokenToSHA256), + // v20 -> v21:v0.13.0 + NewMigration("add index to action.user_id", addIndexToActionUserID), } // Migrate migrates the database schema and/or data to the current version. diff --git a/internal/db/migrations/v21.go b/internal/db/migrations/v21.go new file mode 100644 index 00000000..0a1c74b0 --- /dev/null +++ b/internal/db/migrations/v21.go @@ -0,0 +1,19 @@ +// Copyright 2022 The Gogs 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 ( + "gorm.io/gorm" +) + +func addIndexToActionUserID(db *gorm.DB) error { + type action struct { + UserID string `gorm:"index"` + } + if db.Migrator().HasIndex(&action{}, "UserID") { + return nil + } + return db.Migrator().CreateIndex(&action{}, "UserID") +} diff --git a/internal/db/migrations/v21_test.go b/internal/db/migrations/v21_test.go new file mode 100644 index 00000000..d11c47c5 --- /dev/null +++ b/internal/db/migrations/v21_test.go @@ -0,0 +1,82 @@ +// Copyright 2022 The Gogs 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 ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "gogs.io/gogs/internal/dbtest" +) + +type actionPreV21 struct { + ID int64 `gorm:"primaryKey"` + UserID int64 + OpType int + ActUserID int64 + ActUserName string + RepoID int64 `gorm:"index"` + RepoUserName string + RepoName string + RefName string + IsPrivate bool `gorm:"not null;default:FALSE"` + Content string + CreatedUnix int64 +} + +func (*actionPreV21) TableName() string { + return "action" +} + +type actionV21 struct { + ID int64 `gorm:"primaryKey"` + UserID int64 `gorm:"index"` + OpType int + ActUserID int64 + ActUserName string + RepoID int64 `gorm:"index"` + RepoUserName string + RepoName string + RefName string + IsPrivate bool `gorm:"not null;default:FALSE"` + Content string + CreatedUnix int64 +} + +func (*actionV21) TableName() string { + return "action" +} + +func TestAddIndexToActionUserID(t *testing.T) { + if testing.Short() { + t.Skip() + } + t.Parallel() + + db := dbtest.NewDB(t, "addIndexToActionUserID", new(actionPreV21)) + err := db.Create( + &actionPreV21{ + ID: 1, + UserID: 1, + OpType: 1, + ActUserID: 1, + ActUserName: "alice", + RepoID: 1, + RepoUserName: "alice", + RepoName: "example", + RefName: "main", + IsPrivate: false, + CreatedUnix: db.NowFunc().Unix(), + }, + ).Error + require.NoError(t, err) + assert.False(t, db.Migrator().HasIndex(&actionV21{}, "UserID")) + + err = addIndexToActionUserID(db) + require.NoError(t, err) + assert.True(t, db.Migrator().HasIndex(&actionV21{}, "UserID")) +} |