github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/go-hbase/put.go (about) 1 package hbase 2 3 import ( 4 "bytes" 5 "math" 6 7 pb "github.com/insionng/yougam/libraries/golang/protobuf/proto" 8 "github.com/insionng/yougam/libraries/pingcap/go-hbase/proto" 9 ) 10 11 type Put struct { 12 Row []byte 13 Families [][]byte 14 Qualifiers [][][]byte 15 Values [][][]byte 16 Timestamp uint64 17 } 18 19 func NewPut(row []byte) *Put { 20 return &Put{ 21 Row: row, 22 Families: make([][]byte, 0), 23 Qualifiers: make([][][]byte, 0), 24 Values: make([][][]byte, 0), 25 } 26 } 27 28 func (p *Put) GetRow() []byte { 29 return p.Row 30 } 31 32 func (p *Put) AddValue(family, qual, value []byte) *Put { 33 pos := p.posOfFamily(family) 34 if pos == -1 { 35 p.Families = append(p.Families, family) 36 p.Qualifiers = append(p.Qualifiers, make([][]byte, 0)) 37 p.Values = append(p.Values, make([][]byte, 0)) 38 39 pos = p.posOfFamily(family) 40 } 41 42 p.Qualifiers[pos] = append(p.Qualifiers[pos], qual) 43 p.Values[pos] = append(p.Values[pos], value) 44 return p 45 } 46 47 func (p *Put) AddStringValue(family, column, value string) *Put { 48 return p.AddValue([]byte(family), []byte(column), []byte(value)) 49 } 50 51 func (p *Put) AddTimestamp(ts uint64) *Put { 52 if ts == 0 { 53 p.Timestamp = math.MaxInt64 54 } else { 55 p.Timestamp = ts 56 } 57 return p 58 } 59 60 func (p *Put) posOfFamily(family []byte) int { 61 for p, v := range p.Families { 62 if bytes.Equal(family, v) { 63 return p 64 } 65 } 66 return -1 67 } 68 69 func (p *Put) ToProto() pb.Message { 70 put := &proto.MutationProto{ 71 Row: p.Row, 72 MutateType: proto.MutationProto_PUT.Enum(), 73 } 74 75 for i, family := range p.Families { 76 cv := &proto.MutationProto_ColumnValue{ 77 Family: family, 78 } 79 80 for j := range p.Qualifiers[i] { 81 cv.QualifierValue = append(cv.QualifierValue, &proto.MutationProto_ColumnValue_QualifierValue{ 82 Qualifier: p.Qualifiers[i][j], 83 Value: p.Values[i][j], 84 Timestamp: pb.Uint64(p.Timestamp), 85 }) 86 } 87 88 put.ColumnValue = append(put.ColumnValue, cv) 89 } 90 91 return put 92 }