github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/go-hbase/get.go (about) 1 package hbase 2 3 import ( 4 "strings" 5 6 pb "github.com/insionng/yougam/libraries/golang/protobuf/proto" 7 "github.com/insionng/yougam/libraries/juju/errors" 8 "github.com/insionng/yougam/libraries/pingcap/go-hbase/proto" 9 ) 10 11 type Get struct { 12 Row []byte 13 Families set 14 FamilyQuals map[string]set 15 Versions int32 16 TsRangeFrom uint64 17 TsRangeTo uint64 18 } 19 20 func NewGet(row []byte) *Get { 21 return &Get{ 22 Row: append([]byte(nil), row...), 23 Families: newSet(), 24 FamilyQuals: make(map[string]set), 25 Versions: 1, 26 } 27 } 28 29 func (g *Get) GetRow() []byte { 30 return g.Row 31 } 32 33 func (g *Get) AddString(famqual string) error { 34 parts := strings.Split(famqual, ":") 35 36 if len(parts) > 2 { 37 return errors.Errorf("Too many colons were found in the family:qualifier string. '%s'", famqual) 38 } else if len(parts) == 2 { 39 g.AddStringColumn(parts[0], parts[1]) 40 } else { 41 g.AddStringFamily(famqual) 42 } 43 44 return nil 45 } 46 47 func (g *Get) AddColumn(family, qual []byte) *Get { 48 g.AddFamily(family) 49 g.FamilyQuals[string(family)].add(string(qual)) 50 return g 51 } 52 53 func (g *Get) AddStringColumn(family, qual string) *Get { 54 return g.AddColumn([]byte(family), []byte(qual)) 55 } 56 57 func (g *Get) AddFamily(family []byte) *Get { 58 g.Families.add(string(family)) 59 if _, ok := g.FamilyQuals[string(family)]; !ok { 60 g.FamilyQuals[string(family)] = newSet() 61 } 62 return g 63 } 64 65 func (g *Get) AddStringFamily(family string) *Get { 66 return g.AddFamily([]byte(family)) 67 } 68 69 func (g *Get) AddTimeRange(from uint64, to uint64) *Get { 70 g.TsRangeFrom = from 71 g.TsRangeTo = to 72 return g 73 } 74 75 func (g *Get) SetMaxVersion(maxVersion int32) *Get { 76 g.Versions = maxVersion 77 return g 78 } 79 80 func (g *Get) ToProto() pb.Message { 81 get := &proto.Get{ 82 Row: g.Row, 83 } 84 85 if g.TsRangeFrom != 0 && g.TsRangeTo != 0 && g.TsRangeFrom <= g.TsRangeTo { 86 get.TimeRange = &proto.TimeRange{ 87 From: pb.Uint64(g.TsRangeFrom), 88 To: pb.Uint64(g.TsRangeTo), 89 } 90 } 91 92 for v := range g.Families { 93 col := &proto.Column{ 94 Family: []byte(v), 95 } 96 var quals [][]byte 97 for qual := range g.FamilyQuals[v] { 98 quals = append(quals, []byte(qual)) 99 } 100 col.Qualifier = quals 101 get.Column = append(get.Column, col) 102 } 103 get.MaxVersions = pb.Uint32(uint32(g.Versions)) 104 return get 105 }