// Update Client on condition(s) func (s *ClientStore) Update( c store.Conds, ep store.EntityPtr) (err error) { // get collection coll, err := s.Coll() if err != nil { return } // get by condition and ignore the error cond, _ := c.GetMap() res := coll.Find(db.Cond(cond)) // Marshal the item, if possible // (quick fix for upperio problem with db.Marshaler) if me, ok := ep.(db.Marshaler); ok { ep, err = me.MarshalDB() if err != nil { return } } // update the matched entities err = res.Update(ep) if err != nil { err = s.errorf("Error updating Client: %s", err.Error()) } return }
// Delete Client on condition(s) func (s *ClientStore) Delete( c store.Conds) (err error) { // get collection coll, err := s.Coll() if err != nil { return } // get by condition and ignore the error cond, _ := c.GetMap() res := coll.Find(db.Cond(cond)) // remove the matched entities err = res.Remove() if err != nil { err = s.errorf("Error deleting Client: %s", err.Error()) } return nil }
// Conds Translate the store.Conds interface into // upperio flavor conditions representation func Conds(cs store.Conds) interface{} { conds := cs.GetAll() out := make([]interface{}, 0) // accumulate relations for _, cond := range conds { if cond.Prop == "" { // if no prop, assume to be prop if v, ok := cond.Value.(string); ok { out = append(out, db.Raw{v}) } else if v, ok := cond.Value.(store.Conds); ok { leaf := Conds(v) out = append(out, leaf) } else if v, ok := cond.Value.(db.Raw); ok { out = append(out, v) } else if v, ok := cond.Value.(db.And); ok { out = append(out, v) } else if v, ok := cond.Value.(db.Or); ok { out = append(out, v) } } else { out = append(out, db.Cond{cond.Prop: cond.Value}) } } if len(out) == 0 { return nil // nil for empty query, searchs everything } // determine relations if cs.GetRel() == store.And { return db.And(out) } else if cs.GetRel() == store.Or { return db.Or(out) } panic(fmt.Sprintf("Incorrect value of Rel in %#v", cs)) return nil }