diff --git a/api.go b/api.go index 328d4d07c..151de44a9 100644 --- a/api.go +++ b/api.go @@ -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 { diff --git a/api_test.go b/api_test.go index d412def1a..b6cfa8d07 100644 --- a/api_test.go +++ b/api_test.go @@ -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{ diff --git a/client.go b/client.go index f343f539e..03203b8a9 100644 --- a/client.go +++ b/client.go @@ -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 } diff --git a/encoding/proto/proto.go b/encoding/proto/proto.go index d9e6665fb..322cca1d1 100644 --- a/encoding/proto/proto.go +++ b/encoding/proto/proto.go @@ -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 } diff --git a/handler.go b/handler.go index e99dbed69..19fcbac44 100644 --- a/handler.go +++ b/handler.go @@ -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 { diff --git a/http/client.go b/http/client.go index 1b4a9e976..1c5de0197 100644 --- a/http/client.go +++ b/http/client.go @@ -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") diff --git a/http/client_test.go b/http/client_test.go index bc889b10d..f8743555e 100644 --- a/http/client_test.go +++ b/http/client_test.go @@ -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, + } +} diff --git a/http/handler.go b/http/handler.go index b9e905a81..ba7877222 100644 --- a/http/handler.go +++ b/http/handler.go @@ -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 } diff --git a/internal/public.pb.go b/internal/public.pb.go index c8c8cf109..731ae14c0 100644 --- a/internal/public.pb.go +++ b/internal/public.pb.go @@ -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, } diff --git a/internal/public.proto b/internal/public.proto index ca6cf26d6..b8d569f85 100644 --- a/internal/public.proto +++ b/internal/public.proto @@ -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; +} \ No newline at end of file