Skip to content

Commit 3d16fc5

Browse files
authored
vam/expr/agg: Make it so package can import vam/expr (#7170)
This commit shifts things around for aggregation expressions so that the "agg" package can import from package "expr" and not create an import cycle. This clears the way for adding defuse into collect which will be done in a subsequent pr.
1 parent 2b04ddd commit 3d16fc5

8 files changed

Lines changed: 47 additions & 47 deletions

File tree

compiler/rungen/vop.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/brimdata/super/pkg/field"
1212
"github.com/brimdata/super/runtime/sam/expr"
1313
vamexpr "github.com/brimdata/super/runtime/vam/expr"
14+
vamagg "github.com/brimdata/super/runtime/vam/expr/agg"
1415
vamop "github.com/brimdata/super/runtime/vam/op"
1516
"github.com/brimdata/super/runtime/vam/op/aggregate"
1617
"github.com/brimdata/super/sbuf"
@@ -428,5 +429,9 @@ func (b *Builder) compileVamAgg(agg *dag.AggExpr) (*vamexpr.Aggregator, error) {
428429
return nil, err
429430
}
430431
}
431-
return vamexpr.NewAggregator(name, agg.Distinct, arg, filter)
432+
pattern, err := vamagg.NewPattern(name, agg.Distinct, agg.Expr != nil)
433+
if err != nil {
434+
return nil, err
435+
}
436+
return vamexpr.NewAggregator(name, agg.Distinct, arg, filter, pattern)
432437
}

runtime/vam/expr/agg/agg.go

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,72 @@ package agg
33
import (
44
"fmt"
55

6-
"github.com/brimdata/super"
7-
"github.com/brimdata/super/vector"
6+
"github.com/brimdata/super/runtime/vam/expr"
87
)
98

