Skip to content

Commit

Permalink
[hotfix] use legacy case-when format before releasing 0.13 (#10291)
Browse files Browse the repository at this point in the history
  • Loading branch information
walterddr authored and Rong Rong committed Feb 16, 2023
1 parent bf05d92 commit 6f5a8fc
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 9 deletions.
Expand Up @@ -713,15 +713,16 @@ private static Expression toExpression(SqlNode node) {
SqlNode elseOperand = caseSqlNode.getElseOperand();
Expression caseFuncExpr = RequestUtils.getFunctionExpression("case");
Preconditions.checkState(whenOperands.size() == thenOperands.size());
for (int i = 0; i < whenOperands.size(); i++) {
SqlNode whenSqlNode = whenOperands.get(i);
// TODO: convert this to new format once 0.13 is released
for (SqlNode whenSqlNode : whenOperands.getList()) {
Expression whenExpression = toExpression(whenSqlNode);
if (isAggregateExpression(whenExpression)) {
throw new SqlCompilationException(
"Aggregation functions inside WHEN Clause is not supported - " + whenSqlNode);
}
caseFuncExpr.getFunctionCall().addToOperands(whenExpression);
SqlNode thenSqlNode = thenOperands.get(i);
}
for (SqlNode thenSqlNode : thenOperands.getList()) {
Expression thenExpression = toExpression(thenSqlNode);
if (isAggregateExpression(thenExpression)) {
throw new SqlCompilationException(
Expand Down
Expand Up @@ -93,11 +93,11 @@ public void testCaseWhenStatements() {
Assert.assertEquals(greatThanFunc.getOperator(), FilterKind.GREATER_THAN.name());
Assert.assertEquals(greatThanFunc.getOperands().get(0).getIdentifier().getName(), "Quantity");
Assert.assertEquals(greatThanFunc.getOperands().get(1).getLiteral().getFieldValue(), 30L);
Assert.assertEquals(caseFunc.getOperands().get(1).getLiteral().getFieldValue(), "The quantity is greater than 30");
Function equalsFunc = caseFunc.getOperands().get(2).getFunctionCall();
Function equalsFunc = caseFunc.getOperands().get(1).getFunctionCall();
Assert.assertEquals(equalsFunc.getOperator(), FilterKind.EQUALS.name());
Assert.assertEquals(equalsFunc.getOperands().get(0).getIdentifier().getName(), "Quantity");
Assert.assertEquals(equalsFunc.getOperands().get(1).getLiteral().getFieldValue(), 30L);
Assert.assertEquals(caseFunc.getOperands().get(2).getLiteral().getFieldValue(), "The quantity is greater than 30");
Assert.assertEquals(caseFunc.getOperands().get(3).getLiteral().getFieldValue(), "The quantity is 30");
Assert.assertEquals(caseFunc.getOperands().get(4).getLiteral().getFieldValue(), "The quantity is under 30");

Expand All @@ -124,16 +124,16 @@ public void testCaseWhenStatements() {
Assert.assertEquals(greatThanFunc.getOperator(), FilterKind.GREATER_THAN.name());
Assert.assertEquals(greatThanFunc.getOperands().get(0).getIdentifier().getName(), "Quantity");
Assert.assertEquals(greatThanFunc.getOperands().get(1).getLiteral().getFieldValue(), 30L);
Assert.assertEquals(caseFunc.getOperands().get(1).getLiteral().getFieldValue(), 3L);
greatThanFunc = caseFunc.getOperands().get(2).getFunctionCall();
greatThanFunc = caseFunc.getOperands().get(1).getFunctionCall();
Assert.assertEquals(greatThanFunc.getOperator(), FilterKind.GREATER_THAN.name());
Assert.assertEquals(greatThanFunc.getOperands().get(0).getIdentifier().getName(), "Quantity");
Assert.assertEquals(greatThanFunc.getOperands().get(1).getLiteral().getFieldValue(), 20L);
Assert.assertEquals(caseFunc.getOperands().get(3).getLiteral().getFieldValue(), 2L);
greatThanFunc = caseFunc.getOperands().get(4).getFunctionCall();
greatThanFunc = caseFunc.getOperands().get(2).getFunctionCall();
Assert.assertEquals(greatThanFunc.getOperator(), FilterKind.GREATER_THAN.name());
Assert.assertEquals(greatThanFunc.getOperands().get(0).getIdentifier().getName(), "Quantity");
Assert.assertEquals(greatThanFunc.getOperands().get(1).getLiteral().getFieldValue(), 10L);
Assert.assertEquals(caseFunc.getOperands().get(3).getLiteral().getFieldValue(), 3L);
Assert.assertEquals(caseFunc.getOperands().get(4).getLiteral().getFieldValue(), 2L);
Assert.assertEquals(caseFunc.getOperands().get(5).getLiteral().getFieldValue(), 1L);
Assert.assertEquals(caseFunc.getOperands().get(6).getLiteral().getFieldValue(), 0L);
}
Expand Down

0 comments on commit 6f5a8fc

Please sign in to comment.