Advertisement
Guest User

Untitled

a guest
Jun 14th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "github.com/go-xorm/xorm"
  6. _ "github.com/lib/pq"
  7. "math/rand"
  8. "time"
  9. )
  10.  
  11. const (
  12. DB_USER = ""
  13. DB_NAME = ""
  14. DB_PW = ""
  15. DB_HOST = "127.0.0.1"
  16. DB_SSLMODE = "disable"
  17. )
  18.  
  19. type Address struct {
  20. Street string `json:"street"`
  21. City string `json:"city"`
  22. }
  23.  
  24. // Using card with address like this doesnt seem to work with json b
  25. type CardS struct {
  26. Addr Address `xorm:"jsonb notnull 'addr'" json:"addr"`
  27. Id string `xorm:"pk notnull 'id'" json:"id"`
  28. IsDefault bool `xorm:"'is_default'" json:"isDefault"`
  29. Nickname string `xorm:"text notnull 'nickname'" json:"nickname"`
  30. NumberLast4 string `xorm:"text notnull 'number_last_4'" json:"numberLast4"`
  31. }
  32.  
  33. // Works fine with jsonb...
  34. type CardM struct {
  35. Addr map[string]interface{} `xorm:"jsonb notnull 'addr'" json:"addr"`
  36. Id string `xorm:"pk notnull 'id'" json:"id"`
  37. Nickname string `xorm:"text notnull 'nickname'" json:"nickname"`
  38. NumberLast4 string `xorm:"text notnull 'number_last_4'" json:"numberLast4"`
  39. }
  40.  
  41. func init() {
  42. rand.Seed(time.Now().UTC().UnixNano())
  43. }
  44.  
  45. func main() {
  46. xormEngine, err := xorm.NewEngine(
  47. "postgres",
  48. fmt.Sprintf("user=%v dbname=%v sslmode=%v password=%v host=%v", DB_USER, DB_NAME, DB_SSLMODE, DB_PW, DB_HOST))
  49. if err != nil {
  50. panic(err)
  51. }
  52.  
  53. cardS := &CardS{}
  54. cardM := &CardM{}
  55. err = xormEngine.Sync2(cardS, cardM)
  56. if err != nil {
  57. panic(err)
  58. }
  59.  
  60. cardM.Addr = map[string]interface{}{"street": "1778 Main st", "city": "Los Angeles"}
  61. cardM.Id = fmt.Sprintf("something%d", rand.Intn(100000000))
  62. cardM.Nickname = "test"
  63. cardM.NumberLast4 = "1111"
  64.  
  65. // Using the jsonb field as struct will succeed...
  66. affected, err := xormEngine.InsertOne(cardM)
  67. if affected != 1 || err != nil {
  68. panic(fmt.Sprintf("Failed to insert cardM, got (%d) row affected and/or error (%s)", affected, err))
  69. } else {
  70. fmt.Println("****** Success, inserted (%d) rows", affected)
  71. }
  72.  
  73. // This will fail... "no primary key for col addr"
  74. cardS.Addr = Address{"1778 Main st", "Los Angeles"}
  75. cardS.Id = fmt.Sprintf("something%d", rand.Intn(100000000))
  76. cardS.Nickname = "test"
  77. cardS.NumberLast4 = "1111"
  78.  
  79. affected, err = xormEngine.InsertOne(cardS)
  80. if affected != 1 || err != nil {
  81. panic(fmt.Sprintf("Failed to insert cardS, got (%d) row affected and/or error (%s)", affected, err))
  82. }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement