-
Notifications
You must be signed in to change notification settings - Fork 914
/
predicate.go
72 lines (65 loc) · 1.91 KB
/
predicate.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
// Copyright 2019-present Facebook Inc. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.
package gen
// Op is a predicate for the where clause.
type Op int
// List of all builtin predicates.
const (
EQ Op = iota // =
NEQ // <>
GT // >
GTE // >=
LT // <
LTE // <=
IsNil // IS NULL / has
NotNil // IS NOT NULL / hasNot
In // within
NotIn // without
EqualFold // equals case-insensitive
Contains // containing
ContainsFold // containing case-insensitive
HasPrefix // startingWith
HasSuffix // endingWith
)
// Name returns the string representation of an predicate.
func (o Op) Name() string {
if int(o) < len(opText) {
return opText[o]
}
return "Unknown"
}
// Variadic reports if the predicate is a variadic function.
func (o Op) Variadic() bool {
return o == In || o == NotIn
}
// Niladic reports if the predicate is a niladic predicate.
func (o Op) Niladic() bool {
return o == IsNil || o == NotNil
}
var (
// operations text.
opText = [...]string{
EQ: "EQ",
NEQ: "NEQ",
GT: "GT",
GTE: "GTE",
LT: "LT",
LTE: "LTE",
IsNil: "IsNil",
NotNil: "NotNil",
EqualFold: "EqualFold",
Contains: "Contains",
ContainsFold: "ContainsFold",
HasPrefix: "HasPrefix",
HasSuffix: "HasSuffix",
In: "In",
NotIn: "NotIn",
}
// operations per type.
boolOps = []Op{EQ, NEQ}
enumOps = append(boolOps, In, NotIn)
numericOps = append(enumOps, GT, GTE, LT, LTE)
stringOps = append(numericOps, Contains, HasPrefix, HasSuffix)
nillableOps = []Op{IsNil, NotNil}
)