@@ -639,6 +639,8 @@ public void testSimplifyCaseConditionsFoldWhenFalse() {
639
639
new IfConditional (EMPTY , new Equals (EMPTY , TWO , ONE ), Literal .of (EMPTY , "bar2" )),
640
640
new IfConditional (EMPTY , new GreaterThan (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo2" )),
641
641
Literal .of (EMPTY , "default" )));
642
+ assertFalse (c .foldable ());
643
+
642
644
Expression e = new SimplifyCase ().rule (c );
643
645
assertEquals (Case .class , e .getClass ());
644
646
c = (Case ) e ;
@@ -664,13 +666,15 @@ public void testSimplifyCaseConditionsFoldWhenTrue() {
664
666
// ELSE 'default'
665
667
// END
666
668
667
- SimplifyCase rule = new SimplifyCase ();
668
669
Case c = new Case (EMPTY , Arrays .asList (
669
670
new IfConditional (EMPTY , new Equals (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo1" )),
670
671
new IfConditional (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "bar1" )),
671
672
new IfConditional (EMPTY , new Equals (EMPTY , TWO , ONE ), Literal .of (EMPTY , "bar2" )),
672
673
new IfConditional (EMPTY , new GreaterThan (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo2" )),
673
674
Literal .of (EMPTY , "default" )));
675
+ assertFalse (c .foldable ());
676
+
677
+ SimplifyCase rule = new SimplifyCase ();
674
678
Expression e = rule .rule (c );
675
679
assertEquals (Case .class , e .getClass ());
676
680
c = (Case ) e ;
@@ -681,7 +685,7 @@ public void testSimplifyCaseConditionsFoldWhenTrue() {
681
685
assertEquals (TypeResolution .TYPE_RESOLVED , c .typeResolved ());
682
686
}
683
687
684
- public void testSimplifyCaseConditionsFoldCompletely () {
688
+ public void testSimplifyCaseConditionsFoldCompletely_FoldableElse () {
685
689
// CASE WHEN 1 = 2 THEN 'foo1'
686
690
// WHEN 1 = 1 THEN 'foo2'
687
691
// ELSE 'default'
@@ -691,11 +695,13 @@ public void testSimplifyCaseConditionsFoldCompletely() {
691
695
//
692
696
// 'foo2'
693
697
694
- SimplifyCase rule = new SimplifyCase ();
695
698
Case c = new Case (EMPTY , Arrays .asList (
696
699
new IfConditional (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo1" )),
697
700
new IfConditional (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "foo2" )),
698
701
Literal .of (EMPTY , "default" )));
702
+ assertFalse (c .foldable ());
703
+
704
+ SimplifyCase rule = new SimplifyCase ();
699
705
Expression e = rule .rule (c );
700
706
assertEquals (Case .class , e .getClass ());
701
707
c = (Case ) e ;
@@ -706,9 +712,34 @@ public void testSimplifyCaseConditionsFoldCompletely() {
706
712
assertEquals (TypeResolution .TYPE_RESOLVED , c .typeResolved ());
707
713
}
708
714
709
- public void testSimplifyIif_ConditionTrue () {
715
+ public void testSimplifyCaseConditionsFoldCompletely_NonFoldableElse () {
716
+ // CASE WHEN 1 = 2 THEN 'foo1'
717
+ // ELSE myField
718
+ // END
719
+ //
720
+ // ==>
721
+ //
722
+ // myField (non-foldable)
723
+
724
+ Case c = new Case (EMPTY , Arrays .asList (
725
+ new IfConditional (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo1" )),
726
+ getFieldAttribute ("myField" )));
727
+ assertFalse (c .foldable ());
728
+
729
+ SimplifyCase rule = new SimplifyCase ();
730
+ Expression e = rule .rule (c );
731
+ assertEquals (Case .class , e .getClass ());
732
+ c = (Case ) e ;
733
+ assertEquals (0 , c .conditions ().size ());
734
+ assertFalse (c .foldable ());
735
+ assertEquals ("myField" , Expressions .name (c .elseResult ()));
736
+ }
737
+
738
+ public void testSimplifyIif_ConditionTrue_FoldableResult () {
710
739
SimplifyCase rule = new SimplifyCase ();
711
740
Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "foo" ), Literal .of (EMPTY , "bar" ));
741
+ assertTrue (iif .foldable ());
742
+
712
743
Expression e = rule .rule (iif );
713
744
assertEquals (Iif .class , e .getClass ());
714
745
iif = (Iif ) e ;
@@ -718,9 +749,26 @@ public void testSimplifyIif_ConditionTrue() {
718
749
assertEquals (TypeResolution .TYPE_RESOLVED , iif .typeResolved ());
719
750
}
720
751
721
- public void testSimplifyIif_ConditionFalse () {
752
+ public void testSimplifyIif_ConditionTrue_NonFoldableResult () {
753
+ SimplifyCase rule = new SimplifyCase ();
754
+ Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , ONE ), getFieldAttribute ("myField" ), Literal .of (EMPTY , "bar" ));
755
+ assertFalse (iif .foldable ());
756
+
757
+ Expression e = rule .rule (iif );
758
+ assertEquals (Iif .class , e .getClass ());
759
+ iif = (Iif ) e ;
760
+ assertEquals (1 , iif .conditions ().size ());
761
+ assertFalse (iif .foldable ());
762
+ assertTrue (iif .conditions ().get (0 ).condition ().foldable ());
763
+ assertEquals (Boolean .TRUE , iif .conditions ().get (0 ).condition ().fold ());
764
+ assertEquals ("myField" , Expressions .name (iif .conditions ().get (0 ).result ()));
765
+ }
766
+
767
+ public void testSimplifyIif_ConditionFalse_FoldableResult () {
722
768
SimplifyCase rule = new SimplifyCase ();
723
769
Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo" ), Literal .of (EMPTY , "bar" ));
770
+ assertTrue (iif .foldable ());
771
+
724
772
Expression e = rule .rule (iif );
725
773
assertEquals (Iif .class , e .getClass ());
726
774
iif = (Iif ) e ;
@@ -730,6 +778,19 @@ public void testSimplifyIif_ConditionFalse() {
730
778
assertEquals (TypeResolution .TYPE_RESOLVED , iif .typeResolved ());
731
779
}
732
780
781
+ public void testSimplifyIif_ConditionFalse_NonFoldableResult () {
782
+ SimplifyCase rule = new SimplifyCase ();
783
+ Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo" ), getFieldAttribute ("myField" ));
784
+ assertFalse (iif .foldable ());
785
+
786
+ Expression e = rule .rule (iif );
787
+ assertEquals (Iif .class , e .getClass ());
788
+ iif = (Iif ) e ;
789
+ assertEquals (0 , iif .conditions ().size ());
790
+ assertFalse (iif .foldable ());
791
+ assertEquals ("myField" , Expressions .name (iif .elseResult ()));
792
+ }
793
+
733
794
//
734
795
// Logical simplifications
735
796
//
0 commit comments