Skip to content

Commit 052cb0a

Browse files
ajroetkerAJ Roetker
andauthored
Add includer explicitly to iface of datemath (#49)
Co-authored-by: AJ Roetker <[email protected]>
1 parent ab4d67a commit 052cb0a

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

vm/datemath.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,37 +26,37 @@ type DateConverter struct {
2626
err error
2727
}
2828

29-
func FindBoundary(anchorTime time.Time, ctx expr.EvalIncludeContext, fns BoundaryFns) (time.Time, error) {
29+
func FindBoundary(anchorTime time.Time, ctx expr.EvalContext, includer expr.Includer, fns BoundaryFns) (time.Time, error) {
3030
dc := &DateConverter{
3131
at: anchorTime,
3232
}
3333
for _, fn := range fns {
34-
fn(dc, ctx)
34+
fn(dc, ctx, includer)
3535
}
3636
return dc.bt, dc.err
3737
}
3838

39-
type BoundaryFns []func(*DateConverter, expr.EvalIncludeContext)
39+
type BoundaryFns []func(*DateConverter, expr.EvalContext, expr.Includer)
4040

4141
func CalcBoundaryFns(n expr.Node) BoundaryFns {
4242
return findDateMathFn(n)
4343
}
4444

45-
func NewDateConverterWithAnchorTime(ctx expr.EvalIncludeContext, n expr.Node, at time.Time) (*DateConverter, error) {
45+
func NewDateConverterWithAnchorTime(ctx expr.EvalContext, includer expr.Includer, n expr.Node, at time.Time) (*DateConverter, error) {
4646
dc := &DateConverter{
4747
at: at,
4848
}
4949
fns := findDateMathFn(n)
50-
dc.bt, dc.err = FindBoundary(dc.at, ctx, fns)
50+
dc.bt, dc.err = FindBoundary(dc.at, ctx, includer, fns)
5151
if dc.err == nil && len(fns) > 0 {
5252
dc.HasDateMath = true
5353
}
5454
return dc, dc.err
5555
}
5656

5757
// NewDateConverter takes a node expression
58-
func NewDateConverter(ctx expr.EvalIncludeContext, n expr.Node) (*DateConverter, error) {
59-
return NewDateConverterWithAnchorTime(ctx, n, time.Now())
58+
func NewDateConverter(ctx expr.EvalContext, inc expr.Includer, n expr.Node) (*DateConverter, error) {
59+
return NewDateConverterWithAnchorTime(ctx, inc, n, time.Now())
6060
}
6161
func compareBoundaries(currBoundary, newBoundary time.Time) time.Time {
6262
// Should we check for is zero on the newBoundary?
@@ -136,7 +136,7 @@ func findDateMathFn(node expr.Node) BoundaryFns {
136136

137137
if nowRegex.MatchString(val) {
138138
argIdx := i
139-
fns = append(fns, func(d *DateConverter, ctx expr.EvalIncludeContext) {
139+
fns = append(fns, func(d *DateConverter, ctx expr.EvalContext, inc expr.Includer) {
140140
// If left side is datemath "now-3d" < ident then re-write to have ident on left
141141
var lhv value.Value
142142
op := n.Operator.T
@@ -249,7 +249,7 @@ func findDateMathFn(node expr.Node) BoundaryFns {
249249
// - Expression is true
250250
// - Will become false when Ct passes lower bound (exit event)
251251
// - Returns re-evaluation time when this will be exit the window
252-
func findBoundaryForBetween(n *expr.TriNode) func(d *DateConverter, ctx expr.EvalIncludeContext) {
252+
func findBoundaryForBetween(n *expr.TriNode) func(d *DateConverter, ctx expr.EvalContext, inc expr.Includer) {
253253

254254
// Check if first arg is IdentityNode and other two are StringNodes
255255
_, isFirstIdentity := n.Args[0].(*expr.IdentityNode)
@@ -268,9 +268,9 @@ func findBoundaryForBetween(n *expr.TriNode) func(d *DateConverter, ctx expr.Eva
268268
return nil
269269
}
270270

271-
return func(d *DateConverter, ctx expr.EvalIncludeContext) {
271+
return func(d *DateConverter, ctx expr.EvalContext, inc expr.Includer) {
272272

273-
lhv, ok := Eval(ctx, arg1)
273+
lhv, ok := EvalInc(inc, ctx, arg1)
274274
if !ok {
275275
return
276276
}

vm/datemath_test.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ func TestDateBoundaries(t *testing.T) {
132132
fs := rel.MustParseFilter(tc.filter)
133133

134134
// Converter to find/calculate date operations
135-
dc, err := vm.NewDateConverter(includeCtx, fs.Filter)
135+
dc, err := vm.NewDateConverter(includeCtx, includeCtx, fs.Filter)
136136
require.Equal(t, nil, err)
137137
require.True(t, dc.HasDateMath)
138138

139139
// initially we should not match
140-
matched, evalOk := vm.Matches(includeCtx, fs)
140+
matched, evalOk := vm.MatchesInc(includeCtx, includeCtx, fs)
141141
assert.True(t, evalOk, tc.filter)
142142
assert.Equal(t, tc.match, matched)
143143

@@ -191,7 +191,7 @@ func TestDateMath(t *testing.T) {
191191
fs := rel.MustParseFilter(tc.filter)
192192

193193
// Converter to find/calculate date operations
194-
dc, err := vm.NewDateConverter(evalCtx, fs.Filter)
194+
dc, err := vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
195195
require.NoError(t, err)
196196
require.True(t, dc.HasDateMath, tc.filter)
197197

@@ -200,12 +200,12 @@ func TestDateMath(t *testing.T) {
200200
assert.Equal(t, nil, err)
201201

202202
// Converter to find/calculate date operations
203-
dc, err = vm.NewDateConverter(evalCtx, node)
203+
dc, err = vm.NewDateConverter(evalCtx, evalCtx, node)
204204
assert.Equal(t, nil, err)
205205
assert.True(t, dc.HasDateMath)
206206

207207
// initially we should not match
208-
matched, evalOk := vm.Matches(evalCtx, fs)
208+
matched, evalOk := vm.MatchesInc(evalCtx, evalCtx, fs)
209209
assert.True(t, evalOk)
210210
assert.Equal(t, false, matched)
211211
/*
@@ -225,32 +225,32 @@ func TestDateMath(t *testing.T) {
225225
}
226226

227227
fs := rel.MustParseFilter(`FILTER AND (INCLUDE not_valid_lookup)`)
228-
_, err := vm.NewDateConverter(evalCtx, fs.Filter)
228+
_, err := vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
229229
// We assume that the inclusions are preresolved
230230
assert.Nil(t, err)
231231

232232
fs = rel.MustParseFilter(`FILTER AND ( last_event > "now-3x")`)
233-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
233+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
234234
assert.NotNil(t, err)
235235

236236
fs = rel.MustParseFilter(`FILTER AND ( last_event == "now-")`)
237-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
237+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
238238
assert.NotEqual(t, nil, err)
239239

240240
fs = rel.MustParseFilter(`FILTER AND ( last_event == "now+")`)
241-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
241+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
242242
assert.NotEqual(t, nil, err)
243243

244244
fs = rel.MustParseFilter(`FILTER AND ( last_event == "now+now")`)
245-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
245+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
246246
assert.NotEqual(t, nil, err)
247247

248248
fs = rel.MustParseFilter(`FILTER AND ( last_event == "now-3d")`)
249-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
249+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
250250
assert.Equal(t, nil, err)
251251

252252
fs = rel.MustParseFilter(`FILTER AND ( last_event == "now")`)
253-
_, err = vm.NewDateConverter(evalCtx, fs.Filter)
253+
_, err = vm.NewDateConverter(evalCtx, evalCtx, fs.Filter)
254254
assert.Equal(t, nil, err)
255255
}
256256

@@ -351,11 +351,11 @@ func TestDateBoundaryForBetween(t *testing.T) {
351351

352352
fs := rel.MustParseFilter(tc.filter)
353353

354-
dc, err := vm.NewDateConverterWithAnchorTime(includeCtx, fs.Filter, today)
354+
dc, err := vm.NewDateConverterWithAnchorTime(includeCtx, includeCtx, fs.Filter, today)
355355
require.NoError(t, err)
356356
require.True(t, dc.HasDateMath)
357357

358-
matched, evalOk := vm.Matches(includeCtx, fs)
358+
matched, evalOk := vm.MatchesInc(includeCtx, includeCtx, fs)
359359
assert.True(t, evalOk)
360360
assert.Equal(t, tc.match, matched)
361361

0 commit comments

Comments
 (0)