@@ -397,40 +397,32 @@ void testDateTimeV2CmpDateTimeV2() {
397397 new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 00:00:00.00" )),
398398 new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 23:59:59.99" )),
399399 new Not (new IsNull (datetime2 )))));
400+
401+ // when cast from high scale datetime to low scale datetime, don't change anything because the cast may generate null
400402 assertRewrite (new GreaterThan (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
401- new GreaterThan (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.99 " )));
403+ new GreaterThan (new Cast ( datetime2 , DateTimeV2Type . of ( 0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
402404 assertRewrite (new GreaterThanEqual (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
403- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.00 " )));
405+ new GreaterThanEqual (new Cast ( datetime2 , DateTimeV2Type . of ( 0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
404406 assertRewrite (new LessThan (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
405- new LessThan (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.00 " )));
407+ new LessThan (new Cast ( datetime2 , DateTimeV2Type . of ( 0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
406408 assertRewrite (new LessThanEqual (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
407- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.99 " )));
409+ new LessThanEqual (new Cast ( datetime2 , DateTimeV2Type . of ( 0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
408410 assertRewrite (new EqualTo (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
409- new And (
410- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.00" )),
411- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.99" ))));
411+ new EqualTo (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
412412 assertRewrite (new NullSafeEqual (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )),
413- new And (ImmutableList .of (
414- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.00" )),
415- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.99" )),
416- new Not (new IsNull (datetime2 )))));
413+ new NullSafeEqual (new Cast (datetime2 , DateTimeV2Type .of (0 )), new DateTimeV2Literal (DateTimeV2Type .of (0 ), "9999-12-31 12:34:56" )));
417414 assertRewrite (new GreaterThan (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
418- new GreaterThan (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.79 " )));
415+ new GreaterThan (new Cast ( datetime2 , DateTimeV2Type . of ( 1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7 " )));
419416 assertRewrite (new GreaterThanEqual (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
420- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.70 " )));
417+ new GreaterThanEqual (new Cast ( datetime2 , DateTimeV2Type . of ( 1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7 " )));
421418 assertRewrite (new LessThan (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
422- new LessThan (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.70 " )));
419+ new LessThan (new Cast ( datetime2 , DateTimeV2Type . of ( 1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7 " )));
423420 assertRewrite (new LessThanEqual (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
424- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.79 " )));
421+ new LessThanEqual (new Cast ( datetime2 , DateTimeV2Type . of ( 1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7 " )));
425422 assertRewrite (new EqualTo (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
426- new And (
427- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.70" )),
428- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.79" ))));
423+ new EqualTo (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )));
429424 assertRewrite (new NullSafeEqual (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )),
430- new And (ImmutableList .of (
431- new GreaterThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.70" )),
432- new LessThanEqual (datetime2 , new DateTimeV2Literal (DateTimeV2Type .of (2 ), "9999-12-31 12:34:56.79" )),
433- new Not (new IsNull (datetime2 )))));
425+ new NullSafeEqual (new Cast (datetime2 , DateTimeV2Type .of (1 )), new DateTimeV2Literal (DateTimeV2Type .of (1 ), "9999-12-31 12:34:56.7" )));
434426
435427 assertRewrite (new EqualTo (new Cast (datetime0 , DateTimeV2Type .of (1 )), new DateTimeV2Literal ("9999-12-31 23:59:59.1" )),
436428 ExpressionUtils .falseOrNull (datetime0 ));
0 commit comments