-
Notifications
You must be signed in to change notification settings - Fork 0
/
convert.go
84 lines (71 loc) · 1.67 KB
/
convert.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package convert
import (
"github.com/akrennmair/updog"
proto "github.com/akrennmair/updog/proto/updog/v1"
)
func ToQuery(pbq *proto.Query) *updog.Query {
return &updog.Query{
Expr: toExpr(pbq.Expr),
GroupBy: pbq.GroupBy,
}
}
func toExpr(pbe *proto.Query_Expression) updog.Expression {
switch v := pbe.Value.(type) {
case *proto.Query_Expression_Eq:
return &updog.ExprEqual{
Column: v.Eq.Column,
Value: v.Eq.Value,
}
case *proto.Query_Expression_Not_:
return &updog.ExprNot{
Expr: toExpr(v.Not.Expr),
}
case *proto.Query_Expression_And_:
e := &updog.ExprAnd{}
for _, ee := range v.And.Exprs {
e.Exprs = append(e.Exprs, toExpr(ee))
}
return e
case *proto.Query_Expression_Or_:
e := &updog.ExprOr{}
for _, ee := range v.Or.Exprs {
e.Exprs = append(e.Exprs, toExpr(ee))
}
return e
default:
return nil
}
}
func ToProtobufResult(result *updog.Result, qid int32) *proto.Result {
pbr := &proto.Result{QueryId: qid, TotalCount: result.Count}
for _, g := range result.Groups {
fields := []*proto.Result_Group_ResultField{}
for _, f := range g.Fields {
fields = append(fields, &proto.Result_Group_ResultField{
Column: f.Column,
Value: f.Value,
})
}
pbr.Groups = append(pbr.Groups, &proto.Result_Group{
Count: g.Count,
Fields: fields,
})
}
return pbr
}
func ToResult(pr *proto.Result) *updog.Result {
r := &updog.Result{Count: pr.TotalCount}
for _, g := range pr.Groups {
gg := updog.ResultGroup{
Count: g.Count,
}
for _, f := range g.Fields {
gg.Fields = append(gg.Fields, updog.ResultField{
Column: f.Column,
Value: f.Value,
})
}
r.Groups = append(r.Groups, gg)
}
return r
}