@@ -671,6 +671,8 @@ public void testSimplifyCaseConditionsFoldWhenFalse() {
671
671
new IfConditional (EMPTY , new Equals (EMPTY , TWO , ONE ), Literal .of (EMPTY , "bar2" )),
672
672
new IfConditional (EMPTY , new GreaterThan (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo2" )),
673
673
Literal .of (EMPTY , "default" )));
674
+ assertFalse (c .foldable ());
675
+
674
676
Expression e = new SimplifyCase ().rule (c );
675
677
assertEquals (Case .class , e .getClass ());
676
678
c = (Case ) e ;
@@ -696,13 +698,15 @@ public void testSimplifyCaseConditionsFoldWhenTrue() {
696
698
// ELSE 'default'
697
699
// END
698
700
699
- SimplifyCase rule = new SimplifyCase ();
700
701
Case c = new Case (EMPTY , Arrays .asList (
701
702
new IfConditional (EMPTY , new Equals (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo1" )),
702
703
new IfConditional (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "bar1" )),
703
704
new IfConditional (EMPTY , new Equals (EMPTY , TWO , ONE ), Literal .of (EMPTY , "bar2" )),
704
705
new IfConditional (EMPTY , new GreaterThan (EMPTY , getFieldAttribute (), ONE ), Literal .of (EMPTY , "foo2" )),
705
706
Literal .of (EMPTY , "default" )));
707
+ assertFalse (c .foldable ());
708
+
709
+ SimplifyCase rule = new SimplifyCase ();
706
710
Expression e = rule .rule (c );
707
711
assertEquals (Case .class , e .getClass ());
708
712
c = (Case ) e ;
@@ -713,7 +717,7 @@ public void testSimplifyCaseConditionsFoldWhenTrue() {
713
717
assertEquals (TypeResolution .TYPE_RESOLVED , c .typeResolved ());
714
718
}
715
719
716
- public void testSimplifyCaseConditionsFoldCompletely () {
720
+ public void testSimplifyCaseConditionsFoldCompletely_FoldableElse () {
717
721
// CASE WHEN 1 = 2 THEN 'foo1'
718
722
// WHEN 1 = 1 THEN 'foo2'
719
723
// ELSE 'default'
@@ -723,11 +727,13 @@ public void testSimplifyCaseConditionsFoldCompletely() {
723
727
//
724
728
// 'foo2'
725
729
726
- SimplifyCase rule = new SimplifyCase ();
727
730
Case c = new Case (EMPTY , Arrays .asList (
728
731
new IfConditional (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo1" )),
729
732
new IfConditional (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "foo2" )),
730
733
Literal .of (EMPTY , "default" )));
734
+ assertFalse (c .foldable ());
735
+
736
+ SimplifyCase rule = new SimplifyCase ();
731
737
Expression e = rule .rule (c );
732
738
assertEquals (Case .class , e .getClass ());
733
739
c = (Case ) e ;
@@ -738,9 +744,34 @@ public void testSimplifyCaseConditionsFoldCompletely() {
738
744
assertEquals (TypeResolution .TYPE_RESOLVED , c .typeResolved ());
739
745
}
740
746
741
- public void testSimplifyIif_ConditionTrue () {
747
+ public void testSimplifyCaseConditionsFoldCompletely_NonFoldableElse () {
748
+ // CASE WHEN 1 = 2 THEN 'foo1'
749
+ // ELSE myField
750
+ // END
751
+ //
752
+ // ==>
753
+ //
754
+ // myField (non-foldable)
755
+
756
+ Case c = new Case (EMPTY , Arrays .asList (
757
+ new IfConditional (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo1" )),
758
+ getFieldAttribute ("myField" )));
759
+ assertFalse (c .foldable ());
760
+
761
+ SimplifyCase rule = new SimplifyCase ();
762
+ Expression e = rule .rule (c );
763
+ assertEquals (Case .class , e .getClass ());
764
+ c = (Case ) e ;
765
+ assertEquals (0 , c .conditions ().size ());
766
+ assertFalse (c .foldable ());
767
+ assertEquals ("myField" , Expressions .name (c .elseResult ()));
768
+ }
769
+
770
+ public void testSimplifyIif_ConditionTrue_FoldableResult () {
742
771
SimplifyCase rule = new SimplifyCase ();
743
772
Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , ONE ), Literal .of (EMPTY , "foo" ), Literal .of (EMPTY , "bar" ));
773
+ assertTrue (iif .foldable ());
774
+
744
775
Expression e = rule .rule (iif );
745
776
assertEquals (Iif .class , e .getClass ());
746
777
iif = (Iif ) e ;
@@ -750,9 +781,26 @@ public void testSimplifyIif_ConditionTrue() {
750
781
assertEquals (TypeResolution .TYPE_RESOLVED , iif .typeResolved ());
751
782
}
752
783
753
- public void testSimplifyIif_ConditionFalse () {
784
+ public void testSimplifyIif_ConditionTrue_NonFoldableResult () {
785
+ SimplifyCase rule = new SimplifyCase ();
786
+ Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , ONE ), getFieldAttribute ("myField" ), Literal .of (EMPTY , "bar" ));
787
+ assertFalse (iif .foldable ());
788
+
789
+ Expression e = rule .rule (iif );
790
+ assertEquals (Iif .class , e .getClass ());
791
+ iif = (Iif ) e ;
792
+ assertEquals (1 , iif .conditions ().size ());
793
+ assertFalse (iif .foldable ());
794
+ assertTrue (iif .conditions ().get (0 ).condition ().foldable ());
795
+ assertEquals (Boolean .TRUE , iif .conditions ().get (0 ).condition ().fold ());
796
+ assertEquals ("myField" , Expressions .name (iif .conditions ().get (0 ).result ()));
797
+ }
798
+
799
+ public void testSimplifyIif_ConditionFalse_FoldableResult () {
754
800
SimplifyCase rule = new SimplifyCase ();
755
801
Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo" ), Literal .of (EMPTY , "bar" ));
802
+ assertTrue (iif .foldable ());
803
+
756
804
Expression e = rule .rule (iif );
757
805
assertEquals (Iif .class , e .getClass ());
758
806
iif = (Iif ) e ;
@@ -762,6 +810,19 @@ public void testSimplifyIif_ConditionFalse() {
762
810
assertEquals (TypeResolution .TYPE_RESOLVED , iif .typeResolved ());
763
811
}
764
812
813
+ public void testSimplifyIif_ConditionFalse_NonFoldableResult () {
814
+ SimplifyCase rule = new SimplifyCase ();
815
+ Iif iif = new Iif (EMPTY , new Equals (EMPTY , ONE , TWO ), Literal .of (EMPTY , "foo" ), getFieldAttribute ("myField" ));
816
+ assertFalse (iif .foldable ());
817
+
818
+ Expression e = rule .rule (iif );
819
+ assertEquals (Iif .class , e .getClass ());
820
+ iif = (Iif ) e ;
821
+ assertEquals (0 , iif .conditions ().size ());
822
+ assertFalse (iif .foldable ());
823
+ assertEquals ("myField" , Expressions .name (iif .elseResult ()));
824
+ }
825
+
765
826
//
766
827
// Logical simplifications
767
828
//
0 commit comments