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()); + } }
