From f2f9ea01dcc7ff1af321a3184c9051d75510fab6 Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Wed, 13 Nov 2019 22:41:27 -0600 Subject: [PATCH] get group by aggregates working with PQL validation and grpc streaming --- pql/ast.go | 7 ++++--- server/grpc.go | 6 +++++- server/grpc_internal_test.go | 15 +++++++++++---- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/pql/ast.go b/pql/ast.go index 32c466969..0476a868a 100644 --- a/pql/ast.go +++ b/pql/ast.go @@ -383,9 +383,10 @@ var callInfoByFunc = map[string]callInfo{ "GroupBy": { allowUnknown: false, prototypes: map[string]interface{}{ - "filter": nil, - "limit": int64(0), - "previous": nil, + "filter": nil, + "limit": int64(0), + "previous": nil, + "aggregate": nil, }, }, "Options": { diff --git a/server/grpc.go b/server/grpc.go index 223ae00a4..c5cb97cd5 100644 --- a/server/grpc.go +++ b/server/grpc.go @@ -492,6 +492,7 @@ func makeRows(resp pilosa.QueryResponse, logger logger.Logger) chan *pb.RowRespo } } ci = append(ci, &pb.ColumnInfo{Name: "count", Datatype: "uint64"}) + ci = append(ci, &pb.ColumnInfo{Name: "sum", Datatype: "int64"}) } rowResp := &pb.RowResponse{ Headers: ci, @@ -505,7 +506,10 @@ func makeRows(resp pilosa.QueryResponse, logger logger.Logger) chan *pb.RowRespo rowResp.Columns = append(rowResp.Columns, &pb.ColumnResponse{ColumnVal: &pb.ColumnResponse_Uint64Val{Uint64Val: uint64(fieldRow.RowID)}}) } } - rowResp.Columns = append(rowResp.Columns, &pb.ColumnResponse{ColumnVal: &pb.ColumnResponse_Uint64Val{Uint64Val: uint64(gc.Count)}}) + rowResp.Columns = append(rowResp.Columns, + &pb.ColumnResponse{ColumnVal: &pb.ColumnResponse_Uint64Val{Uint64Val: gc.Count}}, + &pb.ColumnResponse{ColumnVal: &pb.ColumnResponse_Int64Val{Int64Val: gc.Sum}}, + ) results <- rowResp } case pilosa.RowIdentifiers: diff --git a/server/grpc_internal_test.go b/server/grpc_internal_test.go index 314d49dd3..285f35eb1 100644 --- a/server/grpc_internal_test.go +++ b/server/grpc_internal_test.go @@ -133,10 +133,11 @@ func TestGRPC(t *testing.T) { {"a", "uint64"}, {"b", "uint64"}, {"count", "uint64"}, + {"sum", "int64"}, }, [][]expColumn{ - {uint64(10), uint64(11), uint64(123)}, - {uint64(10), uint64(12), uint64(456)}, + {uint64(10), uint64(11), uint64(123), int64(0)}, + {uint64(10), uint64(12), uint64(456), int64(0)}, }, }, // []GroupCount (string) @@ -161,10 +162,11 @@ func TestGRPC(t *testing.T) { {"a", "string"}, {"b", "string"}, {"count", "uint64"}, + {"sum", "int64"}, }, [][]expColumn{ - {"ten", "eleven", uint64(123)}, - {"ten", "twelve", uint64(456)}, + {"ten", "eleven", uint64(123), int64(0)}, + {"ten", "twelve", uint64(456), int64(0)}, }, }, // RowIdentifiers (uint64) @@ -259,6 +261,11 @@ func TestGRPC(t *testing.T) { if val != v { t.Fatalf("test %d expected column val: %v, but got: %v", ti, v, val) } + case int64: + val := column.GetInt64Val() + if val != v { + t.Fatalf("test %d expected column val: %v but got: %v", ti, v, val) + } default: t.Fatalf("test %d has unhandled data type: %T", ti, v) }