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

caogaofei pushed a commit to branch beyyes/fix_having_bug
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 60187950f48ac673abd4c5ec315b2b54b366365b
Author: Beyyes <[email protected]>
AuthorDate: Fri Feb 23 15:30:21 2024 +0800

    try to fix having bug
---
 .../iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java     |  6 ++++++
 .../planner/distribution/AggregationAlignByDeviceTest.java    | 11 +++++++++++
 2 files changed, 17 insertions(+)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index c408b73498d..f2b36f79fac 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -930,6 +930,12 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       }
     }
 
+    if (conJunctions.isEmpty()) {
+      // havingExpression =
+      throw new SemanticException(
+          "The size of legal expression in having clause should be greater 
than 0.");
+    }
+
     havingExpression = PredicateUtils.combineConjuncts(new 
ArrayList<>(conJunctions));
     TSDataType outputType = analyzeExpressionType(analysis, havingExpression);
     if (outputType != TSDataType.BOOLEAN) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
index 0ed46adfedb..a2349cbde5f 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
@@ -448,4 +448,15 @@ public class AggregationAlignByDeviceTest {
     assertTrue(firstFiTopNode instanceof DeviceViewNode);
     assertTrue(firstFiTopNode.getChildren().get(0) instanceof 
HorizontallyConcatNode);
   }
+
+  @Test
+  public void hahaTest() {
+    sql = "select s1 from root.sg.d22 where XXXX>1 align by device";
+    // sql = "select first_value(s1) from root.sg.d22 
having(first_value(XXXX)>1) align by device";
+    analysis = Util.analyze(sql, context);
+    logicalPlanNode = Util.genLogicalPlan(analysis, context);
+    planner = new DistributionPlanner(analysis, new LogicalQueryPlan(context, 
logicalPlanNode));
+    plan = planner.planFragments();
+    assertEquals(2, plan.getInstances().size());
+  }
 }

Reply via email to