93 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package hbase
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"math"
 | |
| 
 | |
| 	pb "github.com/golang/protobuf/proto"
 | |
| 	"github.com/pingcap/go-hbase/proto"
 | |
| )
 | |
| 
 | |
| type Put struct {
 | |
| 	Row        []byte
 | |
| 	Families   [][]byte
 | |
| 	Qualifiers [][][]byte
 | |
| 	Values     [][][]byte
 | |
| 	Timestamp  uint64
 | |
| }
 | |
| 
 | |
| func NewPut(row []byte) *Put {
 | |
| 	return &Put{
 | |
| 		Row:        row,
 | |
| 		Families:   make([][]byte, 0),
 | |
| 		Qualifiers: make([][][]byte, 0),
 | |
| 		Values:     make([][][]byte, 0),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (p *Put) GetRow() []byte {
 | |
| 	return p.Row
 | |
| }
 | |
| 
 | |
| func (p *Put) AddValue(family, qual, value []byte) *Put {
 | |
| 	pos := p.posOfFamily(family)
 | |
| 	if pos == -1 {
 | |
| 		p.Families = append(p.Families, family)
 | |
| 		p.Qualifiers = append(p.Qualifiers, make([][]byte, 0))
 | |
| 		p.Values = append(p.Values, make([][]byte, 0))
 | |
| 
 | |
| 		pos = p.posOfFamily(family)
 | |
| 	}
 | |
| 
 | |
| 	p.Qualifiers[pos] = append(p.Qualifiers[pos], qual)
 | |
| 	p.Values[pos] = append(p.Values[pos], value)
 | |
| 	return p
 | |
| }
 | |
| 
 | |
| func (p *Put) AddStringValue(family, column, value string) *Put {
 | |
| 	return p.AddValue([]byte(family), []byte(column), []byte(value))
 | |
| }
 | |
| 
 | |
| func (p *Put) AddTimestamp(ts uint64) *Put {
 | |
| 	if ts == 0 {
 | |
| 		p.Timestamp = math.MaxInt64
 | |
| 	} else {
 | |
| 		p.Timestamp = ts
 | |
| 	}
 | |
| 	return p
 | |
| }
 | |
| 
 | |
| func (p *Put) posOfFamily(family []byte) int {
 | |
| 	for p, v := range p.Families {
 | |
| 		if bytes.Equal(family, v) {
 | |
| 			return p
 | |
| 		}
 | |
| 	}
 | |
| 	return -1
 | |
| }
 | |
| 
 | |
| func (p *Put) ToProto() pb.Message {
 | |
| 	put := &proto.MutationProto{
 | |
| 		Row:        p.Row,
 | |
| 		MutateType: proto.MutationProto_PUT.Enum(),
 | |
| 	}
 | |
| 
 | |
| 	for i, family := range p.Families {
 | |
| 		cv := &proto.MutationProto_ColumnValue{
 | |
| 			Family: family,
 | |
| 		}
 | |
| 
 | |
| 		for j := range p.Qualifiers[i] {
 | |
| 			cv.QualifierValue = append(cv.QualifierValue, &proto.MutationProto_ColumnValue_QualifierValue{
 | |
| 				Qualifier: p.Qualifiers[i][j],
 | |
| 				Value:     p.Values[i][j],
 | |
| 				Timestamp: pb.Uint64(p.Timestamp),
 | |
| 			})
 | |
| 		}
 | |
| 
 | |
| 		put.ColumnValue = append(put.ColumnValue, cv)
 | |
| 	}
 | |
| 
 | |
| 	return put
 | |
| }
 |