48
48
import org .apache .doris .nereids .types .BigIntType ;
49
49
import org .apache .doris .nereids .types .BooleanType ;
50
50
import org .apache .doris .nereids .types .DataType ;
51
+ import org .apache .doris .nereids .types .DateTimeType ;
51
52
import org .apache .doris .nereids .types .DateTimeV2Type ;
53
+ import org .apache .doris .nereids .types .DateType ;
54
+ import org .apache .doris .nereids .types .DateV2Type ;
52
55
import org .apache .doris .nereids .types .DecimalV3Type ;
53
56
import org .apache .doris .nereids .types .DoubleType ;
54
57
import org .apache .doris .nereids .types .IntegerType ;
@@ -95,11 +98,11 @@ void testSimplifyComparisonPredicateRule() {
95
98
new LessThan (dv2 , dv2PlusOne ));
96
99
assertRewrite (
97
100
new EqualTo (new Cast (dv2 , DateTimeV2Type .SYSTEM_DEFAULT ), dtv2 ),
98
- new EqualTo ( new Cast ( dv2 , DateTimeV2Type . SYSTEM_DEFAULT ), dtv2 ) );
101
+ BooleanLiteral . FALSE );
99
102
100
103
assertRewrite (
101
104
new EqualTo (new Cast (d , DateTimeV2Type .SYSTEM_DEFAULT ), dtv2 ),
102
- new EqualTo ( new Cast ( d , DateTimeV2Type . SYSTEM_DEFAULT ), dtv2 ) );
105
+ BooleanLiteral . FALSE );
103
106
104
107
// test hour, minute and second all zero
105
108
Expression dtv2AtZeroClock = new DateTimeV2Literal (1 , 1 , 1 , 0 , 0 , 0 , 0 );
@@ -140,6 +143,100 @@ void testDateTimeV2CmpDateTimeV2() {
140
143
expression = new GreaterThan (left , right );
141
144
rewrittenExpression = executor .rewrite (typeCoercion (expression ), context );
142
145
Assertions .assertEquals (dt .getDataType (), rewrittenExpression .child (0 ).getDataType ());
146
+
147
+ Expression date = new SlotReference ("a" , DateV2Type .INSTANCE );
148
+ Expression datev1 = new SlotReference ("a" , DateType .INSTANCE );
149
+ Expression datetime0 = new SlotReference ("a" , DateTimeV2Type .of (0 ));
150
+ Expression datetime2 = new SlotReference ("a" , DateTimeV2Type .of (2 ));
151
+ Expression datetimev1 = new SlotReference ("a" , DateTimeType .INSTANCE );
152
+
153
+ // date
154
+ // cast (date as datetimev1) cmp datetimev1
155
+ assertRewrite (new EqualTo (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:00" )),
156
+ new EqualTo (date , new DateV2Literal ("2020-01-01" )));
157
+ assertRewrite (new EqualTo (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
158
+ ExpressionUtils .falseOrNull (date ));
159
+ assertRewrite (new NullSafeEqual (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
160
+ BooleanLiteral .FALSE );
161
+ assertRewrite (new GreaterThan (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
162
+ new GreaterThan (date , new DateV2Literal ("2020-01-01" )));
163
+ assertRewrite (new GreaterThanEqual (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
164
+ new GreaterThanEqual (date , new DateV2Literal ("2020-01-02" )));
165
+ assertRewrite (new LessThan (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
166
+ new LessThan (date , new DateV2Literal ("2020-01-02" )));
167
+ assertRewrite (new LessThanEqual (new Cast (date , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
168
+ new LessThanEqual (date , new DateV2Literal ("2020-01-01" )));
169
+ // cast (date as datev1) = datev1-literal
170
+ // assertRewrite(new EqualTo(new Cast(date, DateType.INSTANCE), new DateLiteral("2020-01-01")),
171
+ // new EqualTo(date, new DateV2Literal("2020-01-01")));
172
+ // assertRewrite(new GreaterThan(new Cast(date, DateType.INSTANCE), new DateLiteral("2020-01-01")),
173
+ // new GreaterThan(date, new DateV2Literal("2020-01-01")));
174
+
175
+ // cast (datev1 as datetimev1) cmp datetimev1
176
+ assertRewrite (new EqualTo (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:00" )),
177
+ new EqualTo (datev1 , new DateLiteral ("2020-01-01" )));
178
+ assertRewrite (new EqualTo (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
179
+ ExpressionUtils .falseOrNull (datev1 ));
180
+ assertRewrite (new NullSafeEqual (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
181
+ BooleanLiteral .FALSE );
182
+ assertRewrite (new GreaterThan (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
183
+ new GreaterThan (datev1 , new DateLiteral ("2020-01-01" )));
184
+ assertRewrite (new GreaterThanEqual (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
185
+ new GreaterThanEqual (datev1 , new DateLiteral ("2020-01-02" )));
186
+ assertRewrite (new LessThan (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
187
+ new LessThan (datev1 , new DateLiteral ("2020-01-02" )));
188
+ assertRewrite (new LessThanEqual (new Cast (datev1 , DateTimeType .INSTANCE ), new DateTimeLiteral ("2020-01-01 00:00:01" )),
189
+ new LessThanEqual (datev1 , new DateLiteral ("2020-01-01" )));
190
+ assertRewrite (new EqualTo (new Cast (datev1 , DateV2Type .INSTANCE ), new DateV2Literal ("2020-01-01" )),
191
+ new EqualTo (datev1 , new DateLiteral ("2020-01-01" )));
192
+ assertRewrite (new GreaterThan (new Cast (datev1 , DateV2Type .INSTANCE ), new DateV2Literal ("2020-01-01" )),
193
+ new GreaterThan (datev1 , new DateLiteral ("2020-01-01" )));
194
+
195
+ // cast (datetimev1 as datetime) cmp datetime
196
+ assertRewrite (new EqualTo (new Cast (datetimev1 , DateTimeV2Type .of (0 )), new DateTimeV2Literal ("2020-01-01 00:00:00" )),
197
+ new EqualTo (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:00" )));
198
+ assertRewrite (new GreaterThan (new Cast (datetimev1 , DateTimeV2Type .of (0 )), new DateTimeV2Literal ("2020-01-01 00:00:00" )),
199
+ new GreaterThan (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:00" )));
200
+ assertRewrite (new EqualTo (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
201
+ ExpressionUtils .falseOrNull (datetimev1 ));
202
+ assertRewrite (new NullSafeEqual (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
203
+ BooleanLiteral .FALSE );
204
+ assertRewrite (new GreaterThan (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
205
+ new GreaterThan (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:00" )));
206
+ assertRewrite (new GreaterThanEqual (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
207
+ new GreaterThanEqual (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:01" )));
208
+ assertRewrite (new LessThan (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
209
+ new LessThan (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:01" )));
210
+ assertRewrite (new LessThanEqual (new Cast (datetimev1 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
211
+ new LessThanEqual (datetimev1 , new DateTimeLiteral ("2020-01-01 00:00:00" )));
212
+
213
+ // cast (datetime0 as datetime) cmp datetime
214
+ assertRewrite (new EqualTo (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
215
+ ExpressionUtils .falseOrNull (datetime0 ));
216
+ assertRewrite (new NullSafeEqual (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
217
+ BooleanLiteral .FALSE );
218
+ assertRewrite (new GreaterThan (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
219
+ new GreaterThan (datetime0 , new DateTimeV2Literal ("2020-01-01 00:00:00" )));
220
+ assertRewrite (new GreaterThanEqual (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
221
+ new GreaterThanEqual (datetime0 , new DateTimeV2Literal ("2020-01-01 00:00:01" )));
222
+ assertRewrite (new LessThan (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
223
+ new LessThan (datetime0 , new DateTimeV2Literal ("2020-01-01 00:00:01" )));
224
+ assertRewrite (new LessThanEqual (new Cast (datetime0 , DateTimeV2Type .of (2 )), new DateTimeV2Literal ("2020-01-01 00:00:00.12" )),
225
+ new LessThanEqual (datetime0 , new DateTimeV2Literal ("2020-01-01 00:00:00" )));
226
+
227
+ // cast (datetime2 as datetime) cmp datetime
228
+ assertRewrite (new EqualTo (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
229
+ ExpressionUtils .falseOrNull (datetime2 ));
230
+ assertRewrite (new NullSafeEqual (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
231
+ BooleanLiteral .FALSE );
232
+ assertRewrite (new GreaterThan (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
233
+ new GreaterThan (datetime2 , new DateTimeV2Literal ("2020-01-01 00:00:00.12" )));
234
+ assertRewrite (new GreaterThanEqual (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
235
+ new GreaterThanEqual (datetime2 , new DateTimeV2Literal ("2020-01-01 00:00:00.13" )));
236
+ assertRewrite (new LessThan (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
237
+ new LessThan (datetime2 , new DateTimeV2Literal ("2020-01-01 00:00:00.13" )));
238
+ assertRewrite (new LessThanEqual (new Cast (datetime2 , DateTimeV2Type .of (3 )), new DateTimeV2Literal ("2020-01-01 00:00:00.123" )),
239
+ new LessThanEqual (datetime2 , new DateTimeV2Literal ("2020-01-01 00:00:00.12" )));
143
240
}
144
241
145
242
@ Test
0 commit comments