github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/go-hbase/put.go (about)

     1  package hbase
     2  
     3  import (
     4  	"bytes"
     5  	"math"
     6  
     7  	pb "github.com/insionng/yougam/libraries/golang/protobuf/proto"
     8  	"github.com/insionng/yougam/libraries/pingcap/go-hbase/proto"
     9  )
    10  
    11  type Put struct {
    12  	Row        []byte
    13  	Families   [][]byte
    14  	Qualifiers [][][]byte
    15  	Values     [][][]byte
    16  	Timestamp  uint64
    17  }
    18  
    19  func NewPut(row []byte) *Put {
    20  	return &Put{
    21  		Row:        row,
    22  		Families:   make([][]byte, 0),
    23  		Qualifiers: make([][][]byte, 0),
    24  		Values:     make([][][]byte, 0),
    25  	}
    26  }
    27  
    28  func (p *Put) GetRow() []byte {
    29  	return p.Row
    30  }
    31  
    32  func (p *Put) AddValue(family, qual, value []byte) *Put {
    33  	pos := p.posOfFamily(family)
    34  	if pos == -1 {
    35  		p.Families = append(p.Families, family)
    36  		p.Qualifiers = append(p.Qualifiers, make([][]byte, 0))
    37  		p.Values = append(p.Values, make([][]byte, 0))
    38  
    39  		pos = p.posOfFamily(family)
    40  	}
    41  
    42  	p.Qualifiers[pos] = append(p.Qualifiers[pos], qual)
    43  	p.Values[pos] = append(p.Values[pos], value)
    44  	return p
    45  }
    46  
    47  func (p *Put) AddStringValue(family, column, value string) *Put {
    48  	return p.AddValue([]byte(family), []byte(column), []byte(value))
    49  }
    50  
    51  func (p *Put) AddTimestamp(ts uint64) *Put {
    52  	if ts == 0 {
    53  		p.Timestamp = math.MaxInt64
    54  	} else {
    55  		p.Timestamp = ts
    56  	}
    57  	return p
    58  }
    59  
    60  func (p *Put) posOfFamily(family []byte) int {
    61  	for p, v := range p.Families {
    62  		if bytes.Equal(family, v) {
    63  			return p
    64  		}
    65  	}
    66  	return -1
    67  }
    68  
    69  func (p *Put) ToProto() pb.Message {
    70  	put := &proto.MutationProto{
    71  		Row:        p.Row,
    72  		MutateType: proto.MutationProto_PUT.Enum(),
    73  	}
    74  
    75  	for i, family := range p.Families {
    76  		cv := &proto.MutationProto_ColumnValue{
    77  			Family: family,
    78  		}
    79  
    80  		for j := range p.Qualifiers[i] {
    81  			cv.QualifierValue = append(cv.QualifierValue, &proto.MutationProto_ColumnValue_QualifierValue{
    82  				Qualifier: p.Qualifiers[i][j],
    83  				Value:     p.Values[i][j],
    84  				Timestamp: pb.Uint64(p.Timestamp),
    85  			})
    86  		}
    87  
    88  		put.ColumnValue = append(put.ColumnValue, cv)
    89  	}
    90  
    91  	return put
    92  }