code.gitea.io/gitea@v1.22.3/models/migrations/base/db_test.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package base 5 6 import ( 7 "testing" 8 9 "code.gitea.io/gitea/modules/timeutil" 10 11 "xorm.io/xorm/names" 12 ) 13 14 func Test_DropTableColumns(t *testing.T) { 15 x, deferable := PrepareTestEnv(t, 0) 16 if x == nil || t.Failed() { 17 defer deferable() 18 return 19 } 20 defer deferable() 21 22 type DropTest struct { 23 ID int64 `xorm:"pk autoincr"` 24 FirstColumn string 25 ToDropColumn string `xorm:"unique"` 26 AnotherColumn int64 27 CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` 28 UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` 29 } 30 31 columns := []string{ 32 "first_column", 33 "to_drop_column", 34 "another_column", 35 "created_unix", 36 "updated_unix", 37 } 38 39 x.SetMapper(names.GonicMapper{}) 40 41 for i := range columns { 42 if err := x.Sync(new(DropTest)); err != nil { 43 t.Errorf("unable to create DropTest table: %v", err) 44 return 45 } 46 47 sess := x.NewSession() 48 if err := sess.Begin(); err != nil { 49 sess.Close() 50 t.Errorf("unable to begin transaction: %v", err) 51 return 52 } 53 if err := DropTableColumns(sess, "drop_test", columns[i:]...); err != nil { 54 sess.Close() 55 t.Errorf("Unable to drop columns[%d:]: %s from drop_test: %v", i, columns[i:], err) 56 return 57 } 58 if err := sess.Commit(); err != nil { 59 sess.Close() 60 t.Errorf("unable to commit transaction: %v", err) 61 return 62 } 63 sess.Close() 64 if err := x.DropTables(new(DropTest)); err != nil { 65 t.Errorf("unable to drop table: %v", err) 66 return 67 } 68 for j := range columns[i+1:] { 69 if err := x.Sync(new(DropTest)); err != nil { 70 t.Errorf("unable to create DropTest table: %v", err) 71 return 72 } 73 dropcols := append([]string{columns[i]}, columns[j+i+1:]...) 74 sess := x.NewSession() 75 if err := sess.Begin(); err != nil { 76 sess.Close() 77 t.Errorf("unable to begin transaction: %v", err) 78 return 79 } 80 if err := DropTableColumns(sess, "drop_test", dropcols...); err != nil { 81 sess.Close() 82 t.Errorf("Unable to drop columns: %s from drop_test: %v", dropcols, err) 83 return 84 } 85 if err := sess.Commit(); err != nil { 86 sess.Close() 87 t.Errorf("unable to commit transaction: %v", err) 88 return 89 } 90 sess.Close() 91 if err := x.DropTables(new(DropTest)); err != nil { 92 t.Errorf("unable to drop table: %v", err) 93 return 94 } 95 } 96 } 97 }