23
23
import static com .amazon .opendistroforelasticsearch .sql .data .model .ExprValueUtils .LITERAL_TRUE ;
24
24
import static com .amazon .opendistroforelasticsearch .sql .data .model .ExprValueUtils .booleanValue ;
25
25
import static com .amazon .opendistroforelasticsearch .sql .data .type .ExprCoreType .BOOLEAN ;
26
+ import static java .lang .Enum .valueOf ;
26
27
import static org .junit .jupiter .api .Assertions .assertEquals ;
27
28
28
29
import com .amazon .opendistroforelasticsearch .sql .data .model .ExprNullValue ;
29
30
import com .amazon .opendistroforelasticsearch .sql .data .model .ExprValue ;
30
31
import com .amazon .opendistroforelasticsearch .sql .data .model .ExprValueUtils ;
32
+ import com .amazon .opendistroforelasticsearch .sql .data .type .ExprCoreType ;
31
33
import com .amazon .opendistroforelasticsearch .sql .expression .DSL ;
32
34
import com .amazon .opendistroforelasticsearch .sql .expression .Expression ;
33
35
import com .amazon .opendistroforelasticsearch .sql .expression .ExpressionTestBase ;
34
36
import com .amazon .opendistroforelasticsearch .sql .expression .FunctionExpression ;
35
-
37
+ import com . google . common . collect . Lists ;
36
38
import java .lang .reflect .Array ;
37
39
import java .util .ArrayList ;
40
+ import java .util .Arrays ;
41
+ import java .util .List ;
42
+ import java .util .stream .Collectors ;
43
+ import java .util .stream .Stream ;
38
44
39
45
import org .junit .jupiter .api .Test ;
40
46
import org .junit .jupiter .params .ParameterizedTest ;
47
+ import org .junit .jupiter .params .provider .Arguments ;
48
+ import org .junit .jupiter .params .provider .MethodSource ;
41
49
import org .junit .jupiter .params .provider .ValueSource ;
42
50
43
51
class UnaryPredicateOperatorTest extends ExpressionTestBase {
@@ -50,6 +58,100 @@ public void test_not(Boolean v) {
50
58
assertEquals (String .format ("not(%s)" , v .toString ()), not .toString ());
51
59
}
52
60
61
+ private static Stream <Arguments > isNullArguments () {
62
+ ArrayList <Expression > expressions = new ArrayList <>();
63
+ expressions .add (DSL .literal ("test" ));
64
+ expressions .add (DSL .literal (100 ));
65
+ expressions .add (DSL .literal ("" ));
66
+ expressions .add (DSL .literal (LITERAL_NULL ));
67
+
68
+ return Lists .cartesianProduct (expressions , expressions ).stream ()
69
+ .map (list -> {
70
+ Expression e1 = list .get (0 );
71
+ if (e1 .valueOf (valueEnv ()).isNull ()
72
+ || e1 .valueOf (valueEnv ()).isMissing ()) {
73
+ return Arguments .of (e1 , DSL .literal (LITERAL_TRUE ));
74
+ } else {
75
+ return Arguments .of (e1 , DSL .literal (LITERAL_FALSE ));
76
+ }
77
+ });
78
+ }
79
+
80
+ private static Stream <Arguments > ifNullArguments () {
81
+ ArrayList <Expression > exprValueArrayList = new ArrayList <>();
82
+ exprValueArrayList .add (DSL .literal (123 ));
83
+ exprValueArrayList .add (DSL .literal ("test" ));
84
+ exprValueArrayList .add (DSL .literal (321 ));
85
+ exprValueArrayList .add (DSL .literal ("" ));
86
+
87
+ return Lists .cartesianProduct (exprValueArrayList , exprValueArrayList ).stream ()
88
+ .map (list -> {
89
+ Expression e1 = list .get (0 );
90
+ Expression e2 = list .get (1 );
91
+ if (e1 .valueOf (valueEnv ()).value () == LITERAL_NULL .value ()
92
+ || e1 .valueOf (valueEnv ()).value () == LITERAL_MISSING ) {
93
+ return Arguments .of (e1 , e2 , e2 );
94
+ } else {
95
+ return Arguments .of (e1 , e2 , e1 );
96
+ }
97
+ });
98
+ }
99
+
100
+ private static Stream <Arguments > nullIfArguments () {
101
+ ArrayList <Expression > exprValueArrayList = new ArrayList <>();
102
+ exprValueArrayList .add (DSL .literal (123 ));
103
+ exprValueArrayList .add (DSL .literal (321 ));
104
+
105
+ return Lists .cartesianProduct (exprValueArrayList , exprValueArrayList ).stream ()
106
+ .map (list -> {
107
+ Expression e1 = list .get (0 );
108
+ Expression e2 = list .get (1 );
109
+
110
+ if (e1 .equals (e2 )) {
111
+ return Arguments .of (e1 , e2 , DSL .literal (LITERAL_NULL ));
112
+ } else {
113
+ return Arguments .of (e1 , e2 , e1 );
114
+ }
115
+ });
116
+ }
117
+
118
+ private static Stream <Arguments > exprIfNullArguments () {
119
+ ArrayList <ExprValue > exprValues = new ArrayList <>();
120
+ exprValues .add (LITERAL_NULL );
121
+ exprValues .add (LITERAL_MISSING );
122
+ exprValues .add (ExprValueUtils .integerValue (123 ));
123
+ exprValues .add (ExprValueUtils .stringValue ("test" ));
124
+
125
+ return Lists .cartesianProduct (exprValues , exprValues ).stream ()
126
+ .map (list -> {
127
+ ExprValue e1 = list .get (0 );
128
+ ExprValue e2 = list .get (1 );
129
+ if (e1 .isNull () || e1 .isMissing ()) {
130
+ return Arguments .of (e1 , e2 , e2 );
131
+ } else {
132
+ return Arguments .of (e1 , e2 , e1 );
133
+ }
134
+ });
135
+ }
136
+
137
+ private static Stream <Arguments > exprNullIfArguments () {
138
+ ArrayList <ExprValue > exprValues = new ArrayList <>();
139
+ exprValues .add (LITERAL_NULL );
140
+ exprValues .add (LITERAL_MISSING );
141
+ exprValues .add (ExprValueUtils .integerValue (123 ));
142
+
143
+ return Lists .cartesianProduct (exprValues , exprValues ).stream ()
144
+ .map (list -> {
145
+ ExprValue e1 = list .get (0 );
146
+ ExprValue e2 = list .get (1 );
147
+ if (e1 .equals (e2 )) {
148
+ return Arguments .of (e1 , e2 , LITERAL_NULL );
149
+ } else {
150
+ return Arguments .of (e1 , e2 , e1 );
151
+ }
152
+ });
153
+ }
154
+
53
155
@ Test
54
156
public void test_not_null () {
55
157
FunctionExpression expression = dsl .not (DSL .ref (BOOL_TYPE_NULL_VALUE_FIELD , BOOLEAN ));
@@ -75,25 +177,6 @@ public void test_is_null_predicate() {
75
177
assertEquals (LITERAL_TRUE , expression .valueOf (valueEnv ()));
76
178
}
77
179
78
- @ Test
79
- public void test_isnull_predicate () {
80
- ArrayList <Expression > exprValueArrayList = new ArrayList <>();
81
- exprValueArrayList .add (dsl .literal ("test" ));
82
- exprValueArrayList .add (dsl .literal (100 ));
83
- exprValueArrayList .add (dsl .literal ("" ));
84
-
85
- for (Expression expression : exprValueArrayList ) {
86
- FunctionExpression functionExpression = dsl .isnull (expression );
87
- assertEquals (BOOLEAN , functionExpression .type ());
88
- if (expression .valueOf (valueEnv ()) == LITERAL_NULL
89
- || expression .valueOf (valueEnv ()) == LITERAL_MISSING ) {
90
- assertEquals (LITERAL_TRUE , functionExpression .valueOf (valueEnv ()));
91
- } else {
92
- assertEquals (LITERAL_FALSE , functionExpression .valueOf (valueEnv ()));
93
- }
94
- }
95
- }
96
-
97
180
@ Test
98
181
public void test_is_not_null_predicate () {
99
182
FunctionExpression expression = dsl .isnotnull (DSL .literal (1 ));
@@ -105,81 +188,34 @@ public void test_is_not_null_predicate() {
105
188
assertEquals (LITERAL_FALSE , expression .valueOf (valueEnv ()));
106
189
}
107
190
108
- @ Test
109
- public void test_ifnull_predicate () {
110
- ArrayList <Expression > exprValueArrayList = new ArrayList <>();
111
- exprValueArrayList .add (dsl .literal (100 ));
112
- exprValueArrayList .add (dsl .literal (200 ));
113
-
114
- for (Expression expressionOne : exprValueArrayList ) {
115
- for (Expression expressionTwo : exprValueArrayList ) {
116
- FunctionExpression functionExpression = dsl .ifnull (expressionOne , expressionTwo );
117
- if (expressionOne .valueOf (valueEnv ()) == LITERAL_NULL
118
- || expressionOne .valueOf (valueEnv ()) == LITERAL_MISSING ) {
119
- assertEquals (expressionTwo .valueOf (valueEnv ()), functionExpression .valueOf (valueEnv ()));
120
- } else {
121
- assertEquals (expressionOne .valueOf (valueEnv ()), functionExpression .valueOf (valueEnv ()));
122
- }
123
- }
124
- }
125
-
191
+ @ ParameterizedTest
192
+ @ MethodSource ("isNullArguments" )
193
+ public void test_isnull_predicate (Expression v1 , Expression expected ) {
194
+ assertEquals (expected .valueOf (valueEnv ()), dsl .isnull (v1 ).valueOf (valueEnv ()));
126
195
}
127
196
128
- @ Test
129
- public void test_nullif_predicate () {
130
- ArrayList <Expression > exprValueArrayList = new ArrayList <>();
131
- exprValueArrayList .add (DSL .literal (123 ));
132
- exprValueArrayList .add (DSL .literal (321 ));
133
-
134
- for (Expression v1 : exprValueArrayList ) {
135
- for (Expression v2 : exprValueArrayList ) {
136
- FunctionExpression result = dsl .nullif (v1 , v2 );
137
- if (v1 .valueOf (valueEnv ()) == v2 .valueOf (valueEnv ())) {
138
- assertEquals (LITERAL_NULL , result .valueOf (valueEnv ()));
139
- } else {
140
- assertEquals (v1 .valueOf (valueEnv ()), result .valueOf (valueEnv ()));
141
- }
142
- }
143
- }
197
+ @ ParameterizedTest
198
+ @ MethodSource ("ifNullArguments" )
199
+ public void test_ifnull_predicate (Expression v1 , Expression v2 , Expression expected ) {
200
+ assertEquals (expected .valueOf (valueEnv ()), dsl .ifnull (v1 , v2 ).valueOf (valueEnv ()));
144
201
}
145
202
146
- @ Test
147
- public void test_exprIfNull () {
148
- ArrayList <ExprValue > exprValues = new ArrayList <>();
149
- exprValues .add (LITERAL_NULL );
150
- exprValues .add (LITERAL_MISSING );
151
- exprValues .add (ExprValueUtils .integerValue (123 ));
152
- exprValues .add (ExprValueUtils .stringValue ("test" ));
203
+ @ ParameterizedTest
204
+ @ MethodSource ("exprIfNullArguments" )
205
+ public void test_exprIfNull_predicate (ExprValue v1 , ExprValue v2 , ExprValue expected ) {
206
+ assertEquals (expected .value (), UnaryPredicateOperator .exprIfNull (v1 , v2 ).value ());
207
+ }
153
208
154
- for (ExprValue exprValueOne : exprValues ) {
155
- for (ExprValue exprValueTwo : exprValues ) {
156
- ExprValue result = UnaryPredicateOperator .exprIfNull (exprValueOne , exprValueTwo );
157
- if (exprValueOne .isNull () || exprValueOne .isMissing ()) {
158
- assertEquals (exprValueTwo .value (), result .value ());
159
- } else {
160
- assertEquals (exprValueOne .value (), result .value ());
161
- }
162
- }
163
- }
209
+ @ ParameterizedTest
210
+ @ MethodSource ("nullIfArguments" )
211
+ public void test_nullif_predicate (Expression v1 , Expression v2 , Expression expected ) {
212
+ assertEquals (expected .valueOf (valueEnv ()), dsl .nullif (v1 , v2 ).valueOf (valueEnv ()));
164
213
}
165
214
166
- @ Test
167
- public void test_exprNullIf () {
168
- ArrayList <ExprValue > exprValues = new ArrayList <>();
169
- exprValues .add (LITERAL_NULL );
170
- exprValues .add (LITERAL_MISSING );
171
- exprValues .add (ExprValueUtils .integerValue (123 ));
172
- exprValues .add (ExprValueUtils .integerValue (456 ));
173
-
174
- for (ExprValue exprValueOne : exprValues ) {
175
- for (ExprValue exprValueTwo : exprValues ) {
176
- ExprValue result = UnaryPredicateOperator .exprNullIf (exprValueOne , exprValueTwo );
177
- if (exprValueOne .equals (exprValueTwo )) {
178
- assertEquals (LITERAL_NULL .value (), result .value ());
179
- } else {
180
- assertEquals (exprValueOne .value (), result .value ());
181
- }
182
- }
183
- }
215
+ @ ParameterizedTest
216
+ @ MethodSource ("exprNullIfArguments" )
217
+ public void test_exprNullIf_predicate (ExprValue v1 , ExprValue v2 , ExprValue expected ) {
218
+ assertEquals (expected .value (), UnaryPredicateOperator .exprNullIf (v1 , v2 ).value ());
184
219
}
220
+
185
221
}
0 commit comments