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

hui pushed a commit to branch lmh/fastFE
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 871c7f76cd520b5e08913c037e920f7d33e460af
Author: liuminghui233 <[email protected]>
AuthorDate: Sun May 7 22:41:51 2023 +0800

    add SimpleAggregationQueryStatement
---
 .../db/mpp/plan/parser/StatementGenerator.java     |  7 +--
 .../db/mpp/plan/statement/StatementVisitor.java    |  6 +++
 .../db/mpp/plan/statement/crud/QueryStatement.java |  6 +--
 .../crud/SimpleAggregationQueryStatement.java      | 62 ++++++++++++++++++++++
 4 files changed, 73 insertions(+), 8 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
index a4506737024..d14a03048b0 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/StatementGenerator.java
@@ -49,6 +49,7 @@ import 
org.apache.iotdb.db.mpp.plan.statement.crud.InsertRowsOfOneDeviceStatemen
 import org.apache.iotdb.db.mpp.plan.statement.crud.InsertRowsStatement;
 import org.apache.iotdb.db.mpp.plan.statement.crud.InsertTabletStatement;
 import org.apache.iotdb.db.mpp.plan.statement.crud.QueryStatement;
+import 
org.apache.iotdb.db.mpp.plan.statement.crud.SimpleAggregationQueryStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.metadata.CreateAlignedTimeSeriesStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.metadata.CreateMultiTimeSeriesStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.metadata.CreateTimeSeriesStatement;
@@ -213,11 +214,7 @@ public class StatementGenerator {
   public static Statement createStatement(TSAggregationQueryReq req, ZoneId 
zoneId)
       throws IllegalPathException {
     final long startTime = System.nanoTime();
-    QueryStatement queryStatement = new QueryStatement();
-
-    FromComponent fromComponent = new FromComponent();
-    fromComponent.addPrefixPath(new PartialPath("", false));
-    queryStatement.setFromComponent(fromComponent);
+    SimpleAggregationQueryStatement queryStatement = new 
SimpleAggregationQueryStatement();
 
     SelectComponent selectComponent = new SelectComponent(zoneId);
     List<PartialPath> selectPaths = new ArrayList<>();
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
index 8a5bcf18ab6..5ec103d28f8 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
@@ -28,6 +28,7 @@ import 
org.apache.iotdb.db.mpp.plan.statement.crud.InsertStatement;
 import org.apache.iotdb.db.mpp.plan.statement.crud.InsertTabletStatement;
 import org.apache.iotdb.db.mpp.plan.statement.crud.LoadTsFileStatement;
 import org.apache.iotdb.db.mpp.plan.statement.crud.QueryStatement;
+import 
org.apache.iotdb.db.mpp.plan.statement.crud.SimpleAggregationQueryStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.internal.InternalBatchActivateTemplateStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.internal.InternalCreateMultiTimeSeriesStatement;
 import 
org.apache.iotdb.db.mpp.plan.statement.internal.InternalCreateTimeSeriesStatement;
@@ -264,6 +265,11 @@ public abstract class StatementVisitor<R, C> {
     return visitStatement(queryStatement, context);
   }
 
+  public R visitSimpleAggregationQuery(
+      SimpleAggregationQueryStatement simpleAggregationQueryStatement, C 
context) {
+    return visitStatement(simpleAggregationQueryStatement, context);
+  }
+
   // Insert Statement
   public R visitInsert(InsertStatement insertStatement, C context) {
     return visitStatement(insertStatement, context);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
index 00ecae2d99e..7e318e56b41 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/QueryStatement.java
@@ -72,9 +72,9 @@ import java.util.Set;
  */
 public class QueryStatement extends Statement {
 
-  private SelectComponent selectComponent;
+  protected SelectComponent selectComponent;
   private FromComponent fromComponent;
-  private WhereCondition whereCondition;
+  protected WhereCondition whereCondition;
   private HavingCondition havingCondition;
 
   // row limit for result set. The default value is 0, which means no limit
@@ -94,7 +94,7 @@ public class QueryStatement extends Statement {
   private ResultSetFormat resultSetFormat = ResultSetFormat.ALIGN_BY_TIME;
 
   // `GROUP BY TIME` clause
-  private GroupByTimeComponent groupByTimeComponent;
+  protected GroupByTimeComponent groupByTimeComponent;
 
   // `GROUP BY LEVEL` clause
   private GroupByLevelComponent groupByLevelComponent;
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/SimpleAggregationQueryStatement.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/SimpleAggregationQueryStatement.java
new file mode 100644
index 00000000000..5758e8c9eba
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/SimpleAggregationQueryStatement.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.mpp.plan.statement.crud;
+
+import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.mpp.plan.analyze.ExpressionAnalyzer;
+import org.apache.iotdb.db.mpp.plan.expression.Expression;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
+import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.mpp.plan.statement.component.ResultColumn;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+public class SimpleAggregationQueryStatement extends QueryStatement {
+
+  private List<PartialPath> sourcePaths;
+
+  public List<PartialPath> getSourcePaths() {
+    if (sourcePaths == null) {
+      sourcePaths = new ArrayList<>();
+      for (ResultColumn resultColumn : selectComponent.getResultColumns()) {
+        List<Expression> sourceExpressions =
+            
ExpressionAnalyzer.searchSourceExpressions(resultColumn.getExpression());
+        for (Expression sourceExpression : sourceExpressions) {
+          sourcePaths.add(((TimeSeriesOperand) sourceExpression).getPath());
+        }
+      }
+    }
+    return sourcePaths;
+  }
+
+  @Override
+  public List<PartialPath> getPaths() {
+    return new ArrayList<>(new HashSet<>(getSourcePaths()));
+  }
+
+  @Override
+  public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
+    return visitor.visitSimpleAggregationQuery(this, context);
+  }
+
+  public void semanticCheck() {}
+}

Reply via email to