10-
type Func interface {
11-
Consume(vector.Any)
12-
ConsumeAsPartial(vector.Any)
13-
Result(*super.Context) vector.Any
14-
ResultAsPartial(*super.Context) vector.Any
15-
}
16-
17-
type Pattern func() Func
18-
19-
func NewPattern(op string, distinct, hasarg bool) (Pattern, error) {
9+
func NewPattern(op string, distinct, hasarg bool) (expr.AggPattern, error) {
2010
needarg := true
21-
var pattern Pattern
11+
var pattern expr.AggPattern
2212
switch op {
2313
case "count":
2414
needarg = false
25-
pattern = func() Func {
15+
pattern = func() expr.AggFunc {
2616
return &count{}
2717
}
2818
case "any":
29-
pattern = func() Func {
19+
pattern = func() expr.AggFunc {
3020
return NewAny()
3121
}
3222
case "avg":
33-
pattern = func() Func {
23+
pattern = func() expr.AggFunc {
3424
return &avg{}
3525
}
3626
case "array_agg":
37-
pattern = func() Func {
27+
pattern = func() expr.AggFunc {
3828
return &arrayAgg{}
3929
}
4030
case "blend":
41-
pattern = func() Func {
31+
pattern = func() expr.AggFunc {
4232
return newFuse(false)
4333
}
4434
case "dcount":
45-
pattern = func() Func {
35+
pattern = func() expr.AggFunc {
4636
return newDCount()
4737
}
4838
case "fuse":
49-
pattern = func() Func {
39+
pattern = func() expr.AggFunc {
5040
return newFuse(true)
5141
}
5242
case "sum":
53-
pattern = func() Func {
43+
pattern = func() expr.AggFunc {
5444
return newMathReducer(mathSum)
5545
}
5646
case "min":
57-
pattern = func() Func {
47+
pattern = func() expr.AggFunc {
5848
return newMathReducer(mathMin)
5949
}
6050
case "max":
61-
pattern = func() Func {
51+
pattern = func() expr.AggFunc {
6252
return newMathReducer(mathMax)
6353
}
6454
case "union":
65-
pattern = func() Func {
55+
pattern = func() expr.AggFunc {
6656
return newUnion()
6757
}
6858
case "collect":
69-
pattern = func() Func {
59+
pattern = func() expr.AggFunc {
7060
return &collect{}
7161
}
7262
case "collect_map":
73-
pattern = func() Func {
63+
pattern = func() expr.AggFunc {
7464
return newCollectMap()
7565
}
7666
case "and":
77-
pattern = func() Func {
67+
pattern = func() expr.AggFunc {
7868
return &and{}
7969
}
8070
case "or":
81-
pattern = func() Func {
71+
pattern = func() expr.AggFunc {
8272
return &or{}
8373
}
8474
default:
@@ -91,7 +81,7 @@ func NewPattern(op string, distinct, hasarg bool) (Pattern, error) {
9181
switch op {
9282
case "avg", "collect", "count", "sum":
9383
// Distinct affects only these functions.
94-
return func() Func {
84+
return func() expr.AggFunc {
9585
return newDistinct(pattern())
9686
}, nil
9787
}

runtime/vam/expr/agg/avg.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package agg
22

33
import (
44
"github.com/brimdata/super"
5+
"github.com/brimdata/super/runtime/vam/expr"
56
"github.com/brimdata/super/vector"
67
)
78

@@ -10,7 +11,7 @@ type avg struct {
1011
count uint64
1112
}
1213

13-
var _ Func = (*avg)(nil)
14+
var _ expr.AggFunc = (*avg)(nil)
1415

1516
func (a *avg) Consume(vec vector.Any) {
1617
vec = vector.Under(vec)

runtime/vam/expr/agg/distinct.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,19 @@ import (
55

66
"github.com/brimdata/super"
77
samagg "github.com/brimdata/super/runtime/sam/expr/agg"
8+
"github.com/brimdata/super/runtime/vam/expr"
89
"github.com/brimdata/super/sbuf"
910
"github.com/brimdata/super/scode"
1011
"github.com/brimdata/super/vector"
1112
)
1213

1314
type distinct struct {
14-
fun Func
15+
fun expr.AggFunc
1516
buf []byte
1617
seen map[string]struct{}
1718
}
1819

19-
func newDistinct(f Func) Func {
20+
func newDistinct(f expr.AggFunc) expr.AggFunc {
2021
return &distinct{fun: f, seen: map[string]struct{}{}}
2122
}
2223

runtime/vam/expr/agg/math.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/brimdata/super"
77
"github.com/brimdata/super/runtime/sam/expr/coerce"
8+
"github.com/brimdata/super/runtime/vam/expr"
89
"github.com/brimdata/super/sup"
910
"github.com/brimdata/super/vector"
1011
)
@@ -26,7 +27,7 @@ func newMathReducer(f *mathFunc) *mathReducer {
2627
return &mathReducer{function: f}
2728
}
2829

29-
var _ Func = (*mathReducer)(nil)
30+
var _ expr.AggFunc = (*mathReducer)(nil)
3031

3132
func (m *mathReducer) Result(sctx *super.Context) vector.Any {
3233
if m.mixedTypesErr {

runtime/vam/expr/aggregator.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,28 @@ package expr
22

33
import (
44
"github.com/brimdata/super"
5-
"github.com/brimdata/super/runtime/vam/expr/agg"
65
"github.com/brimdata/super/vector"
76
)
87

8+
type AggFunc interface {
9+
Consume(vector.Any)
10+
ConsumeAsPartial(vector.Any)
11+
Result(*super.Context) vector.Any
12+
ResultAsPartial(*super.Context) vector.Any
13+
}
14+
15+
type AggPattern func() AggFunc
16+
917
type Aggregator struct {
10-
Pattern agg.Pattern
18+
Pattern AggPattern
1119
Name string
1220
Distinct bool
1321
Expr Evaluator
1422
Where Evaluator
1523
NoRip bool
1624
}
1725

18-
func NewAggregator(name string, distinct bool, expr Evaluator, where Evaluator) (*Aggregator, error) {
19-
pattern, err := agg.NewPattern(name, distinct, expr != nil)
20-
if err != nil {
21-
return nil, err
22-
}
26+
func NewAggregator(name string, distinct bool, expr Evaluator, where Evaluator, pattern AggPattern) (*Aggregator, error) {
2327
var norip bool
2428
if fn, ok := pattern().(interface{ NoRip() bool }); ok {
2529
norip = fn.NoRip()

runtime/vam/op/aggregate/aggtable.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/brimdata/super"
77
"github.com/brimdata/super/runtime/vam/expr"
8-
"github.com/brimdata/super/runtime/vam/expr/agg"
98
"github.com/brimdata/super/scode"
109
"github.com/brimdata/super/vector"
1110
"github.com/brimdata/super/vector/vbuild"
@@ -34,7 +33,7 @@ var _ aggTable = (*superTable)(nil)
3433

3534
type aggRow struct {
3635
keys []super.Value
37-
funcs []agg.Func
36+
funcs []expr.AggFunc
3837
}
3938

4039
func (s *superTable) update(keys []vector.Any, args []vector.Any) {

runtime/vam/op/aggregate/scalar.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"github.com/brimdata/super"
55
"github.com/brimdata/super/pkg/field"
66
"github.com/brimdata/super/runtime/vam/expr"
7-
"github.com/brimdata/super/runtime/vam/expr/agg"
87
"github.com/brimdata/super/vector"
98
"github.com/brimdata/super/vector/vio"
109
)
@@ -18,7 +17,7 @@ type scalarAggregate struct {
1817
partialsIn bool
1918
partialsOut bool
2019

21-
funcs []agg.Func
20+
funcs []expr.AggFunc
2221
}
2322

2423
func NewScalar(parent vio.Puller, sctx *super.Context, aggs []*expr.Aggregator, aggNames []field.Path, aggExprs []expr.Evaluator, partialsIn, partialsOut bool) (vio.Puller, error) {
@@ -81,8 +80,8 @@ func (s *scalarAggregate) consume(vecs ...vector.Any) vector.Any {
8180
return vector.NewNull(vecs[0].Len())
8281
}
8382

84-
func newFuncs(aggs []*expr.Aggregator) []agg.Func {
85-
var funcs []agg.Func
83+
func newFuncs(aggs []*expr.Aggregator) []expr.AggFunc {
84+
var funcs []expr.AggFunc
8685
for _, agg := range aggs {
8786
funcs = append(funcs, agg.Pattern())
8887
}

0 commit comments

Comments
 (0)