Merge pull request #783 from yuce/bitmap-attrs

Adds suprressing attributes and bits for Bitmap queries. Resolves #632
This commit is contained in:
Yuce Tekol 2017-08-26 00:10:08 +03:00 • committed by GitHub
commit 083fa3a2b8
6 changed files with 186 additions and 73 deletions

View file

@ -115,6 +115,8 @@ Response:
}
```
By default, all bits and attributes (*for `Bitmap` queries only*) are returned. In order to suppress returning bits, set `excludeBits` query argument to `true`; to suppress returning attributes, set `excludeAttrs` query argument to `true`.
### Change index time quantum
`PATCH /index/<index-name>/time-quantum`

View file

@ -270,36 +270,43 @@ func (e *Executor) executeBitmapCall(ctx context.Context, index string, c *pql.C
// If the row label is used then return bitmap attributes.
bm, _ := other.(*Bitmap)
if c.Name == "Bitmap" {
idx := e.Holder.Index(index)
if idx != nil {
columnLabel := idx.ColumnLabel()
if columnID, ok, err := c.UintArg(columnLabel); ok && err == nil {
attrs, err := idx.ColumnAttrStore().Attrs(columnID)
if err != nil {
return nil, err
}
bm.Attrs = attrs
} else if err != nil {
return nil, err
} else {
frame, _ := c.Args["frame"].(string)
if fr := idx.Frame(frame); fr != nil {
rowLabel := fr.RowLabel()
rowID, _, err := c.UintArg(rowLabel)
if err != nil {
return nil, err
}
attrs, err := fr.RowAttrStore().Attrs(rowID)
if opt.ExcludeAttrs {
bm.Attrs = map[string]interface{}{}
} else {
idx := e.Holder.Index(index)
if idx != nil {
columnLabel := idx.ColumnLabel()
if columnID, ok, err := c.UintArg(columnLabel); ok && err == nil {
attrs, err := idx.ColumnAttrStore().Attrs(columnID)
if err != nil {
return nil, err
}
bm.Attrs = attrs
} else if err != nil {
return nil, err
} else {
frame, _ := c.Args["frame"].(string)
if fr := idx.Frame(frame); fr != nil {
rowLabel := fr.RowLabel()
rowID, _, err := c.UintArg(rowLabel)
if err != nil {
return nil, err
}
attrs, err := fr.RowAttrStore().Attrs(rowID)
if err != nil {
return nil, err
}
bm.Attrs = attrs
}
}
}
}
}
if opt.ExcludeBits {
bm.segments = []BitmapSegment{}
}
return bm, nil
}
@ -1484,7 +1491,9 @@ type mapResponse struct {
// ExecOptions represents an execution context for a single Execute() call.
type ExecOptions struct {
Remote bool
Remote bool
ExcludeAttrs bool
ExcludeBits bool
}
// decodeError returns an error representation of s if s is non-blank.

View file

@ -59,6 +59,25 @@ func TestExecutor_Execute_Bitmap(t *testing.T) {
} else if attrs := res[0].(*pilosa.Bitmap).Attrs; !reflect.DeepEqual(attrs, map[string]interface{}{"foo": "bar", "baz": int64(123)}) {
t.Fatalf("unexpected attrs: %s", spew.Sdump(attrs))
}
// Inhibit bits.
if res, err := e.Execute(context.Background(), "i", test.MustParse(`Bitmap(rowID=10, frame=f)`), nil, &pilosa.ExecOptions{ExcludeBits: true}); err != nil {
t.Fatal(err)
} else if bits := res[0].(*pilosa.Bitmap).Bits(); !reflect.DeepEqual(bits, []uint64{}) {
t.Fatalf("unexpected bits: %+v", bits)
} else if attrs := res[0].(*pilosa.Bitmap).Attrs; !reflect.DeepEqual(attrs, map[string]interface{}{"foo": "bar", "baz": int64(123)}) {
t.Fatalf("unexpected attrs: %s", spew.Sdump(attrs))
}
// Inhibit attributes.
if res, err := e.Execute(context.Background(), "i", test.MustParse(`Bitmap(rowID=10, frame=f)`), nil, &pilosa.ExecOptions{ExcludeAttrs: true}); err != nil {
t.Fatal(err)
} else if bits := res[0].(*pilosa.Bitmap).Bits(); !reflect.DeepEqual(bits, []uint64{3, SliceWidth + 1}) {
t.Fatalf("unexpected bits: %+v", bits)
} else if attrs := res[0].(*pilosa.Bitmap).Attrs; !reflect.DeepEqual(attrs, map[string]interface{}{}) {
fmt.Println("ATTRS", attrs)
t.Fatalf("unexpected attrs: %s", spew.Sdump(attrs))
}
})
t.Run("Column", func(t *testing.T) {

View file

@ -241,7 +241,9 @@ func (h *Handler) handlePostQuery(w http.ResponseWriter, r *http.Request) {
// Build execution options.
opt := &ExecOptions{
Remote: req.Remote,
Remote: req.Remote,
ExcludeAttrs: req.ExcludeAttrs,
ExcludeBits: req.ExcludeBits,
}
// Parse query string.
@ -257,7 +259,7 @@ func (h *Handler) handlePostQuery(w http.ResponseWriter, r *http.Request) {
resp := &QueryResponse{Results: results, Err: err}
// Fill column attributes if requested.
if req.ColumnAttrs {
if req.ColumnAttrs && !req.ExcludeBits {
// Consolidate all column ids across all calls.
var columnIDs []uint64
for _, result := range results {
@ -925,9 +927,11 @@ func (h *Handler) readURLQueryRequest(r *http.Request) (*QueryRequest, error) {
}
return &QueryRequest{
Query: query,
Slices: slices,
ColumnAttrs: q.Get("columnAttrs") == "true",
Query: query,
Slices: slices,
ColumnAttrs: q.Get("columnAttrs") == "true",
ExcludeAttrs: q.Get("excludeAttrs") == "true",
ExcludeBits: q.Get("excludeBits") == "true",
}, nil
}
@ -1396,6 +1400,12 @@ type QueryRequest struct {
// Return column attributes, if true.
ColumnAttrs bool
// Do not return row attributes, if true.
ExcludeAttrs bool
// Do not return bits, if true.
ExcludeBits bool
// If true, indicates that query is part of a larger distributed query.
// If false, this request is on the originating node.
Remote bool
@ -1403,10 +1413,12 @@ type QueryRequest struct {
func decodeQueryRequest(pb *internal.QueryRequest) *QueryRequest {
req := &QueryRequest{
Query: pb.Query,
Slices: pb.Slices,
ColumnAttrs: pb.ColumnAttrs,
Remote: pb.Remote,
Query: pb.Query,
Slices: pb.Slices,
ColumnAttrs: pb.ColumnAttrs,
Remote: pb.Remote,
ExcludeAttrs: pb.ExcludeAttrs,
ExcludeBits: pb.ExcludeBits,
}
return req

View file

@ -136,10 +136,12 @@ func (m *AttrMap) GetAttrs() []*Attr {
}
type QueryRequest struct {
Query string `protobuf:"bytes,1,opt,name=Query,proto3" json:"Query,omitempty"`
Slices []uint64 `protobuf:"varint,2,rep,packed,name=Slices" json:"Slices,omitempty"`
ColumnAttrs bool `protobuf:"varint,3,opt,name=ColumnAttrs,proto3" json:"ColumnAttrs,omitempty"`
Remote bool `protobuf:"varint,5,opt,name=Remote,proto3" json:"Remote,omitempty"`
Query string `protobuf:"bytes,1,opt,name=Query,proto3" json:"Query,omitempty"`
Slices []uint64 `protobuf:"varint,2,rep,packed,name=Slices" json:"Slices,omitempty"`
ColumnAttrs bool `protobuf:"varint,3,opt,name=ColumnAttrs,proto3" json:"ColumnAttrs,omitempty"`
Remote bool `protobuf:"varint,5,opt,name=Remote,proto3" json:"Remote,omitempty"`
ExcludeAttrs bool `protobuf:"varint,6,opt,name=ExcludeAttrs,proto3" json:"ExcludeAttrs,omitempty"`
ExcludeBits bool `protobuf:"varint,7,opt,name=ExcludeBits,proto3" json:"ExcludeBits,omitempty"`
}
func (m *QueryRequest) Reset() { *m = QueryRequest{} }
@ -547,6 +549,26 @@ func (m *QueryRequest) MarshalTo(dAtA []byte) (int, error) {
}
i++
}
if m.ExcludeAttrs {
dAtA[i] = 0x30
i++
if m.ExcludeAttrs {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i++
}
if m.ExcludeBits {
dAtA[i] = 0x38
i++
if m.ExcludeBits {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i++
}
return i, nil
}
@ -908,6 +930,12 @@ func (m *QueryRequest) Size() (n int) {
if m.Remote {
n += 2
}
if m.ExcludeAttrs {
n += 2
}
if m.ExcludeBits {
n += 2
}
return n
}
@ -1961,6 +1989,46 @@ func (m *QueryRequest) Unmarshal(dAtA []byte) error {
}
}
m.Remote = bool(v != 0)
case 6:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field ExcludeAttrs", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.ExcludeAttrs = bool(v != 0)
case 7:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field ExcludeBits", wireType)
}
var v int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowPublic
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (int(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.ExcludeBits = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipPublic(dAtA[iNdEx:])
@ -2730,43 +2798,44 @@ var (
func init() { proto.RegisterFile("public.proto", fileDescriptorPublic) }
var fileDescriptorPublic = []byte{
// 596 bytes of a gzipped FileDescriptorProto
// 621 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4b, 0x8e, 0xd3, 0x40,
0x10, 0xa5, 0x63, 0x27, 0x71, 0x2a, 0x1f, 0x45, 0x2d, 0x3e, 0x16, 0x42, 0x91, 0x65, 0xb1, 0xf0,
0x2a, 0x23, 0x85, 0x03, 0x20, 0x9c, 0x64, 0x24, 0x0b, 0x31, 0x82, 0xce, 0xc0, 0xde, 0x33, 0xd3,
0x1a, 0x2c, 0xf9, 0x47, 0xbb, 0x0d, 0xe4, 0x1c, 0x6c, 0xb8, 0x01, 0x5c, 0x80, 0x3b, 0xb0, 0xe4,
0x08, 0x28, 0x5c, 0x04, 0x55, 0xb7, 0x3b, 0x76, 0x58, 0xa0, 0xd9, 0xd5, 0x7b, 0xe5, 0xea, 0xae,
0xf7, 0xaa, 0xcb, 0x30, 0x29, 0xeb, 0xab, 0x34, 0xb9, 0x5e, 0x96, 0xa2, 0x90, 0x05, 0x75, 0x92,
0x5c, 0x72, 0x91, 0xc7, 0xa9, 0x1f, 0xc2, 0x20, 0x4c, 0x64, 0x16, 0x97, 0x94, 0x82, 0x1d, 0x26,
0xb2, 0x72, 0x89, 0x67, 0x05, 0x36, 0x53, 0x31, 0x7d, 0x0a, 0xfd, 0x17, 0x52, 0x8a, 0xca, 0xed,
0x79, 0x56, 0x30, 0x5e, 0xcd, 0x96, 0xa6, 0x6e, 0x89, 0x34, 0xd3, 0x49, 0x7f, 0x09, 0xf6, 0xeb,
0x38, 0x11, 0x74, 0x0e, 0xd6, 0x4b, 0xbe, 0x77, 0x89, 0x47, 0x02, 0x9b, 0x61, 0x48, 0xef, 0x43,
0x7f, 0x5d, 0xd4, 0xb9, 0x74, 0x7b, 0x8a, 0xd3, 0xc0, 0x5f, 0x81, 0xb3, 0xab, 0x33, 0x15, 0x63,
0xcd, 0xae, 0xce, 0x54, 0x8d, 0xc5, 0x30, 0x3c, 0xad, 0xb1, 0x4c, 0xcd, 0x5b, 0xb0, 0xc2, 0x44,
0x62, 0x92, 0x15, 0x9f, 0xa2, 0x4d, 0x73, 0x89, 0x06, 0xf4, 0x31, 0x38, 0xeb, 0x22, 0xad, 0xb3,
0x3c, 0xda, 0x34, 0x37, 0x1d, 0x31, 0x7d, 0x02, 0xa3, 0xcb, 0x24, 0xe3, 0x95, 0x8c, 0xb3, 0xd2,
0xb5, 0xd4, 0x91, 0x2d, 0xe1, 0x6f, 0x61, 0xaa, 0xbf, 0x44, 0x25, 0x3b, 0x2e, 0xe9, 0x0c, 0x7a,
0xc7, 0xd3, 0x7b, 0xd1, 0xe6, 0x8e, 0x0e, 0x7c, 0x27, 0x60, 0x63, 0xd4, 0xb5, 0x60, 0xa4, 0x2d,
0xa0, 0x60, 0x5f, 0xee, 0x4b, 0xde, 0xf4, 0xa5, 0x62, 0xea, 0xc1, 0x78, 0x27, 0x45, 0x92, 0xdf,
0xbe, 0x8b, 0xd3, 0x9a, 0xab, 0xae, 0x46, 0xac, 0x4b, 0xa1, 0xa2, 0x28, 0x97, 0x3a, 0x6d, 0xab,
0xa6, 0x8f, 0x18, 0x15, 0x85, 0x45, 0x91, 0xea, 0x64, 0xdf, 0x23, 0x81, 0xc3, 0x5a, 0x82, 0x2e,
0x00, 0xce, 0xd3, 0x22, 0x6e, 0x6a, 0x07, 0x1e, 0x09, 0x08, 0xeb, 0x30, 0xfe, 0x19, 0x0c, 0xb1,
0xd3, 0x57, 0x71, 0xd9, 0x6a, 0x23, 0xff, 0xd3, 0xf6, 0x11, 0x26, 0x6f, 0x6a, 0x2e, 0xf6, 0x8c,
0x7f, 0xa8, 0x79, 0xa5, 0x46, 0xa0, 0x70, 0x23, 0x52, 0x03, 0xfa, 0x10, 0x06, 0xbb, 0x34, 0xb9,
0xe6, 0xda, 0x28, 0x9b, 0x35, 0x08, 0xa5, 0xb6, 0x06, 0x57, 0x4a, 0xaa, 0xc3, 0xba, 0x14, 0x56,
0x32, 0x9e, 0x15, 0xd2, 0x68, 0x69, 0x90, 0xff, 0x85, 0xc0, 0xb4, 0xb9, 0xb8, 0x2a, 0x8b, 0xbc,
0xe2, 0x68, 0xee, 0x56, 0x08, 0x63, 0xee, 0x56, 0x08, 0x7a, 0x06, 0x43, 0xc6, 0xab, 0x3a, 0x95,
0x66, 0x3e, 0x0f, 0x5a, 0x0d, 0xa6, 0xb6, 0x4e, 0x25, 0x33, 0x5f, 0xd1, 0xe7, 0x30, 0x3b, 0x99,
0x37, 0x76, 0x84, 0x75, 0x8f, 0xda, 0xba, 0x93, 0x3c, 0xfb, 0xe7, 0x73, 0xff, 0x07, 0x81, 0x71,
0xe7, 0x64, 0x1a, 0x98, 0xfd, 0x51, 0x6d, 0x8d, 0x57, 0xf3, 0xf6, 0x20, 0xcd, 0x33, 0xb3, 0x5f,
0x13, 0x20, 0x17, 0xcd, 0x2b, 0x20, 0x17, 0xe8, 0x3d, 0xee, 0x8c, 0xb9, 0xbf, 0xe3, 0x3d, 0xd2,
0x4c, 0x27, 0xa9, 0x0b, 0xc3, 0xf5, 0xfb, 0x38, 0xbf, 0xe5, 0x37, 0xea, 0x15, 0x38, 0xcc, 0x40,
0xba, 0x6c, 0x77, 0x48, 0xf9, 0x36, 0x5e, 0xd1, 0xf6, 0x08, 0x93, 0x61, 0xc7, 0x6f, 0xfc, 0x6f,
0x04, 0xa6, 0x51, 0x56, 0x16, 0x42, 0x76, 0xe6, 0x18, 0xe5, 0x37, 0xfc, 0xb3, 0x99, 0xa3, 0x02,
0xc8, 0x9e, 0x8b, 0x38, 0xd3, 0xef, 0x75, 0xc4, 0x34, 0x40, 0x56, 0xcd, 0x53, 0xcd, 0xcf, 0x66,
0x1a, 0xa8, 0xc9, 0xe1, 0xfe, 0x55, 0xae, 0xad, 0x67, 0xae, 0x11, 0x3e, 0x50, 0xb3, 0x7e, 0x95,
0xdb, 0x57, 0xa9, 0x96, 0xc0, 0x07, 0x7a, 0xdc, 0xbf, 0xca, 0x1d, 0x78, 0x56, 0x60, 0xb1, 0x0e,
0x13, 0xce, 0x7f, 0x1e, 0x16, 0xe4, 0xd7, 0x61, 0x41, 0x7e, 0x1f, 0x16, 0xe4, 0xeb, 0x9f, 0xc5,
0xbd, 0xab, 0x81, 0xfa, 0x69, 0x3d, 0xfb, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x64, 0xc1, 0x80, 0x73,
0xc4, 0x04, 0x00, 0x00,
0x10, 0xa5, 0x63, 0x27, 0x71, 0x2a, 0x99, 0x51, 0xd4, 0xe2, 0x63, 0x21, 0x14, 0x59, 0x16, 0x0b,
0xaf, 0x32, 0x52, 0x38, 0x00, 0xc2, 0x49, 0x46, 0xb2, 0x10, 0x23, 0xe8, 0x0c, 0xec, 0x3d, 0x49,
0x6b, 0xb0, 0xe4, 0x1f, 0xed, 0xb6, 0x98, 0x9c, 0x83, 0x0d, 0x37, 0x80, 0x0b, 0xb0, 0xe3, 0x00,
0x2c, 0x39, 0x02, 0x0a, 0x17, 0x41, 0xd5, 0xed, 0x8e, 0x1d, 0x16, 0x88, 0x5d, 0xbd, 0x57, 0x5d,
0xe5, 0xfa, 0xbc, 0x32, 0x4c, 0xca, 0xfa, 0x26, 0x4d, 0xb6, 0xf3, 0x52, 0x14, 0xb2, 0xa0, 0x4e,
0x92, 0x4b, 0x2e, 0xf2, 0x38, 0xf5, 0x43, 0x18, 0x84, 0x89, 0xcc, 0xe2, 0x92, 0x52, 0xb0, 0xc3,
0x44, 0x56, 0x2e, 0xf1, 0xac, 0xc0, 0x66, 0xca, 0xa6, 0x4f, 0xa1, 0xff, 0x42, 0x4a, 0x51, 0xb9,
0x3d, 0xcf, 0x0a, 0xc6, 0x8b, 0xf3, 0xb9, 0x89, 0x9b, 0x23, 0xcd, 0xb4, 0xd3, 0x9f, 0x83, 0xfd,
0x3a, 0x4e, 0x04, 0x9d, 0x82, 0xf5, 0x92, 0xef, 0x5d, 0xe2, 0x91, 0xc0, 0x66, 0x68, 0xd2, 0xfb,
0xd0, 0x5f, 0x16, 0x75, 0x2e, 0xdd, 0x9e, 0xe2, 0x34, 0xf0, 0x17, 0xe0, 0x6c, 0xea, 0x4c, 0xd9,
0x18, 0xb3, 0xa9, 0x33, 0x15, 0x63, 0x31, 0x34, 0x4f, 0x63, 0x2c, 0x13, 0xf3, 0x16, 0xac, 0x30,
0x91, 0xe8, 0x64, 0xc5, 0xc7, 0x68, 0xd5, 0x7c, 0x44, 0x03, 0xfa, 0x18, 0x9c, 0x65, 0x91, 0xd6,
0x59, 0x1e, 0xad, 0x9a, 0x2f, 0x1d, 0x31, 0x7d, 0x02, 0xa3, 0xeb, 0x24, 0xe3, 0x95, 0x8c, 0xb3,
0xd2, 0xb5, 0x54, 0xca, 0x96, 0xf0, 0xd7, 0x70, 0xa6, 0x5f, 0x62, 0x27, 0x1b, 0x2e, 0xe9, 0x39,
0xf4, 0x8e, 0xd9, 0x7b, 0xd1, 0xea, 0x3f, 0x27, 0xf0, 0x95, 0x80, 0x8d, 0x56, 0x77, 0x04, 0x23,
0x3d, 0x02, 0x0a, 0xf6, 0xf5, 0xbe, 0xe4, 0x4d, 0x5d, 0xca, 0xa6, 0x1e, 0x8c, 0x37, 0x52, 0x24,
0xf9, 0xed, 0xbb, 0x38, 0xad, 0xb9, 0xaa, 0x6a, 0xc4, 0xba, 0x14, 0x76, 0x14, 0xe5, 0x52, 0xbb,
0x6d, 0x55, 0xf4, 0x11, 0x63, 0x47, 0x61, 0x51, 0xa4, 0xda, 0xd9, 0xf7, 0x48, 0xe0, 0xb0, 0x96,
0xa0, 0x33, 0x80, 0xcb, 0xb4, 0x88, 0x9b, 0xd8, 0x81, 0x47, 0x02, 0xc2, 0x3a, 0x8c, 0x7f, 0x01,
0x43, 0xac, 0xf4, 0x55, 0x5c, 0xb6, 0xbd, 0x91, 0x7f, 0xf5, 0xf6, 0x9d, 0xc0, 0xe4, 0x4d, 0xcd,
0xc5, 0x9e, 0xf1, 0x0f, 0x35, 0xaf, 0xd4, 0x0e, 0x14, 0x6e, 0xba, 0xd4, 0x80, 0x3e, 0x84, 0xc1,
0x26, 0x4d, 0xb6, 0x5c, 0x4f, 0xca, 0x66, 0x0d, 0xc2, 0x5e, 0xdb, 0x09, 0x57, 0xaa, 0x57, 0x87,
0x75, 0x29, 0x8c, 0x64, 0x3c, 0x2b, 0xa4, 0x69, 0xa6, 0x41, 0xd4, 0x87, 0xc9, 0xfa, 0x6e, 0x9b,
0xd6, 0x3b, 0xae, 0x43, 0x07, 0xca, 0x7b, 0xc2, 0x61, 0xf6, 0x06, 0x2b, 0xed, 0x0e, 0x75, 0xf6,
0x0e, 0xe5, 0x7f, 0x22, 0x70, 0xd6, 0x94, 0x5f, 0x95, 0x45, 0x5e, 0x71, 0xdc, 0xd1, 0x5a, 0x08,
0xb3, 0xa3, 0xb5, 0x10, 0xf4, 0x02, 0x86, 0x8c, 0x57, 0x75, 0x2a, 0xcd, 0x9a, 0x1f, 0xb4, 0xa3,
0x30, 0xb1, 0x75, 0x2a, 0x99, 0x79, 0x45, 0x9f, 0xc3, 0xf9, 0x89, 0x6c, 0xb0, 0x2f, 0x8c, 0x7b,
0xd4, 0xc6, 0x9d, 0xf8, 0xd9, 0x5f, 0xcf, 0xfd, 0x6f, 0x04, 0xc6, 0x9d, 0xcc, 0x34, 0x30, 0x67,
0xa8, 0xca, 0x1a, 0x2f, 0xa6, 0x6d, 0x22, 0xcd, 0x33, 0x73, 0xa6, 0x13, 0x20, 0x57, 0x8d, 0x98,
0xc8, 0x15, 0xae, 0x10, 0x4f, 0xcf, 0x7c, 0xbf, 0xb3, 0x42, 0xa4, 0x99, 0x76, 0x52, 0x17, 0x86,
0xcb, 0xf7, 0x71, 0x7e, 0xcb, 0x77, 0x4a, 0x4c, 0x0e, 0x33, 0x90, 0xce, 0xdb, 0x53, 0x54, 0xd3,
0x1f, 0x2f, 0x68, 0x9b, 0xc2, 0x78, 0xd8, 0xf1, 0x8d, 0xff, 0x85, 0xc0, 0x59, 0x94, 0x95, 0x85,
0x90, 0x1d, 0x35, 0x44, 0xf9, 0x8e, 0xdf, 0x19, 0x35, 0x28, 0x80, 0xec, 0xa5, 0x88, 0x33, 0x2d,
0xfb, 0x11, 0xd3, 0x00, 0x59, 0xa5, 0x0a, 0xa5, 0x02, 0x9b, 0x69, 0xa0, 0xf6, 0x8f, 0x67, 0x5c,
0xb9, 0xb6, 0x56, 0x8e, 0x46, 0xa8, 0x73, 0x73, 0xc5, 0x95, 0xdb, 0x57, 0xae, 0x96, 0x40, 0x9d,
0x1f, 0xcf, 0x18, 0xb5, 0x61, 0x05, 0x16, 0xeb, 0x30, 0xe1, 0xf4, 0xc7, 0x61, 0x46, 0x7e, 0x1e,
0x66, 0xe4, 0xd7, 0x61, 0x46, 0x3e, 0xff, 0x9e, 0xdd, 0xbb, 0x19, 0xa8, 0x7f, 0xdf, 0xb3, 0x3f,
0x01, 0x00, 0x00, 0xff, 0xff, 0x27, 0x5d, 0xef, 0xb2, 0x0b, 0x05, 0x00, 0x00,
}

View file

@ -46,6 +46,8 @@ message QueryRequest {
repeated uint64 Slices = 2;
bool ColumnAttrs = 3;
bool Remote = 5;
bool ExcludeAttrs = 6;
bool ExcludeBits = 7;
}
message QueryResponse {