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