|
- package hbase
-
- import (
- pb "github.com/golang/protobuf/proto"
- "github.com/pingcap/go-hbase/proto"
-
- "fmt"
- "math"
- "strings"
- )
-
- type Delete struct {
- Row []byte
- Families set
- FamilyQuals map[string]set
- Ts map[string]uint64
- }
-
- func NewDelete(row []byte) *Delete {
- return &Delete{
- Row: row,
- Families: newSet(),
- FamilyQuals: make(map[string]set),
- Ts: make(map[string]uint64),
- }
- }
-
- func (d *Delete) AddString(famqual string) error {
- parts := strings.Split(famqual, ":")
-
- if len(parts) > 2 {
- return fmt.Errorf("Too many colons were found in the family:qualifier string. '%s'", famqual)
- } else if len(parts) == 2 {
- d.AddStringColumn(parts[0], parts[1])
- } else {
- d.AddStringFamily(famqual)
- }
-
- return nil
- }
-
- func (d *Delete) GetRow() []byte {
- return d.Row
- }
-
- func (d *Delete) AddColumn(family, qual []byte) *Delete {
- d.AddFamily(family)
- d.FamilyQuals[string(family)].add(string(qual))
- return d
- }
-
- func (d *Delete) AddStringColumn(family, qual string) *Delete {
- return d.AddColumn([]byte(family), []byte(qual))
- }
-
- func (d *Delete) AddFamily(family []byte) *Delete {
- d.Families.add(string(family))
- if _, ok := d.FamilyQuals[string(family)]; !ok {
- d.FamilyQuals[string(family)] = newSet()
- }
- return d
- }
-
- func (d *Delete) AddStringFamily(family string) *Delete {
- return d.AddFamily([]byte(family))
- }
-
- func (d *Delete) AddColumnWithTimestamp(family, qual []byte, ts uint64) *Delete {
- d.AddColumn(family, qual)
- k := string(family) + ":" + string(qual)
- d.Ts[k] = ts
- return d
- }
-
- func (d *Delete) ToProto() pb.Message {
- del := &proto.MutationProto{
- Row: d.Row,
- MutateType: proto.MutationProto_DELETE.Enum(),
- }
-
- for family := range d.Families {
- cv := &proto.MutationProto_ColumnValue{
- Family: []byte(family),
- QualifierValue: make([]*proto.MutationProto_ColumnValue_QualifierValue, 0),
- }
-
- if len(d.FamilyQuals[family]) == 0 {
- cv.QualifierValue = append(cv.QualifierValue, &proto.MutationProto_ColumnValue_QualifierValue{
- Qualifier: nil,
- Timestamp: pb.Uint64(uint64(math.MaxInt64)),
- DeleteType: proto.MutationProto_DELETE_FAMILY.Enum(),
- })
- }
-
- for qual := range d.FamilyQuals[family] {
- v := &proto.MutationProto_ColumnValue_QualifierValue{
- Qualifier: []byte(qual),
- Timestamp: pb.Uint64(uint64(math.MaxInt64)),
- DeleteType: proto.MutationProto_DELETE_MULTIPLE_VERSIONS.Enum(),
- }
- tsKey := string(family) + ":" + string(qual)
- if ts, ok := d.Ts[tsKey]; ok {
- v.Timestamp = pb.Uint64(ts)
- v.DeleteType = proto.MutationProto_DELETE_ONE_VERSION.Enum()
- }
- cv.QualifierValue = append(cv.QualifierValue, v)
- }
-
- del.ColumnValue = append(del.ColumnValue, cv)
- }
-
- return del
- }
|