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
|
||
|
}
|