code.gitea.io/gitea@v1.21.7/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 for i := range columns { 40 x.SetMapper(names.GonicMapper{}) 41 if err := x.Sync(new(DropTest)); err != nil { 42 t.Errorf("unable to create DropTest table: %v", err) 43 return 44 } 45 sess := x.NewSession() 46 if err := sess.Begin(); err != nil { 47 sess.Close() 48 t.Errorf("unable to begin transaction: %v", err) 49 return 50 } 51 if err := DropTableColumns(sess, "drop_test", columns[i:]...); err != nil { 52 sess.Close() 53 t.Errorf("Unable to drop columns[%d:]: %s from drop_test: %v", i, columns[i:], err) 54 return 55 } 56 if err := sess.Commit(); err != nil { 57 sess.Close() 58 t.Errorf("unable to commit transaction: %v", err) 59 return 60 } 61 sess.Close() 62 if err := x.DropTables(new(DropTest)); err != nil { 63 t.Errorf("unable to drop table: %v", err) 64 return 65 } 66 for j := range columns[i+1:] { 67 x.SetMapper(names.GonicMapper{}) 68 if err := x.Sync(new(DropTest)); err != nil { 69 t.Errorf("unable to create DropTest table: %v", err) 70 return 71 } 72 dropcols := append([]string{columns[i]}, columns[j+i+1:]...) 73 sess := x.NewSession() 74 if err := sess.Begin(); err != nil { 75 sess.Close() 76 t.Errorf("unable to begin transaction: %v", err) 77 return 78 } 79 if err := DropTableColumns(sess, "drop_test", dropcols...); err != nil { 80 sess.Close() 81 t.Errorf("Unable to drop columns: %s from drop_test: %v", dropcols, err) 82 return 83 } 84 if err := sess.Commit(); err != nil { 85 sess.Close() 86 t.Errorf("unable to commit transaction: %v", err) 87 return 88 } 89 sess.Close() 90 if err := x.DropTables(new(DropTest)); err != nil { 91 t.Errorf("unable to drop table: %v", err) 92 return 93 } 94 } 95 } 96 }