// Scan implements the sql.Scanner interface. func (cm *CommandMap) Scan(src interface{}) error { h := hstore.Hstore{} if err := h.Scan(src); err != nil { return err } m := make(CommandMap) for k, v := range h.Map { m[ProcessType(k)] = Command(v.String) } *cm = m return nil }
// Scan implements the sql.Scanner interface. func (v *Vars) Scan(src interface{}) error { h := hstore.Hstore{} if err := h.Scan(src); err != nil { return err } vars := make(Vars) for k, v := range h.Map { // Go reuses the same address space for v, so &v.String would always // return the same address tmp := v.String vars[Variable(k)] = &tmp } *v = vars return nil }
func (h *Hstore) Scan(value interface{}) error { hstore := hstore.Hstore{} if err := hstore.Scan(value); err != nil { return err } if len(hstore.Map) == 0 { return nil } *h = Hstore{} for k := range hstore.Map { if hstore.Map[k].Valid { s := hstore.Map[k].String (*h)[k] = &s } else { (*h)[k] = nil } } return nil }