terraform/vendor/github.com/aliyun/aliyun-tablestore-go-sdk/tablestore/search/search_query.go

102 lines
2.0 KiB
Go

package search
import (
"github.com/aliyun/aliyun-tablestore-go-sdk/tablestore/otsprotocol"
"github.com/golang/protobuf/proto"
)
type SearchQuery interface {
Serialize() ([]byte, error)
}
type searchQuery struct {
Offset int32
Limit int32
Query Query
Collapse *Collapse
Sort *Sort
GetTotalCount bool
Token []byte
}
func NewSearchQuery() *searchQuery {
return &searchQuery{
Offset: -1,
Limit: -1,
GetTotalCount: false,
}
}
func (s *searchQuery) SetOffset(offset int32) *searchQuery {
s.Offset = offset
return s
}
func (s *searchQuery) SetLimit(limit int32) *searchQuery {
s.Limit = limit
return s
}
func (s *searchQuery) SetQuery(query Query) *searchQuery {
s.Query = query
return s
}
func (s *searchQuery) SetCollapse(collapse *Collapse) *searchQuery {
s.Collapse = collapse
return s
}
func (s *searchQuery) SetSort(sort *Sort) *searchQuery {
s.Sort = sort
return s
}
func (s *searchQuery) SetGetTotalCount(getTotalCount bool) *searchQuery {
s.GetTotalCount = getTotalCount
return s
}
func (s *searchQuery) SetToken(token []byte) *searchQuery {
s.Token = token
s.Sort = nil
return s
}
func (s *searchQuery) Serialize() ([]byte, error) {
search_query := &otsprotocol.SearchQuery{}
if s.Offset >= 0 {
search_query.Offset = &s.Offset
}
if s.Limit >= 0 {
search_query.Limit = &s.Limit
}
if s.Query != nil {
pbQuery, err := s.Query.ProtoBuffer()
if err != nil {
return nil, err
}
search_query.Query = pbQuery
}
if s.Collapse != nil {
pbCollapse, err := s.Collapse.ProtoBuffer()
if err != nil {
return nil, err
}
search_query.Collapse = pbCollapse
}
if s.Sort != nil {
pbSort, err := s.Sort.ProtoBuffer()
if err != nil {
return nil, err
}
search_query.Sort = pbSort
}
search_query.GetTotalCount = &s.GetTotalCount
if s.Token != nil && len(s.Token) > 0 {
search_query.Token = s.Token
}
data, err := proto.Marshal(search_query)
return data, err
}