|
19 | 19 |
|
20 | 20 | import static com.amazon.opendistroforelasticsearch.sql.data.type.ExprCoreType.DOUBLE;
|
21 | 21 | import static com.amazon.opendistroforelasticsearch.sql.data.type.ExprCoreType.INTEGER;
|
| 22 | +import static com.amazon.opendistroforelasticsearch.sql.data.type.ExprCoreType.STRING; |
22 | 23 | import static java.util.Collections.emptyList;
|
23 | 24 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
24 | 25 |
|
@@ -72,6 +73,76 @@ void aggregation_in_expression_should_be_replaced() {
|
72 | 73 | );
|
73 | 74 | }
|
74 | 75 |
|
| 76 | + @Test |
| 77 | + void case_clause_should_be_replaced() { |
| 78 | + Expression caseClause = DSL.cases( |
| 79 | + null, |
| 80 | + DSL.when( |
| 81 | + dsl.equal(DSL.ref("age", INTEGER), DSL.literal(30)), |
| 82 | + DSL.literal("true"))); |
| 83 | + |
| 84 | + LogicalPlan logicalPlan = |
| 85 | + LogicalPlanDSL.aggregation( |
| 86 | + LogicalPlanDSL.relation("test"), |
| 87 | + emptyList(), |
| 88 | + ImmutableList.of(DSL.named( |
| 89 | + "CaseClause(whenClauses=[WhenClause(condition==(age, 30), result=\"true\")]," |
| 90 | + + " defaultResult=null)", |
| 91 | + caseClause))); |
| 92 | + |
| 93 | + assertEquals( |
| 94 | + DSL.ref( |
| 95 | + "CaseClause(whenClauses=[WhenClause(condition==(age, 30), result=\"true\")]," |
| 96 | + + " defaultResult=null)", STRING), |
| 97 | + optimize(caseClause, logicalPlan)); |
| 98 | + } |
| 99 | + |
| 100 | + @Test |
| 101 | + void aggregation_in_case_when_clause_should_be_replaced() { |
| 102 | + Expression caseClause = DSL.cases( |
| 103 | + null, |
| 104 | + DSL.when( |
| 105 | + dsl.equal(dsl.avg(DSL.ref("age", INTEGER)), DSL.literal(30)), |
| 106 | + DSL.literal("true"))); |
| 107 | + |
| 108 | + LogicalPlan logicalPlan = |
| 109 | + LogicalPlanDSL.aggregation( |
| 110 | + LogicalPlanDSL.relation("test"), |
| 111 | + ImmutableList.of(DSL.named("AVG(age)", dsl.avg(DSL.ref("age", INTEGER)))), |
| 112 | + ImmutableList.of(DSL.named("name", DSL.ref("name", STRING)))); |
| 113 | + |
| 114 | + assertEquals( |
| 115 | + DSL.cases( |
| 116 | + null, |
| 117 | + DSL.when( |
| 118 | + dsl.equal(DSL.ref("AVG(age)", DOUBLE), DSL.literal(30)), |
| 119 | + DSL.literal("true"))), |
| 120 | + optimize(caseClause, logicalPlan)); |
| 121 | + } |
| 122 | + |
| 123 | + @Test |
| 124 | + void aggregation_in_case_else_clause_should_be_replaced() { |
| 125 | + Expression caseClause = DSL.cases( |
| 126 | + dsl.avg(DSL.ref("age", INTEGER)), |
| 127 | + DSL.when( |
| 128 | + dsl.equal(DSL.ref("age", INTEGER), DSL.literal(30)), |
| 129 | + DSL.literal("true"))); |
| 130 | + |
| 131 | + LogicalPlan logicalPlan = |
| 132 | + LogicalPlanDSL.aggregation( |
| 133 | + LogicalPlanDSL.relation("test"), |
| 134 | + ImmutableList.of(DSL.named("AVG(age)", dsl.avg(DSL.ref("age", INTEGER)))), |
| 135 | + ImmutableList.of(DSL.named("name", DSL.ref("name", STRING)))); |
| 136 | + |
| 137 | + assertEquals( |
| 138 | + DSL.cases( |
| 139 | + DSL.ref("AVG(age)", DOUBLE), |
| 140 | + DSL.when( |
| 141 | + dsl.equal(DSL.ref("age", INTEGER), DSL.literal(30)), |
| 142 | + DSL.literal("true"))), |
| 143 | + optimize(caseClause, logicalPlan)); |
| 144 | + } |
| 145 | + |
75 | 146 | @Test
|
76 | 147 | void window_expression_should_be_replaced() {
|
77 | 148 | LogicalPlan logicalPlan =
|
|
0 commit comments