github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/go-hbase/del.go (about) 1 package hbase 2 3 import ( 4 pb "github.com/insionng/yougam/libraries/golang/protobuf/proto" 5 "github.com/insionng/yougam/libraries/pingcap/go-hbase/proto" 6 7 "fmt" 8 "math" 9 "strings" 10 ) 11 12 type Delete struct { 13 Row []byte 14 Families set 15 FamilyQuals map[string]set 16 Ts map[string]uint64 17 } 18 19 func NewDelete(row []byte) *Delete { 20 return &Delete{ 21 Row: row, 22 Families: newSet(), 23 FamilyQuals: make(map[string]set), 24 Ts: make(map[string]uint64), 25 } 26 } 27 28 func (d *Delete) AddString(famqual string) error { 29 parts := strings.Split(famqual, ":") 30 31 if len(parts) > 2 { 32 return fmt.Errorf("Too many colons were found in the family:qualifier string. '%s'", famqual) 33 } else if len(parts) == 2 { 34 d.AddStringColumn(parts[0], parts[1]) 35 } else { 36 d.AddStringFamily(famqual) 37 } 38 39 return nil 40 } 41 42 func (d *Delete) GetRow() []byte { 43 return d.Row 44 } 45 46 func (d *Delete) AddColumn(family, qual []byte) *Delete { 47 d.AddFamily(family) 48 d.FamilyQuals[string(family)].add(string(qual)) 49 return d 50 } 51 52 func (d *Delete) AddStringColumn(family, qual string) *Delete { 53 return d.AddColumn([]byte(family), []byte(qual)) 54 } 55 56 func (d *Delete) AddFamily(family []byte) *Delete { 57 d.Families.add(string(family)) 58 if _, ok := d.FamilyQuals[string(family)]; !ok { 59 d.FamilyQuals[string(family)] = newSet() 60 } 61 return d 62 } 63 64 func (d *Delete) AddStringFamily(family string) *Delete { 65 return d.AddFamily([]byte(family)) 66 } 67 68 func (d *Delete) AddColumnWithTimestamp(family, qual []byte, ts uint64) *Delete { 69 d.AddColumn(family, qual) 70 k := string(family) + ":" + string(qual) 71 d.Ts[k] = ts 72 return d 73 } 74 75 func (d *Delete) ToProto() pb.Message { 76 del := &proto.MutationProto{ 77 Row: d.Row, 78 MutateType: proto.MutationProto_DELETE.Enum(), 79 } 80 81 for family := range d.Families { 82 cv := &proto.MutationProto_ColumnValue{ 83 Family: []byte(family), 84 QualifierValue: make([]*proto.MutationProto_ColumnValue_QualifierValue, 0), 85 } 86 87 if len(d.FamilyQuals[family]) == 0 { 88 cv.QualifierValue = append(cv.QualifierValue, &proto.MutationProto_ColumnValue_QualifierValue{ 89 Qualifier: nil, 90 Timestamp: pb.Uint64(uint64(math.MaxInt64)), 91 DeleteType: proto.MutationProto_DELETE_FAMILY.Enum(), 92 }) 93 } 94 95 for qual := range d.FamilyQuals[family] { 96 v := &proto.MutationProto_ColumnValue_QualifierValue{ 97 Qualifier: []byte(qual), 98 Timestamp: pb.Uint64(uint64(math.MaxInt64)), 99 DeleteType: proto.MutationProto_DELETE_MULTIPLE_VERSIONS.Enum(), 100 } 101 tsKey := string(family) + ":" + string(qual) 102 if ts, ok := d.Ts[tsKey]; ok { 103 v.Timestamp = pb.Uint64(ts) 104 v.DeleteType = proto.MutationProto_DELETE_ONE_VERSION.Enum() 105 } 106 cv.QualifierValue = append(cv.QualifierValue, v) 107 } 108 109 del.ColumnValue = append(del.ColumnValue, cv) 110 } 111 112 return del 113 }