Merge pull request #52 from molecula/import-col-attrs

Import col attrs
This commit is contained in:
Matthew Jaffee 2019-12-02 01:25:08 -06:00 committed by GitHub
commit 521ea603d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 885 additions and 85 deletions

29
api.go
View file

@ -1121,7 +1121,7 @@ func (api *API) ImportValue(ctx context.Context, req *ImportValueRequest, opts .
}
}
return errors.Wrap(err, "importing")
return errors.Wrap(err, "importing value")
}
options.IgnoreKeyCheck = true
@ -1170,6 +1170,33 @@ func (api *API) ImportValue(ctx context.Context, req *ImportValueRequest, opts .
}
func (api *API) ImportColumnAttrs(ctx context.Context, req *ImportColumnAttrsRequest, opts ...ImportOption) error {
span, _ := tracing.StartSpanFromContext(ctx, "API.ImportColumnAttrs")
defer span.Finish()
index, err := api.Index(ctx, req.Index)
if err != nil {
return errors.Wrap(err, "getting index")
}
if err := api.validateShardOwnership(req.Index, uint64(req.Shard)); err != nil {
return errors.Wrap(err, "validating shard ownership")
}
bulkAttrs := make(map[uint64]map[string]interface{})
for n := 0; n < len(req.ColumnIDs); n++ {
bulkAttrs[uint64(req.ColumnIDs[n])] = map[string]interface{}{req.AttrKey: req.AttrVals[n]}
}
if err := index.ColumnAttrStore().SetBulkAttrs(bulkAttrs); err != nil {
return err
}
if err != nil {
api.server.logger.Printf("import error: index=%s, shard=%d, len(columns)=%d, err=%s", req.Index, req.Shard, len(req.ColumnIDs), err)
}
return errors.Wrap(err, "importing column attrs")
}
func importExistenceColumns(index *Index, columnIDs []uint64) error {
ef := index.existenceField()
if ef == nil {

View file

@ -19,6 +19,7 @@ import (
"fmt"
"math"
"reflect"
"strconv"
"strings"
"testing"
"time"
@ -30,6 +31,137 @@ import (
"github.com/pilosa/pilosa/v2/test"
)
// attrFun defines a mapping from columnID -> attr value
func attrFun(id uint64) string {
//return fmt.Sprintf("%x", md5.Sum([]byte(strconv.FormatInt(int64(id), 10))))
return strconv.FormatInt(int64(id), 10)
}
func TestAPI_ImportColumnAttrs(t *testing.T) {
/*
columns seconds
100 1.150
1000 1.568
10000 5.156
100000 38.179
*/
c := test.MustRunCluster(t, 2,
[]server.CommandOption{
server.OptCommandServerOptions(
pilosa.OptServerNodeID("node0"),
pilosa.OptServerClusterHasher(&offsetModHasher{}),
)},
[]server.CommandOption{
server.OptCommandServerOptions(
pilosa.OptServerNodeID("node1"),
pilosa.OptServerClusterHasher(&offsetModHasher{}),
)},
)
defer c.Close()
m0 := c[0]
m1 := c[1]
t.Run("ImportColumnAttrs", func(t *testing.T) {
ctx := context.Background()
index := "i"
field := "f"
attrKey := "k"
_, err := m0.API.CreateIndex(ctx, index, pilosa.IndexOptions{})
if err != nil {
t.Fatalf("creating index: %v", err)
}
_, err = m0.API.CreateField(ctx, index, field)
if err != nil {
t.Fatalf("creating field: %v", err)
}
// Generate some attrs for two shards
numAttrs := 100
columnIDs0 := make([]uint64, 0, numAttrs)
attrVals0 := make([]string, 0, numAttrs)
columnIDs1 := make([]uint64, 0, numAttrs)
attrVals1 := make([]string, 0, numAttrs)
for n := 0; n < 1000000; n += 1000000 / numAttrs {
columnIDs0 = append(columnIDs0, uint64(n))
val0 := attrFun(uint64(n))
attrVals0 = append(attrVals0, val0)
setPql0 := fmt.Sprintf("Set(%d, %s=0) ", n, field)
if _, err := m0.API.Query(ctx, &pilosa.QueryRequest{Index: index, Query: setPql0}); err != nil {
t.Fatal(err)
}
columnIDs1 = append(columnIDs1, uint64(n+ShardWidth))
val1 := attrFun(uint64(n + ShardWidth))
attrVals1 = append(attrVals1, val1)
setPql1 := fmt.Sprintf("Set(%d, %s=0) ", n+ShardWidth, field)
if _, err := m1.API.Query(ctx, &pilosa.QueryRequest{Index: index, Query: setPql1}); err != nil {
t.Fatal(err)
}
}
// send shard0 to node1
req := &pilosa.ImportColumnAttrsRequest{
AttrKey: attrKey,
ColumnIDs: columnIDs0,
AttrVals: attrVals0,
Shard: 0,
Index: index,
}
if err := m1.API.ImportColumnAttrs(ctx, req); err != nil {
t.Fatal(err)
}
// send shard1 to node0
req = &pilosa.ImportColumnAttrsRequest{
AttrKey: attrKey,
ColumnIDs: columnIDs1,
AttrVals: attrVals1,
Shard: 1,
Index: index,
}
if err := m0.API.ImportColumnAttrs(ctx, req); err != nil {
t.Fatal(err)
}
// Query node0.
pql := fmt.Sprintf("Options(Row(%s=0), columnAttrs=true)", field)
res, err := m0.API.Query(ctx, &pilosa.QueryRequest{Index: index, Query: pql})
if err != nil {
t.Fatal(err)
}
if len(res.ColumnAttrSets) != 100 {
t.Fatal("incorrect number of column attrs set")
}
for _, v := range res.ColumnAttrSets {
attrVal := attrFun(v.ID)
if attrVal != v.Attrs[attrKey] {
t.Fatal(err)
}
}
// Query node1.
pql = fmt.Sprintf("Options(Row(%s=0), columnAttrs=true)", field)
res, err = m1.API.Query(ctx, &pilosa.QueryRequest{Index: index, Query: pql})
if err != nil {
t.Fatal(err)
}
if len(res.ColumnAttrSets) != 100 {
t.Fatal("incorrect number of column attrs set")
}
for _, v := range res.ColumnAttrSets {
attrVal := attrFun(v.ID)
if attrVal != v.Attrs[attrKey] {
t.Fatal(err)
}
}
})
}
func TestAPI_Import(t *testing.T) {
c := test.MustRunCluster(t, 2,
[]server.CommandOption{

View file

@ -70,6 +70,7 @@ type InternalClient interface {
SendMessage(ctx context.Context, uri *URI, msg []byte) error
RetrieveShardFromURI(ctx context.Context, index, field, view string, shard uint64, uri URI) (io.ReadCloser, error)
ImportRoaring(ctx context.Context, uri *URI, index, field string, shard uint64, remote bool, req *ImportRoaringRequest) error
ImportColumnAttrs(ctx context.Context, uri *URI, index string, req *ImportColumnAttrsRequest) error
}
//===============
@ -137,6 +138,11 @@ func (n nopInternalClient) ImportValue2(ctx context.Context, req *ImportValueReq
func (n nopInternalClient) ImportRoaring(ctx context.Context, uri *URI, index, field string, shard uint64, remote bool, req *ImportRoaringRequest) error {
return nil
}
func (n nopInternalClient) ImportColumnAttrs(ctx context.Context, uri *URI, index string, req *ImportColumnAttrsRequest) error {
return nil
}
func (n nopInternalClient) EnsureIndex(ctx context.Context, name string, options IndexOptions) error {
return nil
}

View file

@ -225,6 +225,14 @@ func (Serializer) Unmarshal(buf []byte, m pilosa.Message) error {
}
decodeImportRoaringRequest(msg, mt)
return nil
case *pilosa.ImportColumnAttrsRequest:
msg := &internal.ImportColumnAttrsRequest{}
err := proto.Unmarshal(buf, msg)
if err != nil {
return errors.Wrap(err, "unmarshaling ImportColumnAttrsRequest")
}
decodeImportColumnAttrsRequest(msg, mt)
return nil
case *pilosa.ImportResponse:
msg := &internal.ImportResponse{}
err := proto.Unmarshal(buf, msg)
@ -318,6 +326,8 @@ func encodeToProto(m pilosa.Message) proto.Message {
return encodeImportValueRequest(mt)
case *pilosa.ImportRoaringRequest:
return encodeImportRoaringRequest(mt)
case *pilosa.ImportColumnAttrsRequest:
return encodeImportColumnAttrsRequest(mt)
case *pilosa.ImportResponse:
return encodeImportResponse(mt)
case *pilosa.BlockDataRequest:
@ -395,6 +405,16 @@ func encodeImportRoaringRequest(m *pilosa.ImportRoaringRequest) *internal.Import
}
}
func encodeImportColumnAttrsRequest(m *pilosa.ImportColumnAttrsRequest) *internal.ImportColumnAttrsRequest {
return &internal.ImportColumnAttrsRequest{
Index: m.Index,
Shard: m.Shard,
AttrKey: m.AttrKey,
AttrVals: m.AttrVals,
ColumnIDs: m.ColumnIDs,
}
}
func encodeQueryRequest(m *pilosa.QueryRequest) *internal.QueryRequest {
r := &internal.QueryRequest{
Query: m.Query,
@ -1010,6 +1030,14 @@ func decodeImportRoaringRequest(pb *internal.ImportRoaringRequest, m *pilosa.Imp
m.Views = views
}
func decodeImportColumnAttrsRequest(pb *internal.ImportColumnAttrsRequest, m *pilosa.ImportColumnAttrsRequest) {
m.Index = pb.Index
m.Shard = pb.Shard
m.AttrKey = pb.AttrKey
m.AttrVals = pb.AttrVals
m.ColumnIDs = pb.ColumnIDs
}
func decodeImportResponse(pb *internal.ImportResponse, m *pilosa.ImportResponse) {
m.Err = pb.Err
}

View file

@ -147,6 +147,16 @@ func (i *ImportValueRequest) Validate() error {
return nil
}
// ImportColumnAttrsRequest describes the import request structure
// for a ColumnAttr import
type ImportColumnAttrsRequest struct {
AttrKey string
ColumnIDs []uint64
AttrVals []string
Shard int64
Index string
}
// ImportRequest describes the import request structure
// for an import.
type ImportRequest struct {

View file

@ -696,6 +696,56 @@ func (c *InternalClient) ImportRoaring(ctx context.Context, uri *pilosa.URI, ind
return nil
}
// ImportColumnAttrs does bulk import of column attrs
func (c *InternalClient) ImportColumnAttrs(ctx context.Context, uri *pilosa.URI, index string, req *pilosa.ImportColumnAttrsRequest) error {
span, ctx := tracing.StartSpanFromContext(ctx, "InternalClient.ImportRoaring")
defer span.Finish()
if index == "" {
return pilosa.ErrIndexRequired
}
if uri == nil {
uri = c.defaultURI
}
url := fmt.Sprintf("%s/index/%s/import-column-attrs", uri, index)
// Marshal data to protobuf.
data, err := c.serializer.Marshal(req)
if err != nil {
return errors.Wrap(err, "marshal import-column-attrs request")
}
// Generate HTTP request.
httpReq, err := http.NewRequest("POST", url, bytes.NewBuffer(data))
if err != nil {
return errors.Wrap(err, "creating request")
}
httpReq.Header.Set("Content-Type", "application/x-protobuf")
httpReq.Header.Set("Accept", "application/x-protobuf")
httpReq.Header.Set("User-Agent", "pilosa/"+pilosa.Version)
// Execute request against the host.
resp, err := c.executeRequest(httpReq.WithContext(ctx))
if err != nil {
return err
}
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
rbody := &pilosa.ImportResponse{}
err = dec.Decode(rbody)
// Decode can return EOF when no error occurred. helpful!
if err != nil && err != io.EOF {
return errors.Wrap(err, "decoding response body")
}
if rbody.Err != "" {
return errors.Wrap(errors.New(rbody.Err), "importing roaring")
}
return nil
}
// ExportCSV bulk exports data for a single shard from a host to CSV format.
func (c *InternalClient) ExportCSV(ctx context.Context, index, field string, shard uint64, w io.Writer) error {
span, ctx := tracing.StartSpanFromContext(ctx, "InternalClient.ExportCSV")

View file

@ -22,6 +22,7 @@ import (
"fmt"
gohttp "net/http"
"reflect"
"strconv"
"testing"
"time"
@ -394,6 +395,60 @@ func TestClient_Import(t *testing.T) {
}
}
// Ensure client can bulk import column attrs.
func TestClient_ImportColumnAttrs(t *testing.T) {
cluster := test.MustNewCluster(t, 2)
for _, c := range cluster {
c.Config.Cluster.ReplicaN = 2
}
err := cluster.Start()
if err != nil {
t.Fatalf("starting cluster: %v", err)
}
defer cluster.Close()
ctx := context.Background()
_, err = cluster[0].API.CreateIndex(ctx, "i", pilosa.IndexOptions{})
if err != nil {
t.Fatalf("creating index: %v", err)
}
_, err = cluster[0].API.CreateField(ctx, "i", "f", pilosa.OptFieldTypeSet(pilosa.CacheTypeRanked, 100))
if err != nil {
t.Fatalf("creating field: %v", err)
}
_, err = cluster[0].API.Query(ctx, &pilosa.QueryRequest{Index: "i", Query: "Set(0, f=0) Set(1, f=0) Set(2, f=0) Set(3, f=0) Set(4, f=0)"})
if err != nil {
t.Fatalf("querying: %v", err)
}
attrKey := "k"
// Send import request.
host := cluster[0].URL()
c := MustNewClient(host, http.GetHTTPClient(nil))
colAttrsReq := makeImportColumnAttrsRequest("i", 0, attrKey)
if err := c.ImportColumnAttrs(ctx, &cluster[1].API.Node().URI, "i", colAttrsReq); err != nil {
t.Fatal(err)
}
// Verify data.
pql := "Options(Row(f=0), columnAttrs=true)"
res, err := cluster[1].API.Query(ctx, &pilosa.QueryRequest{Index: "i", Query: pql})
if err != nil {
t.Fatal(err)
}
if len(res.ColumnAttrSets) != 5 {
t.Fatal("incorrect number of column attrs set")
}
for _, v := range res.ColumnAttrSets {
attrVal := attrFun(v.ID)
if attrVal != v.Attrs[attrKey] {
t.Fatal(err)
}
}
}
// Ensure client can bulk import data.
func TestClient_ImportRoaring(t *testing.T) {
cluster := test.MustNewCluster(t, 2)
@ -1195,3 +1250,23 @@ func makeImportRoaringRequest(clear bool, viewData string) *pilosa.ImportRoaring
},
}
}
func attrFun(id uint64) string {
return strconv.FormatInt(int64(id), 10)
}
func makeImportColumnAttrsRequest(index string, shard int64, attrKey string) *pilosa.ImportColumnAttrsRequest {
colIDs := make([]uint64, 0, 5)
attrVals := make([]string, 0, 5)
for n := uint64(0); n < 5; n++ {
colIDs = append(colIDs, n)
attrVals = append(attrVals, attrFun(n))
}
return &pilosa.ImportColumnAttrsRequest{
Index: index,
Shard: shard,
AttrKey: attrKey,
ColumnIDs: colIDs,
AttrVals: attrVals,
}
}

View file

@ -286,6 +286,7 @@ func newRouter(handler *Handler) *mux.Router {
router.HandleFunc("/index/{index}", handler.handlePostIndex).Methods("POST").Name("PostIndex")
router.HandleFunc("/index/{index}", handler.handleDeleteIndex).Methods("DELETE").Name("DeleteIndex")
//router.HandleFunc("/index/{index}/field", handler.handleGetFields).Methods("GET") // Not implemented.
router.HandleFunc("/index/{index}/import-column-attrs", handler.handlePostImportColumnAttrs).Methods("POST").Name("PostImportColumnAttrs")
router.HandleFunc("/index/{index}/field/{field}", handler.handlePostField).Methods("POST").Name("PostField")
router.HandleFunc("/index/{index}/field/{field}", handler.handleDeleteField).Methods("DELETE").Name("DeleteField")
router.HandleFunc("/index/{index}/field/{field}/import", handler.handlePostImport).Methods("POST").Name("PostImport")
@ -1621,6 +1622,50 @@ func GetHTTPClient(t *tls.Config) *http.Client {
return &http.Client{Transport: transport}
}
// handlePostImportColumnAttrs
func (h *Handler) handlePostImportColumnAttrs(w http.ResponseWriter, r *http.Request) {
// Verify that request is only communicating over protobufs.
if r.Header.Get("Content-Type") != "application/x-protobuf" {
http.Error(w, "Unsupported media type", http.StatusUnsupportedMediaType)
return
} else if r.Header.Get("Accept") != "application/x-protobuf" {
http.Error(w, "Not acceptable", http.StatusNotAcceptable)
return
}
opts := []pilosa.ImportOption{}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
req := &pilosa.ImportColumnAttrsRequest{}
if err := h.api.Serializer.Unmarshal(body, req); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
if err := h.api.ImportColumnAttrs(r.Context(), req, opts...); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Marshal response object.
buf, e := h.api.Serializer.Marshal(&pilosa.ImportResponse{Err: ""})
if e != nil {
http.Error(w, fmt.Sprintf("marshal import-column-attrs response"), http.StatusInternalServerError)
return
}
// Write response.
_, err = w.Write(buf)
if err != nil {
h.logger.Printf("writing import-column-attrs response: %v", err)
}
}
// handlPostRoaringImport
func (h *Handler) handlePostImportRoaring(w http.ResponseWriter, r *http.Request) {
// Verify that request is only communicating over protobufs.
@ -1685,7 +1730,7 @@ func (h *Handler) handlePostImportRoaring(w http.ResponseWriter, r *http.Request
// Marshal response object.
buf, err := h.api.Serializer.Marshal(resp)
if err != nil {
http.Error(w, fmt.Sprintf("marshal import response: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("marshal import-roaring response: %v", err), http.StatusInternalServerError)
return
}

View file

@ -36,7 +36,7 @@ func (m *Row) Reset() { *m = Row{} }
func (m *Row) String() string { return proto.CompactTextString(m) }
func (*Row) ProtoMessage() {}
func (*Row) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{0}
return fileDescriptor_public_568b1fcbeadcdcca, []int{0}
}
func (m *Row) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -105,7 +105,7 @@ func (m *SignedRow) Reset() { *m = SignedRow{} }
func (m *SignedRow) String() string { return proto.CompactTextString(m) }
func (*SignedRow) ProtoMessage() {}
func (*SignedRow) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{1}
return fileDescriptor_public_568b1fcbeadcdcca, []int{1}
}
func (m *SignedRow) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -160,7 +160,7 @@ func (m *RowIdentifiers) Reset() { *m = RowIdentifiers{} }
func (m *RowIdentifiers) String() string { return proto.CompactTextString(m) }
func (*RowIdentifiers) ProtoMessage() {}
func (*RowIdentifiers) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{2}
return fileDescriptor_public_568b1fcbeadcdcca, []int{2}
}
func (m *RowIdentifiers) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -216,7 +216,7 @@ func (m *Pair) Reset() { *m = Pair{} }
func (m *Pair) String() string { return proto.CompactTextString(m) }
func (*Pair) ProtoMessage() {}
func (*Pair) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{3}
return fileDescriptor_public_568b1fcbeadcdcca, []int{3}
}
func (m *Pair) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -279,7 +279,7 @@ func (m *FieldRow) Reset() { *m = FieldRow{} }
func (m *FieldRow) String() string { return proto.CompactTextString(m) }
func (*FieldRow) ProtoMessage() {}
func (*FieldRow) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{4}
return fileDescriptor_public_568b1fcbeadcdcca, []int{4}
}
func (m *FieldRow) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -342,7 +342,7 @@ func (m *GroupCount) Reset() { *m = GroupCount{} }
func (m *GroupCount) String() string { return proto.CompactTextString(m) }
func (*GroupCount) ProtoMessage() {}
func (*GroupCount) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{5}
return fileDescriptor_public_568b1fcbeadcdcca, []int{5}
}
func (m *GroupCount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -404,7 +404,7 @@ func (m *ValCount) Reset() { *m = ValCount{} }
func (m *ValCount) String() string { return proto.CompactTextString(m) }
func (*ValCount) ProtoMessage() {}
func (*ValCount) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{6}
return fileDescriptor_public_568b1fcbeadcdcca, []int{6}
}
func (m *ValCount) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -460,7 +460,7 @@ func (m *ColumnAttrSet) Reset() { *m = ColumnAttrSet{} }
func (m *ColumnAttrSet) String() string { return proto.CompactTextString(m) }
func (*ColumnAttrSet) ProtoMessage() {}
func (*ColumnAttrSet) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{7}
return fileDescriptor_public_568b1fcbeadcdcca, []int{7}
}
func (m *ColumnAttrSet) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -526,7 +526,7 @@ func (m *Attr) Reset() { *m = Attr{} }
func (m *Attr) String() string { return proto.CompactTextString(m) }
func (*Attr) ProtoMessage() {}
func (*Attr) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{8}
return fileDescriptor_public_568b1fcbeadcdcca, []int{8}
}
func (m *Attr) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -608,7 +608,7 @@ func (m *AttrMap) Reset() { *m = AttrMap{} }
func (m *AttrMap) String() string { return proto.CompactTextString(m) }
func (*AttrMap) ProtoMessage() {}
func (*AttrMap) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{9}
return fileDescriptor_public_568b1fcbeadcdcca, []int{9}
}
func (m *AttrMap) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -661,7 +661,7 @@ func (m *QueryRequest) Reset() { *m = QueryRequest{} }
func (m *QueryRequest) String() string { return proto.CompactTextString(m) }
func (*QueryRequest) ProtoMessage() {}
func (*QueryRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{10}
return fileDescriptor_public_568b1fcbeadcdcca, []int{10}
}
func (m *QueryRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -752,7 +752,7 @@ func (m *QueryResponse) Reset() { *m = QueryResponse{} }
func (m *QueryResponse) String() string { return proto.CompactTextString(m) }
func (*QueryResponse) ProtoMessage() {}
func (*QueryResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{11}
return fileDescriptor_public_568b1fcbeadcdcca, []int{11}
}
func (m *QueryResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -822,7 +822,7 @@ func (m *QueryResult) Reset() { *m = QueryResult{} }
func (m *QueryResult) String() string { return proto.CompactTextString(m) }
func (*QueryResult) ProtoMessage() {}
func (*QueryResult) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{12}
return fileDescriptor_public_568b1fcbeadcdcca, []int{12}
}
func (m *QueryResult) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -939,7 +939,7 @@ func (m *ImportRequest) Reset() { *m = ImportRequest{} }
func (m *ImportRequest) String() string { return proto.CompactTextString(m) }
func (*ImportRequest) ProtoMessage() {}
func (*ImportRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{13}
return fileDescriptor_public_568b1fcbeadcdcca, []int{13}
}
func (m *ImportRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1041,7 +1041,7 @@ func (m *ImportValueRequest) Reset() { *m = ImportValueRequest{} }
func (m *ImportValueRequest) String() string { return proto.CompactTextString(m) }
func (*ImportValueRequest) ProtoMessage() {}
func (*ImportValueRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{14}
return fileDescriptor_public_568b1fcbeadcdcca, []int{14}
}
func (m *ImportValueRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1132,7 +1132,7 @@ func (m *TranslateKeysRequest) Reset() { *m = TranslateKeysRequest{} }
func (m *TranslateKeysRequest) String() string { return proto.CompactTextString(m) }
func (*TranslateKeysRequest) ProtoMessage() {}
func (*TranslateKeysRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{15}
return fileDescriptor_public_568b1fcbeadcdcca, []int{15}
}
func (m *TranslateKeysRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1193,7 +1193,7 @@ func (m *TranslateKeysResponse) Reset() { *m = TranslateKeysResponse{} }
func (m *TranslateKeysResponse) String() string { return proto.CompactTextString(m) }
func (*TranslateKeysResponse) ProtoMessage() {}
func (*TranslateKeysResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{16}
return fileDescriptor_public_568b1fcbeadcdcca, []int{16}
}
func (m *TranslateKeysResponse) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1241,7 +1241,7 @@ func (m *ImportRoaringRequestView) Reset() { *m = ImportRoaringRequestVi
func (m *ImportRoaringRequestView) String() string { return proto.CompactTextString(m) }
func (*ImportRoaringRequestView) ProtoMessage() {}
func (*ImportRoaringRequestView) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{17}
return fileDescriptor_public_568b1fcbeadcdcca, []int{17}
}
func (m *ImportRoaringRequestView) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1296,7 +1296,7 @@ func (m *ImportRoaringRequest) Reset() { *m = ImportRoaringRequest{} }
func (m *ImportRoaringRequest) String() string { return proto.CompactTextString(m) }
func (*ImportRoaringRequest) ProtoMessage() {}
func (*ImportRoaringRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_d14551a4203088d5, []int{18}
return fileDescriptor_public_568b1fcbeadcdcca, []int{18}
}
func (m *ImportRoaringRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
@ -1339,6 +1339,85 @@ func (m *ImportRoaringRequest) GetViews() []*ImportRoaringRequestView {
return nil
}
type ImportColumnAttrsRequest struct {
Index string `protobuf:"bytes,1,opt,name=Index,proto3" json:"Index,omitempty"`
Shard int64 `protobuf:"varint,2,opt,name=Shard,proto3" json:"Shard,omitempty"`
AttrKey string `protobuf:"bytes,3,opt,name=AttrKey,proto3" json:"AttrKey,omitempty"`
AttrVals []string `protobuf:"bytes,4,rep,name=AttrVals" json:"AttrVals,omitempty"`
ColumnIDs []uint64 `protobuf:"varint,5,rep,packed,name=ColumnIDs" json:"ColumnIDs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ImportColumnAttrsRequest) Reset() { *m = ImportColumnAttrsRequest{} }
func (m *ImportColumnAttrsRequest) String() string { return proto.CompactTextString(m) }
func (*ImportColumnAttrsRequest) ProtoMessage() {}
func (*ImportColumnAttrsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_public_568b1fcbeadcdcca, []int{19}
}
func (m *ImportColumnAttrsRequest) XXX_Unmarshal(b []byte) error {
return m.Unmarshal(b)
}
func (m *ImportColumnAttrsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
if deterministic {
return xxx_messageInfo_ImportColumnAttrsRequest.Marshal(b, m, deterministic)
} else {
b = b[:cap(b)]
n, err := m.MarshalTo(b)
if err != nil {
return nil, err
}
return b[:n], nil
}
}
func (dst *ImportColumnAttrsRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ImportColumnAttrsRequest.Merge(dst, src)
}
func (m *ImportColumnAttrsRequest) XXX_Size() int {
return m.Size()
}
func (m *ImportColumnAttrsRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ImportColumnAttrsRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ImportColumnAttrsRequest proto.InternalMessageInfo
func (m *ImportColumnAttrsRequest) GetIndex() string {
if m != nil {
return m.Index
}
return ""
}
func (m *ImportColumnAttrsRequest) GetShard() int64 {
if m != nil {
return m.Shard
}
return 0
}
func (m *ImportColumnAttrsRequest) GetAttrKey() string {
if m != nil {
return m.AttrKey
}
return ""
}
func (m *ImportColumnAttrsRequest) GetAttrVals() []string {
if m != nil {
return m.AttrVals
}
return nil
}
func (m *ImportColumnAttrsRequest) GetColumnIDs() []uint64 {
if m != nil {
return m.ColumnIDs
}
return nil
}
func init() {
proto.RegisterType((*Row)(nil), "internal.Row")
proto.RegisterType((*SignedRow)(nil), "internal.SignedRow")
@ -1359,6 +1438,7 @@ func init() {
proto.RegisterType((*TranslateKeysResponse)(nil), "internal.TranslateKeysResponse")
proto.RegisterType((*ImportRoaringRequestView)(nil), "internal.ImportRoaringRequestView")
proto.RegisterType((*ImportRoaringRequest)(nil), "internal.ImportRoaringRequest")
proto.RegisterType((*ImportColumnAttrsRequest)(nil), "internal.ImportColumnAttrsRequest")
}
func (m *Row) Marshal() (dAtA []byte, err error) {
size := m.Size()
@ -2459,6 +2539,76 @@ func (m *ImportRoaringRequest) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
func (m *ImportColumnAttrsRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *ImportColumnAttrsRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.Index) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintPublic(dAtA, i, uint64(len(m.Index)))
i += copy(dAtA[i:], m.Index)
}
if m.Shard != 0 {
dAtA[i] = 0x10
i++
i = encodeVarintPublic(dAtA, i, uint64(m.Shard))
}
if len(m.AttrKey) > 0 {
dAtA[i] = 0x1a
i++
i = encodeVarintPublic(dAtA, i, uint64(len(m.AttrKey)))
i += copy(dAtA[i:], m.AttrKey)
}
if len(m.AttrVals) > 0 {
for _, s := range m.AttrVals {
dAtA[i] = 0x22
i++
l = len(s)
for l >= 1<<7 {
dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
l >>= 7
i++
}
dAtA[i] = uint8(l)
i++
i += copy(dAtA[i:], s)
}
}
if len(m.ColumnIDs) > 0 {
dAtA29 := make([]byte, len(m.ColumnIDs)*10)
var j28 int
for _, num := range m.ColumnIDs {
for num >= 1<<7 {
dAtA29[j28] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j28++
}
dAtA29[j28] = uint8(num)
j28++
}
dAtA[i] = 0x2a
i++
i = encodeVarintPublic(dAtA, i, uint64(j28))
i += copy(dAtA[i:], dAtA29[:j28])
}
if m.XXX_unrecognized != nil {
i += copy(dAtA[i:], m.XXX_unrecognized)
}
return i, nil
}
func encodeVarintPublic(dAtA []byte, offset int, v uint64) int {
for v >= 1<<7 {
dAtA[offset] = uint8(v&0x7f | 0x80)
@ -3023,6 +3173,42 @@ func (m *ImportRoaringRequest) Size() (n int) {
return n
}
func (m *ImportColumnAttrsRequest) Size() (n int) {
if m == nil {
return 0
}
var l int
_ = l
l = len(m.Index)
if l > 0 {
n += 1 + l + sovPublic(uint64(l))
}
if m.Shard != 0 {
n += 1 + sovPublic(uint64(m.Shard))
}
l = len(m.AttrKey)
if l > 0 {
n += 1 + l + sovPublic(uint64(l))
}
if len(m.AttrVals) > 0 {
for _, s := range m.AttrVals {
l = len(s)
n += 1 + l + sovPublic(uint64(l))
}
}
if len(m.ColumnIDs) > 0 {
l = 0
for _, e := range m.ColumnIDs {
l += sovPublic(uint64(e))
}
n += 1 + sovPublic(uint64(l)) + l
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
return n
}
func sovPublic(x uint64) (n int) {
for {
n++
@ -6382,6 +6568,236 @@ func (m *ImportRoaringRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
func (m *ImportColumnAttrsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: ImportColumnAttrsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: ImportColumnAttrsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthPublic
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Index = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Shard", wireType)
}
m.Shard = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
m.Shard |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AttrKey", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthPublic
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.AttrKey = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field AttrVals", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthPublic
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.AttrVals = append(m.AttrVals, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 5:
if wireType == 0 {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.ColumnIDs = append(m.ColumnIDs, v)
} else if wireType == 2 {
var packedLen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
packedLen |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
if packedLen < 0 {
return ErrInvalidLengthPublic
}
postIndex := iNdEx + packedLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
var elementCount int
var count int
for _, integer := range dAtA {
if integer < 128 {
count++
}
}
elementCount = count
if elementCount != 0 && len(m.ColumnIDs) == 0 {
m.ColumnIDs = make([]uint64, 0, elementCount)
}
for iNdEx < postIndex {
var v uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.ColumnIDs = append(m.ColumnIDs, v)
}
} else {
return fmt.Errorf("proto: wrong wireType = %d for field ColumnIDs", wireType)
}
default:
iNdEx = preIndex
skippy, err := skipPublic(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthPublic
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func skipPublic(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
@ -6487,69 +6903,72 @@ var (
ErrIntOverflowPublic = fmt.Errorf("proto: integer overflow")
)
func init() { proto.RegisterFile("public.proto", fileDescriptor_public_d14551a4203088d5) }
func init() { proto.RegisterFile("public.proto", fileDescriptor_public_568b1fcbeadcdcca) }
var fileDescriptor_public_d14551a4203088d5 = []byte{
// 976 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x8e, 0xdb, 0x44,
0x14, 0x66, 0x62, 0x67, 0xe3, 0x9c, 0xec, 0x86, 0x6a, 0x48, 0x8b, 0x85, 0xaa, 0x10, 0x59, 0x08,
0x99, 0x9b, 0xad, 0x1a, 0x24, 0xd4, 0x2b, 0x7e, 0xb6, 0xd9, 0xa2, 0xa8, 0x6a, 0x54, 0x4e, 0x56,
0xe1, 0x0e, 0xc9, 0xdb, 0x4c, 0x53, 0x4b, 0x8e, 0x27, 0xf8, 0x07, 0x77, 0x1f, 0x80, 0x27, 0xe0,
0x86, 0x47, 0xe0, 0x51, 0xb8, 0x42, 0x3c, 0x02, 0x2c, 0x8f, 0xc1, 0x0d, 0x9a, 0x33, 0x9e, 0x8c,
0xe3, 0xee, 0x56, 0x08, 0x71, 0x37, 0xe7, 0x77, 0xce, 0x37, 0xe7, 0x9c, 0xcf, 0x86, 0xe3, 0x5d,
0x79, 0x99, 0xc4, 0x2f, 0x4e, 0x77, 0x99, 0x2c, 0x24, 0xf7, 0xe2, 0xb4, 0x10, 0x59, 0x1a, 0x25,
0x41, 0x0e, 0x0e, 0xca, 0x8a, 0xfb, 0xd0, 0x7b, 0x2c, 0x93, 0x72, 0x9b, 0xe6, 0x3e, 0x9b, 0x38,
0xa1, 0x8b, 0x46, 0xe4, 0x1f, 0x41, 0xf7, 0xab, 0xa2, 0xc8, 0x72, 0xbf, 0x33, 0x71, 0xc2, 0xc1,
0x74, 0x78, 0x6a, 0x42, 0x4f, 0x95, 0x1a, 0xb5, 0x91, 0x73, 0x70, 0x9f, 0x8a, 0xab, 0xdc, 0x77,
0x26, 0x4e, 0xd8, 0x47, 0x3a, 0xab, 0x9c, 0x28, 0xa3, 0x2c, 0x4e, 0x37, 0xbe, 0x3b, 0x61, 0xe1,
0x31, 0x1a, 0x31, 0x78, 0x06, 0xfd, 0x65, 0xbc, 0x49, 0xc5, 0x5a, 0x5d, 0xfd, 0x21, 0x38, 0xcf,
0xa5, 0xba, 0x96, 0x85, 0x83, 0xe9, 0x89, 0x4d, 0x8f, 0xb2, 0x42, 0x65, 0x51, 0x0e, 0x0b, 0xb1,
0xf1, 0x3b, 0x37, 0x3a, 0x2c, 0xc4, 0x26, 0x78, 0x04, 0x43, 0x94, 0xd5, 0x7c, 0x2d, 0xd2, 0x22,
0x7e, 0x19, 0x0b, 0x5d, 0x0e, 0xca, 0xca, 0x60, 0xa1, 0xf3, 0xbe, 0xc4, 0x8e, 0x2d, 0x31, 0xf8,
0x1c, 0xdc, 0xe7, 0x51, 0x9c, 0xf1, 0x21, 0x74, 0xe6, 0x33, 0x2a, 0xc1, 0xc5, 0xce, 0x7c, 0xc6,
0x47, 0xd0, 0x7d, 0x2c, 0xcb, 0xb4, 0xa0, 0x4b, 0x5d, 0xd4, 0x02, 0xbf, 0x03, 0xce, 0x53, 0x71,
0xe5, 0x3b, 0x13, 0x16, 0xf6, 0x51, 0x1d, 0x83, 0x05, 0x78, 0x4f, 0x62, 0x91, 0x10, 0x8e, 0x11,
0x74, 0xe9, 0x4c, 0x69, 0xfa, 0xa8, 0x05, 0xa5, 0x55, 0xb5, 0xcd, 0x4c, 0x26, 0x12, 0xf8, 0x3d,
0x38, 0x42, 0x59, 0xd9, 0x64, 0xb5, 0x14, 0x7c, 0x07, 0xf0, 0x75, 0x26, 0xcb, 0x9d, 0xbe, 0x2f,
0x84, 0x2e, 0x49, 0x04, 0x63, 0x30, 0xe5, 0x16, 0xba, 0xb9, 0x14, 0xb5, 0xc3, 0xed, 0xf5, 0x2e,
0xcb, 0x2d, 0x5d, 0xe1, 0xa0, 0x3a, 0x06, 0x53, 0xf0, 0x56, 0x51, 0xb2, 0xb7, 0xae, 0xa2, 0x84,
0xaa, 0x75, 0x50, 0x1d, 0x0f, 0xb3, 0x38, 0x75, 0x96, 0xe0, 0x5b, 0x38, 0xd1, 0xb3, 0xa0, 0x3a,
0xbd, 0x14, 0xc5, 0x1b, 0x8f, 0xf5, 0xef, 0x26, 0xe4, 0xcd, 0xc7, 0xfb, 0x85, 0x81, 0xab, 0x6c,
0xc6, 0xc4, 0xf6, 0x26, 0xd5, 0xab, 0x8b, 0xab, 0x9d, 0xa8, 0xe1, 0xd0, 0x99, 0x4f, 0x60, 0xb0,
0x2c, 0xd4, 0xf8, 0xac, 0xa2, 0xa4, 0x14, 0x75, 0xa2, 0xa6, 0x8a, 0x7f, 0x00, 0xde, 0x3c, 0x2d,
0xb4, 0xd9, 0x25, 0x08, 0x7b, 0x99, 0xdf, 0x87, 0xfe, 0x99, 0x94, 0x89, 0x36, 0x76, 0x27, 0x2c,
0xf4, 0xd0, 0x2a, 0xf8, 0x18, 0xe0, 0x49, 0x22, 0xa3, 0x3a, 0xf6, 0x68, 0xc2, 0x42, 0x86, 0x0d,
0x4d, 0xf0, 0x00, 0x7a, 0xaa, 0xd2, 0x67, 0xd1, 0xce, 0xa2, 0x65, 0x6f, 0x41, 0x1b, 0xfc, 0xcd,
0xe0, 0xf8, 0x9b, 0x52, 0x64, 0x57, 0x28, 0xbe, 0x2f, 0x45, 0x5e, 0xa8, 0xb7, 0x25, 0xd9, 0x4c,
0x07, 0x09, 0x6a, 0x0e, 0x96, 0xaf, 0xa2, 0x6c, 0xad, 0xdf, 0xce, 0xc5, 0x5a, 0x52, 0x58, 0xed,
0x9b, 0xe7, 0x84, 0xd5, 0xc3, 0xa6, 0x8a, 0x26, 0x48, 0x6c, 0x65, 0x61, 0xc0, 0xd4, 0x12, 0x0f,
0xe1, 0xdd, 0xf3, 0xd7, 0x2f, 0x92, 0x72, 0x2d, 0x50, 0x56, 0x3a, 0xfa, 0x88, 0x1c, 0xda, 0x6a,
0xfe, 0x31, 0x0c, 0x6b, 0x95, 0xd9, 0xfc, 0x1e, 0x39, 0xb6, 0xb4, 0xfc, 0x21, 0x1c, 0x9f, 0x6f,
0x2f, 0xc5, 0x7a, 0x2d, 0xd6, 0xb3, 0xa8, 0x88, 0x7c, 0x8f, 0x70, 0xb7, 0xf6, 0xf0, 0xc0, 0x25,
0xf8, 0x89, 0xc1, 0x49, 0x8d, 0x3e, 0xdf, 0xc9, 0x34, 0x17, 0xaa, 0xc5, 0xe7, 0x59, 0x66, 0x5a,
0x7c, 0x9e, 0x65, 0xfc, 0x01, 0xf4, 0x50, 0xe4, 0x65, 0x52, 0x98, 0xb9, 0xb9, 0x6b, 0x33, 0x9a,
0xd8, 0x32, 0x29, 0xd0, 0x78, 0xf1, 0x2f, 0x60, 0x78, 0x30, 0x87, 0x9a, 0x6c, 0x06, 0xd3, 0xf7,
0x6d, 0xdc, 0x81, 0x1d, 0x5b, 0xee, 0xc1, 0x8f, 0x0e, 0x0c, 0x1a, 0x99, 0x15, 0xaf, 0xa0, 0xac,
0x6e, 0x21, 0x1e, 0xb5, 0xd1, 0xc7, 0xc0, 0x16, 0xf5, 0x08, 0xb2, 0x85, 0x6a, 0xbc, 0xe2, 0x0a,
0x73, 0x6d, 0xa3, 0xf1, 0x4a, 0x8d, 0xda, 0x48, 0x44, 0xfa, 0x2a, 0x4a, 0x37, 0x62, 0x4d, 0x23,
0xe8, 0xa1, 0x11, 0xf9, 0xa9, 0xdd, 0x3d, 0xea, 0xd9, 0xc1, 0x42, 0x1b, 0x0b, 0xda, 0xfd, 0x34,
0x3b, 0xa0, 0xda, 0x77, 0x52, 0xef, 0x80, 0xe6, 0x8d, 0xf9, 0x4c, 0xf5, 0x8a, 0xe6, 0x45, 0x4b,
0xfc, 0x33, 0x18, 0x58, 0xde, 0xc8, 0xeb, 0x16, 0x8d, 0x6c, 0x7a, 0x6b, 0xc4, 0xa6, 0x23, 0xff,
0xb2, 0xcd, 0x9c, 0x7e, 0x9f, 0x2a, 0xf3, 0x0f, 0x5e, 0xa3, 0x61, 0xc7, 0x36, 0xd3, 0x3e, 0x6c,
0x50, 0xb9, 0x0f, 0x14, 0xfc, 0x9e, 0x0d, 0xde, 0x9b, 0xd0, 0x7a, 0x05, 0x7f, 0x32, 0x38, 0x99,
0x6f, 0x77, 0x32, 0x2b, 0x1a, 0xcb, 0x31, 0x4f, 0xd7, 0xe2, 0xb5, 0x59, 0x0e, 0x12, 0x2c, 0xa1,
0x76, 0x5a, 0x84, 0x4a, 0x4b, 0x42, 0x4b, 0xe1, 0xa2, 0x16, 0x1a, 0x0f, 0xe3, 0x1e, 0x3c, 0xcc,
0x7d, 0xe8, 0xeb, 0x29, 0x50, 0xa6, 0x2e, 0x99, 0xac, 0x42, 0xad, 0xfd, 0x45, 0xbc, 0x15, 0x79,
0x11, 0x6d, 0x77, 0x6a, 0x4f, 0x9c, 0xd0, 0xc1, 0x86, 0x46, 0x7f, 0xc1, 0x2a, 0xfa, 0x6a, 0xf4,
0xe8, 0xab, 0x61, 0x44, 0x15, 0xa9, 0xd3, 0x90, 0xd1, 0x23, 0x63, 0x43, 0x13, 0xfc, 0xc6, 0x80,
0x6b, 0x8c, 0x44, 0x20, 0xff, 0x1f, 0xd0, 0xb7, 0x03, 0xba, 0x07, 0x47, 0x74, 0x9f, 0x01, 0x53,
0x4b, 0xad, 0x72, 0x7b, 0xed, 0x72, 0x15, 0xdf, 0x58, 0xb6, 0xd3, 0x78, 0x18, 0x36, 0x55, 0xc1,
0x0a, 0x46, 0x17, 0x59, 0x94, 0xe6, 0x49, 0x54, 0x08, 0x15, 0xf2, 0x5f, 0x10, 0xdd, 0xf0, 0x93,
0x10, 0x7c, 0x02, 0x77, 0x5b, 0x79, 0x2d, 0x63, 0x28, 0x88, 0x0e, 0x41, 0x54, 0xc7, 0xe0, 0x0c,
0xfc, 0x7a, 0x6c, 0xf4, 0x6f, 0x44, 0x5d, 0xc2, 0x2a, 0x16, 0x95, 0x4a, 0xbd, 0x88, 0xb6, 0xa2,
0xae, 0x82, 0xce, 0x4a, 0x47, 0x84, 0xd5, 0xa1, 0x9f, 0x0f, 0x3a, 0x07, 0x2f, 0x61, 0x74, 0x53,
0x0e, 0xfa, 0xf4, 0x25, 0x22, 0xd2, 0x0c, 0xe5, 0xa1, 0x16, 0xf8, 0x23, 0xe8, 0xfe, 0x10, 0x8b,
0xca, 0x30, 0x54, 0x60, 0x07, 0xfb, 0xb6, 0x42, 0x50, 0x07, 0x9c, 0xdd, 0xf9, 0xf5, 0x7a, 0xcc,
0x7e, 0xbf, 0x1e, 0xb3, 0x3f, 0xae, 0xc7, 0xec, 0xe7, 0xbf, 0xc6, 0xef, 0x5c, 0x1e, 0xd1, 0x9f,
0xd7, 0xa7, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xff, 0xd4, 0x70, 0x89, 0x09, 0x00, 0x00,
var fileDescriptor_public_568b1fcbeadcdcca = []byte{
// 1016 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xdd, 0x6e, 0x1b, 0x45,
0x14, 0x66, 0xbc, 0xeb, 0x78, 0x7d, 0x9c, 0x84, 0x6a, 0x48, 0xcb, 0x0a, 0x55, 0xc1, 0x1a, 0x21,
0xb4, 0xdc, 0xa4, 0x6a, 0x90, 0x50, 0xaf, 0xf8, 0x49, 0x93, 0x22, 0xab, 0xaa, 0x55, 0x8e, 0x23,
0x73, 0x87, 0xb4, 0xa9, 0xa7, 0xee, 0x4a, 0xeb, 0x1d, 0xb3, 0x3f, 0x6c, 0xf3, 0x00, 0x3c, 0x01,
0x37, 0x88, 0x27, 0xe0, 0x51, 0xb8, 0x42, 0x3c, 0x02, 0x84, 0xc7, 0xe0, 0x06, 0xcd, 0x99, 0x1d,
0xcf, 0x7a, 0x9b, 0x04, 0x84, 0xb8, 0x3b, 0xdf, 0x39, 0x33, 0x67, 0xce, 0x37, 0xe7, 0x67, 0x06,
0x76, 0xd7, 0xd5, 0x45, 0x9a, 0xbc, 0x38, 0x5a, 0xe7, 0xaa, 0x54, 0x3c, 0x48, 0xb2, 0x52, 0xe6,
0x59, 0x9c, 0x8a, 0x02, 0x3c, 0x54, 0x35, 0x0f, 0x61, 0xf0, 0x58, 0xa5, 0xd5, 0x2a, 0x2b, 0x42,
0x36, 0xf6, 0x22, 0x1f, 0x2d, 0xe4, 0x1f, 0x40, 0xff, 0x8b, 0xb2, 0xcc, 0x8b, 0xb0, 0x37, 0xf6,
0xa2, 0xd1, 0xf1, 0xfe, 0x91, 0xdd, 0x7a, 0xa4, 0xd5, 0x68, 0x8c, 0x9c, 0x83, 0xff, 0x54, 0x5e,
0x16, 0xa1, 0x37, 0xf6, 0xa2, 0x21, 0x92, 0xac, 0x7d, 0xa2, 0x8a, 0xf3, 0x24, 0x5b, 0x86, 0xfe,
0x98, 0x45, 0xbb, 0x68, 0xa1, 0x78, 0x06, 0xc3, 0x59, 0xb2, 0xcc, 0xe4, 0x42, 0x1f, 0xfd, 0x3e,
0x78, 0xcf, 0x95, 0x3e, 0x96, 0x45, 0xa3, 0xe3, 0x3d, 0xe7, 0x1e, 0x55, 0x8d, 0xda, 0xa2, 0x17,
0x4c, 0xe5, 0x32, 0xec, 0x5d, 0xbb, 0x60, 0x2a, 0x97, 0xe2, 0x11, 0xec, 0xa3, 0xaa, 0x27, 0x0b,
0x99, 0x95, 0xc9, 0xcb, 0x44, 0x9a, 0x70, 0x50, 0xd5, 0x96, 0x0b, 0xc9, 0x9b, 0x10, 0x7b, 0x2e,
0x44, 0xf1, 0x29, 0xf8, 0xcf, 0xe3, 0x24, 0xe7, 0xfb, 0xd0, 0x9b, 0x9c, 0x52, 0x08, 0x3e, 0xf6,
0x26, 0xa7, 0xfc, 0x00, 0xfa, 0x8f, 0x55, 0x95, 0x95, 0x74, 0xa8, 0x8f, 0x06, 0xf0, 0x3b, 0xe0,
0x3d, 0x95, 0x97, 0xa1, 0x37, 0x66, 0xd1, 0x10, 0xb5, 0x28, 0xa6, 0x10, 0x3c, 0x49, 0x64, 0x4a,
0x3c, 0x0e, 0xa0, 0x4f, 0x32, 0xb9, 0x19, 0xa2, 0x01, 0x5a, 0xab, 0x63, 0x3b, 0xb5, 0x9e, 0x08,
0xf0, 0x7b, 0xb0, 0x83, 0xaa, 0x76, 0xce, 0x1a, 0x24, 0xbe, 0x01, 0xf8, 0x32, 0x57, 0xd5, 0xda,
0x9c, 0x17, 0x41, 0x9f, 0x10, 0xd1, 0x18, 0x1d, 0x73, 0x47, 0xdd, 0x1e, 0x8a, 0x66, 0xc1, 0xcd,
0xf1, 0xce, 0xaa, 0x15, 0x1d, 0xe1, 0xa1, 0x16, 0xc5, 0x31, 0x04, 0xf3, 0x38, 0xdd, 0x58, 0xe7,
0x71, 0x4a, 0xd1, 0x7a, 0xa8, 0xc5, 0x6d, 0x2f, 0x5e, 0xe3, 0x45, 0x7c, 0x0d, 0x7b, 0xa6, 0x16,
0x74, 0xa6, 0x67, 0xb2, 0x7c, 0xe3, 0xb2, 0xfe, 0x5d, 0x85, 0xbc, 0x79, 0x79, 0x3f, 0x33, 0xf0,
0xb5, 0xcd, 0x9a, 0xd8, 0xc6, 0xa4, 0x73, 0x75, 0x7e, 0xb9, 0x96, 0x0d, 0x1d, 0x92, 0xf9, 0x18,
0x46, 0xb3, 0x52, 0x97, 0xcf, 0x3c, 0x4e, 0x2b, 0xd9, 0x38, 0x6a, 0xab, 0xf8, 0x7b, 0x10, 0x4c,
0xb2, 0xd2, 0x98, 0x7d, 0xa2, 0xb0, 0xc1, 0xfc, 0x3e, 0x0c, 0x4f, 0x94, 0x4a, 0x8d, 0xb1, 0x3f,
0x66, 0x51, 0x80, 0x4e, 0xc1, 0x0f, 0x01, 0x9e, 0xa4, 0x2a, 0x6e, 0xf6, 0xee, 0x8c, 0x59, 0xc4,
0xb0, 0xa5, 0x11, 0x0f, 0x60, 0xa0, 0x23, 0x7d, 0x16, 0xaf, 0x1d, 0x5b, 0x76, 0x0b, 0x5b, 0xf1,
0x17, 0x83, 0xdd, 0xaf, 0x2a, 0x99, 0x5f, 0xa2, 0xfc, 0xb6, 0x92, 0x45, 0xa9, 0xef, 0x96, 0xb0,
0xad, 0x0e, 0x02, 0xba, 0x0e, 0x66, 0xaf, 0xe2, 0x7c, 0x61, 0xee, 0xce, 0xc7, 0x06, 0x69, 0xae,
0xee, 0xce, 0x0b, 0xe2, 0x1a, 0x60, 0x5b, 0x45, 0x15, 0x24, 0x57, 0xaa, 0xb4, 0x64, 0x1a, 0xc4,
0x23, 0x78, 0xfb, 0xec, 0xf5, 0x8b, 0xb4, 0x5a, 0x48, 0x54, 0xb5, 0xd9, 0xbd, 0x43, 0x0b, 0xba,
0x6a, 0xfe, 0x21, 0xec, 0x37, 0x2a, 0xdb, 0xf9, 0x03, 0x5a, 0xd8, 0xd1, 0xf2, 0x87, 0xb0, 0x7b,
0xb6, 0xba, 0x90, 0x8b, 0x85, 0x5c, 0x9c, 0xc6, 0x65, 0x1c, 0x06, 0xc4, 0xbb, 0xd3, 0x87, 0x5b,
0x4b, 0xc4, 0x0f, 0x0c, 0xf6, 0x1a, 0xf6, 0xc5, 0x5a, 0x65, 0x85, 0xd4, 0x29, 0x3e, 0xcb, 0x73,
0x9b, 0xe2, 0xb3, 0x3c, 0xe7, 0x0f, 0x60, 0x80, 0xb2, 0xa8, 0xd2, 0xd2, 0xd6, 0xcd, 0x5d, 0xe7,
0xd1, 0xee, 0xad, 0xd2, 0x12, 0xed, 0x2a, 0xfe, 0x19, 0xec, 0x6f, 0xd5, 0xa1, 0x19, 0x36, 0xa3,
0xe3, 0x77, 0xdd, 0xbe, 0x2d, 0x3b, 0x76, 0x96, 0x8b, 0xef, 0x3d, 0x18, 0xb5, 0x3c, 0xeb, 0xb9,
0x82, 0xaa, 0xbe, 0x61, 0xf0, 0xe8, 0x8e, 0xde, 0x05, 0x36, 0x6d, 0x4a, 0x90, 0x4d, 0x75, 0xe2,
0xf5, 0xac, 0xb0, 0xc7, 0xb6, 0x12, 0xaf, 0xd5, 0x68, 0x8c, 0x34, 0x48, 0x5f, 0xc5, 0xd9, 0x52,
0x2e, 0xa8, 0x04, 0x03, 0xb4, 0x90, 0x1f, 0xb9, 0xde, 0xa3, 0x9c, 0x6d, 0x35, 0xb4, 0xb5, 0xa0,
0xeb, 0x4f, 0xdb, 0x03, 0x3a, 0x7d, 0x7b, 0x4d, 0x0f, 0x98, 0xb9, 0x31, 0x39, 0xd5, 0xb9, 0xa2,
0x7a, 0x31, 0x88, 0x7f, 0x02, 0x23, 0x37, 0x37, 0x8a, 0x26, 0x45, 0x07, 0xce, 0xbd, 0x33, 0x62,
0x7b, 0x21, 0xff, 0xbc, 0x3b, 0x39, 0xc3, 0x21, 0x45, 0x16, 0x6e, 0xdd, 0x46, 0xcb, 0x8e, 0xdd,
0x49, 0xfb, 0xb0, 0x35, 0xca, 0x43, 0xa0, 0xcd, 0xef, 0xb8, 0xcd, 0x1b, 0x13, 0xba, 0x55, 0xe2,
0x0f, 0x06, 0x7b, 0x93, 0xd5, 0x5a, 0xe5, 0x65, 0xab, 0x39, 0x26, 0xd9, 0x42, 0xbe, 0xb6, 0xcd,
0x41, 0xc0, 0x0d, 0xd4, 0x5e, 0x67, 0xa0, 0x52, 0x93, 0x50, 0x53, 0xf8, 0x68, 0x40, 0xeb, 0x62,
0xfc, 0xad, 0x8b, 0xb9, 0x0f, 0x43, 0x53, 0x05, 0xda, 0xd4, 0x27, 0x93, 0x53, 0xe8, 0xb6, 0x3f,
0x4f, 0x56, 0xb2, 0x28, 0xe3, 0xd5, 0x5a, 0xf7, 0x89, 0x17, 0x79, 0xd8, 0xd2, 0x98, 0x17, 0xac,
0xa6, 0x57, 0x63, 0x40, 0xaf, 0x86, 0x85, 0x7a, 0xa7, 0x71, 0x43, 0xc6, 0x80, 0x8c, 0x2d, 0x8d,
0xf8, 0x95, 0x01, 0x37, 0x1c, 0x69, 0x80, 0xfc, 0x7f, 0x44, 0x6f, 0x27, 0x74, 0x0f, 0x76, 0xe8,
0x3c, 0x4b, 0xa6, 0x41, 0x9d, 0x70, 0x07, 0xdd, 0x70, 0xf5, 0xbc, 0x71, 0xd3, 0xce, 0xf0, 0x61,
0xd8, 0x56, 0x89, 0x39, 0x1c, 0x9c, 0xe7, 0x71, 0x56, 0xa4, 0x71, 0x29, 0xf5, 0x96, 0xff, 0xc2,
0xe8, 0x9a, 0x4f, 0x82, 0xf8, 0x08, 0xee, 0x76, 0xfc, 0xba, 0x89, 0xa1, 0x29, 0x7a, 0x44, 0x51,
0x8b, 0xe2, 0x04, 0xc2, 0xa6, 0x6c, 0xcc, 0x37, 0xa2, 0x09, 0x61, 0x9e, 0xc8, 0x5a, 0xbb, 0x9e,
0xc6, 0x2b, 0xd9, 0x44, 0x41, 0xb2, 0xd6, 0xd1, 0xc0, 0xea, 0xd1, 0xe7, 0x83, 0x64, 0xf1, 0x12,
0x0e, 0xae, 0xf3, 0x41, 0x4f, 0x5f, 0x2a, 0x63, 0x33, 0xa1, 0x02, 0x34, 0x80, 0x3f, 0x82, 0xfe,
0x77, 0x89, 0xac, 0xed, 0x84, 0x12, 0xae, 0xb0, 0x6f, 0x0a, 0x04, 0xcd, 0x06, 0xf1, 0x13, 0xb3,
0xc1, 0xb6, 0x86, 0xf6, 0x3f, 0xde, 0x99, 0xc9, 0x77, 0xf3, 0xfa, 0x9a, 0x7c, 0x87, 0xe6, 0xe5,
0x71, 0x4f, 0xa7, 0x85, 0xfa, 0xb5, 0xd3, 0xe2, 0x3c, 0x4e, 0x4d, 0xd1, 0x0f, 0x71, 0x83, 0x6f,
0xaf, 0x92, 0x93, 0x3b, 0xbf, 0x5c, 0x1d, 0xb2, 0xdf, 0xae, 0x0e, 0xd9, 0xef, 0x57, 0x87, 0xec,
0xc7, 0x3f, 0x0f, 0xdf, 0xba, 0xd8, 0xa1, 0x6f, 0xe1, 0xc7, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff,
0x9d, 0x83, 0xa0, 0x41, 0x26, 0x0a, 0x00, 0x00,
}

View file

@ -130,3 +130,11 @@ message ImportRoaringRequest {
bool Clear = 1;
repeated ImportRoaringRequestView views = 2;
}
message ImportColumnAttrsRequest {
string Index = 1;
int64 Shard = 2;
string AttrKey = 3;
repeated string AttrVals = 4;
repeated uint64 ColumnIDs = 5;
}