pointer_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package gorm_test
  2. import "testing"
  3. type PointerStruct struct {
  4. ID int64
  5. Name *string
  6. Num *int
  7. }
  8. type NormalStruct struct {
  9. ID int64
  10. Name string
  11. Num int
  12. }
  13. func TestPointerFields(t *testing.T) {
  14. DB.DropTable(&PointerStruct{})
  15. DB.AutoMigrate(&PointerStruct{})
  16. var name = "pointer struct 1"
  17. var num = 100
  18. pointerStruct := PointerStruct{Name: &name, Num: &num}
  19. if DB.Create(&pointerStruct).Error != nil {
  20. t.Errorf("Failed to save pointer struct")
  21. }
  22. var pointerStructResult PointerStruct
  23. if err := DB.First(&pointerStructResult, "id = ?", pointerStruct.ID).Error; err != nil || *pointerStructResult.Name != name || *pointerStructResult.Num != num {
  24. t.Errorf("Failed to query saved pointer struct")
  25. }
  26. var tableName = DB.NewScope(&PointerStruct{}).TableName()
  27. var normalStruct NormalStruct
  28. DB.Table(tableName).First(&normalStruct)
  29. if normalStruct.Name != name || normalStruct.Num != num {
  30. t.Errorf("Failed to query saved Normal struct")
  31. }
  32. var nilPointerStruct = PointerStruct{}
  33. if err := DB.Create(&nilPointerStruct).Error; err != nil {
  34. t.Error("Failed to save nil pointer struct", err)
  35. }
  36. var pointerStruct2 PointerStruct
  37. if err := DB.First(&pointerStruct2, "id = ?", nilPointerStruct.ID).Error; err != nil {
  38. t.Error("Failed to query saved nil pointer struct", err)
  39. }
  40. var normalStruct2 NormalStruct
  41. if err := DB.Table(tableName).First(&normalStruct2, "id = ?", nilPointerStruct.ID).Error; err != nil {
  42. t.Error("Failed to query saved nil pointer struct", err)
  43. }
  44. var partialNilPointerStruct1 = PointerStruct{Num: &num}
  45. if err := DB.Create(&partialNilPointerStruct1).Error; err != nil {
  46. t.Error("Failed to save partial nil pointer struct", err)
  47. }
  48. var pointerStruct3 PointerStruct
  49. if err := DB.First(&pointerStruct3, "id = ?", partialNilPointerStruct1.ID).Error; err != nil || *pointerStruct3.Num != num {
  50. t.Error("Failed to query saved partial nil pointer struct", err)
  51. }
  52. var normalStruct3 NormalStruct
  53. if err := DB.Table(tableName).First(&normalStruct3, "id = ?", partialNilPointerStruct1.ID).Error; err != nil || normalStruct3.Num != num {
  54. t.Error("Failed to query saved partial pointer struct", err)
  55. }
  56. var partialNilPointerStruct2 = PointerStruct{Name: &name}
  57. if err := DB.Create(&partialNilPointerStruct2).Error; err != nil {
  58. t.Error("Failed to save partial nil pointer struct", err)
  59. }
  60. var pointerStruct4 PointerStruct
  61. if err := DB.First(&pointerStruct4, "id = ?", partialNilPointerStruct2.ID).Error; err != nil || *pointerStruct4.Name != name {
  62. t.Error("Failed to query saved partial nil pointer struct", err)
  63. }
  64. var normalStruct4 NormalStruct
  65. if err := DB.Table(tableName).First(&normalStruct4, "id = ?", partialNilPointerStruct2.ID).Error; err != nil || normalStruct4.Name != name {
  66. t.Error("Failed to query saved partial pointer struct", err)
  67. }
  68. }