-
Notifications
You must be signed in to change notification settings - Fork 35
/
predicates.go
138 lines (123 loc) · 4.66 KB
/
predicates.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package iceberg
// IsNull is a convenience wrapper for calling UnaryPredicate(OpIsNull, t)
//
// Will panic if t is nil
func IsNull(t UnboundTerm) UnboundPredicate {
return UnaryPredicate(OpIsNull, t)
}
// NotNull is a convenience wrapper for calling UnaryPredicate(OpNotNull, t)
//
// Will panic if t is nil
func NotNull(t UnboundTerm) UnboundPredicate {
return UnaryPredicate(OpNotNull, t)
}
// IsNaN is a convenience wrapper for calling UnaryPredicate(OpIsNan, t)
//
// Will panic if t is nil
func IsNaN(t UnboundTerm) UnboundPredicate {
return UnaryPredicate(OpIsNan, t)
}
// NotNaN is a convenience wrapper for calling UnaryPredicate(OpNotNan, t)
//
// Will panic if t is nil
func NotNaN(t UnboundTerm) UnboundPredicate {
return UnaryPredicate(OpNotNan, t)
}
// IsIn is a convenience wrapper for constructing an unbound set predicate for
// OpIn. It returns a BooleanExpression instead of an UnboundPredicate because
// depending on the arguments, it can automatically reduce to AlwaysFalse or
// AlwaysTrue (if given no values for examples). It may also reduce to EqualTo
// if only one value is provided.
//
// Will panic if t is nil
func IsIn[T LiteralType](t UnboundTerm, vals ...T) BooleanExpression {
lits := make([]Literal, 0, len(vals))
for _, v := range vals {
lits = append(lits, NewLiteral(v))
}
return SetPredicate(OpIn, t, lits)
}
// NotIn is a convenience wrapper for constructing an unbound set predicate for
// OpNotIn. It returns a BooleanExpression instead of an UnboundPredicate because
// depending on the arguments, it can automatically reduce to AlwaysFalse or
// AlwaysTrue (if given no values for examples). It may also reduce to NotEqualTo
// if only one value is provided.
//
// Will panic if t is nil
func NotIn[T LiteralType](t UnboundTerm, vals ...T) BooleanExpression {
lits := make([]Literal, 0, len(vals))
for _, v := range vals {
lits = append(lits, NewLiteral(v))
}
return SetPredicate(OpNotIn, t, lits)
}
// EqualTo is a convenience wrapper for calling LiteralPredicate(OpEQ, t, NewLiteral(v))
//
// Will panic if t is nil
func EqualTo[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpEQ, t, NewLiteral(v))
}
// NotEqualTo is a convenience wrapper for calling LiteralPredicate(OpNEQ, t, NewLiteral(v))
//
// Will panic if t is nil
func NotEqualTo[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpNEQ, t, NewLiteral(v))
}
// GreaterThanEqual is a convenience wrapper for calling LiteralPredicate(OpGTEQ,
// t, NewLiteral(v))
//
// Will panic if t is nil
func GreaterThanEqual[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpGTEQ, t, NewLiteral(v))
}
// GreaterThan is a convenience wrapper for calling LiteralPredicate(OpGT,
// t, NewLiteral(v))
//
// Will panic if t is nil
func GreaterThan[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpGT, t, NewLiteral(v))
}
// LessThanEqual is a convenience wrapper for calling LiteralPredicate(OpLTEQ,
// t, NewLiteral(v))
//
// Will panic if t is nil
func LessThanEqual[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpLTEQ, t, NewLiteral(v))
}
// LessThan is a convenience wrapper for calling LiteralPredicate(OpLT,
// t, NewLiteral(v))
//
// Will panic if t is nil
func LessThan[T LiteralType](t UnboundTerm, v T) UnboundPredicate {
return LiteralPredicate(OpLT, t, NewLiteral(v))
}
// StartsWith is a convenience wrapper for calling LiteralPredicate(OpStartsWith,
// t, NewLiteral(v))
//
// Will panic if t is nil
func StartsWith(t UnboundTerm, v string) UnboundPredicate {
return LiteralPredicate(OpStartsWith, t, NewLiteral(v))
}
// NotStartsWith is a convenience wrapper for calling LiteralPredicate(OpNotStartsWith,
// t, NewLiteral(v))
//
// Will panic if t is nil
func NotStartsWith(t UnboundTerm, v string) UnboundPredicate {
return LiteralPredicate(OpNotStartsWith, t, NewLiteral(v))
}