You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
2.7 KiB

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
}