114 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
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
 | 
						|
}
 |