Adds suprressing attributes and bits for Bitmap queries

This commit is contained in:
Yuce Tekol 2017-08-22 15:18:10 +03:00
parent 2fea07f6bb
commit dec9893044
No known key found for this signature in database
GPG key ID: CB59E46D2FB90573
5 changed files with 183 additions and 72 deletions

View file

@ -229,36 +229,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.InhibitAttrs {
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.InhibitBits {
bm.segments = []BitmapSegment{}
}
return bm, nil
}
@ -1371,7 +1378,9 @@ type mapResponse struct {
// ExecOptions represents an execution context for a single Execute() call.
type ExecOptions struct {
Remote bool
Remote bool
InhibitAttrs bool
InhibitBits 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{InhibitBits: 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{InhibitAttrs: 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,
InhibitAttrs: req.InhibitAttrs,
InhibitBits: req.InhibitBits,
}
// 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.InhibitBits {
// 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",
InhibitAttrs: q.Get("inhibitAttrs") == "true",
InhibitBits: q.Get("inhibitBits") == "true",
}, nil
}
@ -1396,6 +1400,12 @@ type QueryRequest struct {
// Return column attributes, if true.
ColumnAttrs bool
// Do not return row attributes, if true.
InhibitAttrs bool
// Do not return bits, if true.
InhibitBits 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,
InhibitAttrs: pb.InhibitAttrs,
InhibitBits: pb.InhibitBits,
}
return req

View file

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

View file

@ -41,6 +41,8 @@ message QueryRequest {
repeated uint64 Slices = 2;
bool ColumnAttrs = 3;
bool Remote = 5;
bool InhibitAttrs = 6;
bool InhibitBits = 7;
}
message QueryResponse {