This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 6764244bf6 Fix CASE WHEN expression operands ordering. (#11328)
6764244bf6 is described below

commit 6764244bf643c1ef390e278c4bb5111ea89561c6
Author: Shen Yu <[email protected]>
AuthorDate: Sun Aug 13 17:29:06 2023 -0700

    Fix CASE WHEN expression operands ordering. (#11328)
---
 .../java/org/apache/pinot/sql/parsers/CalciteSqlParser.java  |  8 ++++----
 .../org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java | 12 ++++++------
 .../test/java/org/apache/pinot/queries/ExprMinMaxTest.java   |  2 +-
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java 
b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
index cc7b7f5a94..5c9a4ec1c5 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/sql/parsers/CalciteSqlParser.java
@@ -716,16 +716,16 @@ public class CalciteSqlParser {
         SqlNode elseOperand = caseSqlNode.getElseOperand();
         Expression caseFuncExpr = RequestUtils.getFunctionExpression("case");
         Preconditions.checkState(whenOperands.size() == thenOperands.size());
-        // TODO: convert this to new format once 0.13 is released
-        for (SqlNode whenSqlNode : whenOperands.getList()) {
+        for (int i = 0; i < whenOperands.size(); i++) {
+          SqlNode whenSqlNode = whenOperands.get(i);
           Expression whenExpression = toExpression(whenSqlNode);
           if (isAggregateExpression(whenExpression)) {
             throw new SqlCompilationException(
                 "Aggregation functions inside WHEN Clause is not supported - " 
+ whenSqlNode);
           }
           caseFuncExpr.getFunctionCall().addToOperands(whenExpression);
-        }
-        for (SqlNode thenSqlNode : thenOperands.getList()) {
+
+          SqlNode thenSqlNode = thenOperands.get(i);
           Expression thenExpression = toExpression(thenSqlNode);
           if (isAggregateExpression(thenExpression)) {
             throw new SqlCompilationException(
diff --git 
a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
 
b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
index 6b5a515858..a6e99867a8 100644
--- 
a/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
+++ 
b/pinot-common/src/test/java/org/apache/pinot/sql/parsers/CalciteSqlCompilerTest.java
@@ -96,11 +96,11 @@ public class CalciteSqlCompilerTest {
     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);
-    Function equalsFunc = caseFunc.getOperands().get(1).getFunctionCall();
+    
Assert.assertEquals(caseFunc.getOperands().get(1).getLiteral().getFieldValue(), 
"The quantity is greater than 30");
+    Function equalsFunc = caseFunc.getOperands().get(2).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");
 
@@ -127,16 +127,16 @@ public class CalciteSqlCompilerTest {
     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);
-    greatThanFunc = caseFunc.getOperands().get(1).getFunctionCall();
+    
Assert.assertEquals(caseFunc.getOperands().get(1).getLiteral().getFieldValue(), 
3L);
+    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(),
 20L);
-    greatThanFunc = caseFunc.getOperands().get(2).getFunctionCall();
+    
Assert.assertEquals(caseFunc.getOperands().get(3).getLiteral().getFieldValue(), 
2L);
+    greatThanFunc = caseFunc.getOperands().get(4).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);
   }
diff --git 
a/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java 
b/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
index 9fbb8cd646..5c73edb2a4 100644
--- a/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
@@ -430,7 +430,7 @@ public class ExprMinMaxTest extends BaseQueriesTest {
     assertNull(rows.get(0)[1]);
     assertEquals(resultTable.getDataSchema().getColumnName(0), 
"exprmax(longColumn,intColumn)");
     assertEquals(resultTable.getDataSchema().getColumnName(1),
-        
"exprmin(stringColumn,case(equals(stringColumn,'a33'),equals(stringColumn,'a22'),'b','a','c'))");
+        
"exprmin(stringColumn,case(equals(stringColumn,'a33'),'b',equals(stringColumn,'a22'),'a','c'))");
     Assert.assertEquals(resultTable.getDataSchema().getColumnDataType(0), 
DataSchema.ColumnDataType.STRING);
     Assert.assertEquals(resultTable.getDataSchema().getColumnDataType(1), 
DataSchema.ColumnDataType.STRING);
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to