func in(engine *xorm.Engine, t *testing.T) { var usrs []Userinfo err := engine.Limit(3).Find(&usrs) if err != nil { t.Error(err) panic(err) } if len(usrs) != 3 { err = errors.New("there are not 3 records") t.Error(err) panic(err) } var ids []int64 var idsStr string for _, u := range usrs { ids = append(ids, u.Uid) idsStr = fmt.Sprintf("%d,", u.Uid) } idsStr = idsStr[:len(idsStr)-1] users := make([]Userinfo, 0) err = engine.In("(id)", ids[0], ids[1], ids[2]).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be " + idsStr + " total 3") t.Error(err) panic(err) } users = make([]Userinfo, 0) err = engine.In("(id)", ids).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be " + idsStr + " total 3") t.Error(err) panic(err) } for _, user := range users { if user.Uid != ids[0] && user.Uid != ids[1] && user.Uid != ids[2] { err = errors.New("in uses should be " + idsStr + " total 3") t.Error(err) panic(err) } } users = make([]Userinfo, 0) var idsInterface []interface{} for _, id := range ids { idsInterface = append(idsInterface, id) } department := engine.ColumnMapper.Obj2Table("Departname") err = engine.Where("`"+department+"` = ?", "dev").In("(id)", idsInterface...).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be " + idsStr + " total 3") t.Error(err) panic(err) } for _, user := range users { if user.Uid != ids[0] && user.Uid != ids[1] && user.Uid != ids[2] { err = errors.New("in uses should be " + idsStr + " total 3") t.Error(err) panic(err) } } dev := engine.ColumnMapper.Obj2Table("Dev") err = engine.In("(id)", 1).In("(id)", 2).In(department, dev).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) cnt, err := engine.In("(id)", ids[0]).Update(&Userinfo{Departname: "dev-"}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("update records not 1") t.Error(err) panic(err) } user := new(Userinfo) has, err := engine.Id(ids[0]).Get(user) if err != nil { t.Error(err) panic(err) } if !has { err = errors.New("get record not 1") t.Error(err) panic(err) } if user.Departname != "dev-" { err = errors.New("update not success") t.Error(err) panic(err) } cnt, err = engine.In("(id)", ids[0]).Update(&Userinfo{Departname: "dev"}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("update records not 1") t.Error(err) panic(err) } cnt, err = engine.In("(id)", ids[1]).Delete(&Userinfo{}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("deleted records not 1") t.Error(err) panic(err) } }
func in(engine *xorm.Engine, t *testing.T) { users := make([]Userinfo, 0) err := engine.In("(id)", 7, 8, 9).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be 7,8,9 total 3") t.Error(err) panic(err) } users = make([]Userinfo, 0) err = engine.In("(id)", []int{7, 8, 9}).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be 7,8,9 total 3") t.Error(err) panic(err) } for _, user := range users { if user.Uid != 7 && user.Uid != 8 && user.Uid != 9 { err = errors.New("in uses should be 7,8,9 total 3") t.Error(err) panic(err) } } users = make([]Userinfo, 0) ids := []interface{}{7, 8, 9} department := engine.ColumnMapper.Obj2Table("Departname") err = engine.Where("`"+department+"` = ?", "dev").In("(id)", ids...).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) if len(users) != 3 { err = errors.New("in uses should be 7,8,9 total 3") t.Error(err) panic(err) } for _, user := range users { if user.Uid != 7 && user.Uid != 8 && user.Uid != 9 { err = errors.New("in uses should be 7,8,9 total 3") t.Error(err) panic(err) } } dev := engine.ColumnMapper.Obj2Table("Dev") err = engine.In("(id)", 1).In("(id)", 2).In(department, dev).Find(&users) if err != nil { t.Error(err) panic(err) } fmt.Println(users) cnt, err := engine.In("(id)", 4).Update(&Userinfo{Departname: "dev-"}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("update records not 1") t.Error(err) panic(err) } user := new(Userinfo) has, err := engine.Id(4).Get(user) if err != nil { t.Error(err) panic(err) } if !has { err = errors.New("get record not 1") t.Error(err) panic(err) } if user.Departname != "dev-" { err = errors.New("update not success") t.Error(err) panic(err) } cnt, err = engine.In("(id)", 4).Update(&Userinfo{Departname: "dev"}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("update records not 1") t.Error(err) panic(err) } cnt, err = engine.In("(id)", 5).Delete(&Userinfo{}) if err != nil { t.Error(err) panic(err) } if cnt != 1 { err = errors.New("deleted records not 1") t.Error(err) panic(err) } }
func TestNullStructUpdate(engine *xorm.Engine, t *testing.T) { if true { // 测试可插入NULL item := new(NullType) item.Age = sql.NullInt64{23, true} item.Height = sql.NullFloat64{0, false} // update to NULL affected, err := engine.Id(2).Cols("height", "is_man").Update(item) if err != nil { t.Error(err) panic(err) } if affected != 1 { err := errors.New("update failed") t.Error(err) panic(err) } } if true { // 测试In update item := new(NullType) affected, err := engine.In("id", 3, 4).Cols("height", "is_man").Update(item) if err != nil { t.Error(err) panic(err) } if affected != 2 { err := errors.New("update failed") t.Error(err) panic(err) } } if true { // 测试where item := new(NullType) item.Name = sql.NullString{"nullname", true} item.IsMan = sql.NullBool{true, true} item.Age = sql.NullInt64{34, true} _, err := engine.Where("age > ?", 34).Update(item) if err != nil { t.Error(err) panic(err) } } if true { // 修改全部时,插入空值 item := &NullType{ Name: sql.NullString{"winxxp", true}, Age: sql.NullInt64{30, true}, Height: sql.NullFloat64{1.72, true}, // IsMan: sql.NullBool{true, true}, } _, err := engine.AllCols().Id(6).Update(item) if err != nil { t.Error(err) panic(err) } fmt.Println(item) } }