/
logical.go
81 lines (70 loc) · 1.28 KB
/
logical.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
package agg
import (
"github.com/brimdata/zed"
)
type And struct {
val *bool
}
func (a *And) Consume(v zed.Value) error {
if v.Bytes == nil {
return nil
}
if v.Type != zed.TypeBool {
//l.TypeMismatch++
return nil
}
if a.val == nil {
b := true
a.val = &b
}
*a.val = *a.val && zed.IsTrue(v.Bytes)
return nil
}
func (a *And) Result(*zed.Context) (zed.Value, error) {
if a.val == nil {
return zed.Value{Type: zed.TypeBool}, nil
}
if *a.val {
return zed.True, nil
}
return zed.False, nil
}
func (a *And) ConsumeAsPartial(v zed.Value) error {
return a.Consume(v)
}
func (a *And) ResultAsPartial(*zed.Context) (zed.Value, error) {
return a.Result(nil)
}
type Or struct {
val *bool
}
func (o *Or) Consume(v zed.Value) error {
if v.Bytes == nil {
return nil
}
if v.Type != zed.TypeBool {
//l.TypeMismatch++
return nil
}
if o.val == nil {
b := false
o.val = &b
}
*o.val = *o.val || zed.IsTrue(v.Bytes)
return nil
}
func (o *Or) Result(*zed.Context) (zed.Value, error) {
if o.val == nil {
return zed.Value{Type: zed.TypeBool}, nil
}
if *o.val {
return zed.True, nil
}
return zed.False, nil
}
func (o *Or) ConsumeAsPartial(v zed.Value) error {
return o.Consume(v)
}
func (o *Or) ResultAsPartial(*zed.Context) (zed.Value, error) {
return o.Result(nil)
}