You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

db_test.go 2.3KB

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