Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "github.com/go-xorm/xorm"
- _ "github.com/lib/pq"
- "math/rand"
- "time"
- )
- const (
- DB_USER = ""
- DB_NAME = ""
- DB_PW = ""
- DB_HOST = "127.0.0.1"
- DB_SSLMODE = "disable"
- )
- type Address struct {
- Street string `json:"street"`
- City string `json:"city"`
- }
- // Using card with address like this doesnt seem to work with json b
- type CardS struct {
- Addr Address `xorm:"jsonb notnull 'addr'" json:"addr"`
- Id string `xorm:"pk notnull 'id'" json:"id"`
- IsDefault bool `xorm:"'is_default'" json:"isDefault"`
- Nickname string `xorm:"text notnull 'nickname'" json:"nickname"`
- NumberLast4 string `xorm:"text notnull 'number_last_4'" json:"numberLast4"`
- }
- // Works fine with jsonb...
- type CardM struct {
- Addr map[string]interface{} `xorm:"jsonb notnull 'addr'" json:"addr"`
- Id string `xorm:"pk notnull 'id'" json:"id"`
- Nickname string `xorm:"text notnull 'nickname'" json:"nickname"`
- NumberLast4 string `xorm:"text notnull 'number_last_4'" json:"numberLast4"`
- }
- func init() {
- rand.Seed(time.Now().UTC().UnixNano())
- }
- func main() {
- xormEngine, err := xorm.NewEngine(
- "postgres",
- fmt.Sprintf("user=%v dbname=%v sslmode=%v password=%v host=%v", DB_USER, DB_NAME, DB_SSLMODE, DB_PW, DB_HOST))
- if err != nil {
- panic(err)
- }
- cardS := &CardS{}
- cardM := &CardM{}
- err = xormEngine.Sync2(cardS, cardM)
- if err != nil {
- panic(err)
- }
- cardM.Addr = map[string]interface{}{"street": "1778 Main st", "city": "Los Angeles"}
- cardM.Id = fmt.Sprintf("something%d", rand.Intn(100000000))
- cardM.Nickname = "test"
- cardM.NumberLast4 = "1111"
- // Using the jsonb field as struct will succeed...
- affected, err := xormEngine.InsertOne(cardM)
- if affected != 1 || err != nil {
- panic(fmt.Sprintf("Failed to insert cardM, got (%d) row affected and/or error (%s)", affected, err))
- } else {
- fmt.Println("****** Success, inserted (%d) rows", affected)
- }
- // This will fail... "no primary key for col addr"
- cardS.Addr = Address{"1778 Main st", "Los Angeles"}
- cardS.Id = fmt.Sprintf("something%d", rand.Intn(100000000))
- cardS.Nickname = "test"
- cardS.NumberLast4 = "1111"
- affected, err = xormEngine.InsertOne(cardS)
- if affected != 1 || err != nil {
- panic(fmt.Sprintf("Failed to insert cardS, got (%d) row affected and/or error (%s)", affected, err))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement