This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/removeWithoutNull in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 53d6e1bc9f15ffb19c5af9cb5aa6be888d6642a8 Author: Minghui Liu <[email protected]> AuthorDate: Tue Jul 12 16:04:33 2022 +0800 remove redundant code --- .../apache/iotdb/db/mpp/plan/analyze/Analysis.java | 12 -- .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 72 ----------- .../db/mpp/plan/analyze/ConcatPathRewriter.java | 43 ------- .../db/mpp/plan/planner/LocalExecutionPlanner.java | 7 -- .../db/mpp/plan/planner/LogicalPlanBuilder.java | 13 -- .../db/mpp/plan/planner/LogicalPlanVisitor.java | 1 - .../plan/planner/plan/node/PlanGraphPrinter.java | 8 -- .../mpp/plan/planner/plan/node/PlanNodeType.java | 4 - .../db/mpp/plan/planner/plan/node/PlanVisitor.java | 5 - .../planner/plan/node/process/FilterNullNode.java | 136 --------------------- .../plan/parameter/FilterNullParameter.java | 109 ----------------- .../statement/component/FilterNullComponent.java | 97 --------------- .../db/mpp/plan/statement/crud/QueryStatement.java | 12 -- .../mpp/plan/plan/FragmentInstanceSerdeTest.java | 13 +- .../db/mpp/plan/plan/QueryLogicalPlanUtil.java | 13 +- .../plan/node/process/FilterNullNodeSerdeTest.java | 58 --------- 16 files changed, 3 insertions(+), 600 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java index 2a7137dd22..5dd5958e77 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java @@ -27,7 +27,6 @@ import org.apache.iotdb.db.mpp.common.header.DatasetHeader; import org.apache.iotdb.db.mpp.common.schematree.SchemaTree; import org.apache.iotdb.db.mpp.plan.expression.Expression; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor; -import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FilterNullParameter; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByTimeParameter; import org.apache.iotdb.db.mpp.plan.statement.Statement; import org.apache.iotdb.tsfile.read.filter.basic.Filter; @@ -124,9 +123,6 @@ public class Analysis { // a global time filter used in `initQueryDataSource` and filter push down private Filter globalTimeFilter; - // parameter of `WITHOUT NULL` clause - private FilterNullParameter filterNullParameter; - // parameter of `FILL` clause private FillDescriptor fillDescriptor; @@ -248,14 +244,6 @@ public class Analysis { String.format("GROUP BY LEVEL: Unknown input expression '%s'", expression)); } - public FilterNullParameter getFilterNullParameter() { - return filterNullParameter; - } - - public void setFilterNullParameter(FilterNullParameter filterNullParameter) { - this.filterNullParameter = filterNullParameter; - } - public FillDescriptor getFillDescriptor() { return fillDescriptor; } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java index 83554d8ccb..a75536f5b1 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java @@ -42,7 +42,6 @@ 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.expression.multi.FunctionExpression; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor; -import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FilterNullParameter; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByTimeParameter; import org.apache.iotdb.db.mpp.plan.statement.Statement; import org.apache.iotdb.db.mpp.plan.statement.StatementNode; @@ -381,24 +380,6 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> analysis.setGroupByTimeParameter(new GroupByTimeParameter(groupByTimeComponent)); } - if (queryStatement.getFilterNullComponent() != null) { - FilterNullParameter filterNullParameter = new FilterNullParameter(); - filterNullParameter.setFilterNullPolicy( - queryStatement.getFilterNullComponent().getWithoutPolicyType()); - List<Expression> resultFilterNullColumns; - if (queryStatement.isAlignByDevice()) { - resultFilterNullColumns = - analyzeWithoutNullAlignByDevice( - queryStatement, - outputExpressions.stream().map(Pair::getLeft).collect(Collectors.toSet())); - } else { - resultFilterNullColumns = - analyzeWithoutNull(queryStatement, schemaTree, analysis.getTransformExpressions()); - } - filterNullParameter.setFilterNullColumns(resultFilterNullColumns); - analysis.setFilterNullParameter(filterNullParameter); - } - if (queryStatement.getFillComponent() != null) { FillComponent fillComponent = queryStatement.getFillComponent(); List<Expression> fillColumnList = @@ -718,59 +699,6 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> return groupByLevelExpressions; } - private List<Expression> analyzeWithoutNullAlignByDevice( - QueryStatement queryStatement, Set<Expression> outputExpressions) { - List<Expression> resultFilterNullColumns = new ArrayList<>(); - List<Expression> rawFilterNullColumns = - queryStatement.getFilterNullComponent().getWithoutNullColumns(); - - // don't specify columns, by default, it is effective for all columns - if (rawFilterNullColumns.isEmpty()) { - resultFilterNullColumns.addAll(outputExpressions); - return resultFilterNullColumns; - } - - for (Expression filterNullColumn : rawFilterNullColumns) { - if (!outputExpressions.contains(filterNullColumn)) { - throw new SemanticException( - String.format( - "The without null column '%s' don't match the columns queried.", filterNullColumn)); - } - resultFilterNullColumns.add(filterNullColumn); - } - return resultFilterNullColumns; - } - - private List<Expression> analyzeWithoutNull( - QueryStatement queryStatement, SchemaTree schemaTree, Set<Expression> transformExpressions) { - List<Expression> resultFilterNullColumns = new ArrayList<>(); - List<Expression> rawFilterNullColumns = - queryStatement.getFilterNullComponent().getWithoutNullColumns(); - - // don't specify columns, by default, it is effective for all columns - if (rawFilterNullColumns.isEmpty()) { - resultFilterNullColumns.addAll(transformExpressions); - return resultFilterNullColumns; - } - - for (Expression filterNullColumn : rawFilterNullColumns) { - List<Expression> resultExpressions = - ExpressionAnalyzer.removeWildcardInExpression(filterNullColumn, schemaTree); - for (Expression expression : resultExpressions) { - Expression expressionWithoutAlias = - ExpressionAnalyzer.removeAliasFromExpression(expression); - if (!transformExpressions.contains(expressionWithoutAlias)) { - throw new SemanticException( - String.format( - "The without null column '%s' don't match the columns queried.", - filterNullColumn)); - } - resultFilterNullColumns.add(expressionWithoutAlias); - } - } - return resultFilterNullColumns; - } - private DatasetHeader analyzeOutput( QueryStatement queryStatement, List<Pair<Expression, String>> outputExpressions) { boolean isIgnoreTimestamp = diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java index f3816fd289..f4ee8a2794 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ConcatPathRewriter.java @@ -24,14 +24,12 @@ import org.apache.iotdb.db.exception.sql.StatementAnalyzeException; import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree; import org.apache.iotdb.db.mpp.plan.expression.Expression; import org.apache.iotdb.db.mpp.plan.statement.Statement; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullComponent; import org.apache.iotdb.db.mpp.plan.statement.component.ResultColumn; import org.apache.iotdb.db.mpp.plan.statement.component.SelectComponent; import org.apache.iotdb.db.mpp.plan.statement.crud.QueryStatement; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -69,30 +67,6 @@ public class ConcatPathRewriter { queryStatement.getSelectComponent().setResultColumns(resultColumns); } - // concat WITHOUT NULL with FROM - if (queryStatement.getFilterNullComponent() != null - && !queryStatement.getFilterNullComponent().getWithoutNullColumns().isEmpty()) { - FilterNullComponent filterNullComponent = queryStatement.getFilterNullComponent(); - Map<String, Expression> aliasToColumnMap = - queryStatement.getSelectComponent().getAliasToColumnMap(); - - // replace alias - List<Expression> replacedWithoutNullColumns = - filterNullComponent.getWithoutNullColumns().stream() - .map( - expression -> - aliasToColumnMap.getOrDefault(expression.getExpressionString(), expression)) - .collect(Collectors.toList()); - - if (queryStatement.isAlignByDevice()) { - queryStatement.getFilterNullComponent().setWithoutNullColumns(replacedWithoutNullColumns); - } else { - List<Expression> withoutNullColumns = - concatWithoutNullColumnsWithFrom(replacedWithoutNullColumns, prefixPaths); - queryStatement.getFilterNullComponent().setWithoutNullColumns(withoutNullColumns); - } - } - // concat WHERE with FROM if (queryStatement.getWhereCondition() != null) { ExpressionAnalyzer.constructPatternTreeFromExpression( @@ -130,21 +104,4 @@ public class ConcatPathRewriter { } return resultColumns; } - - /** - * Concat the prefix path in the WITHOUT NULL clause and the suffix path in the FROM clause into a - * full path pattern. And construct pattern tree. - */ - private List<Expression> concatWithoutNullColumnsWithFrom( - List<Expression> withoutNullColumns, List<PartialPath> prefixPaths) - throws StatementAnalyzeException { - // result after concat - return withoutNullColumns.stream() - .map( - expression -> - ExpressionAnalyzer.concatExpressionWithSuffixPaths( - expression, prefixPaths, patternTree)) - .flatMap(List::stream) - .collect(Collectors.toList()); - } } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java index 343c328eea..5789687a82 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LocalExecutionPlanner.java @@ -132,7 +132,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ExchangeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; @@ -182,7 +181,6 @@ import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import static org.apache.iotdb.db.mpp.execution.operator.LastQueryUtil.satisfyFilter; import static org.apache.iotdb.db.mpp.plan.constant.DataNodeEndPoints.isSameNode; -import static org.apache.iotdb.tsfile.file.metadata.enums.TSDataType.BOOLEAN; /** * Used to plan a fragment instance. Currently, we simply change it from PlanNode to executable @@ -823,11 +821,6 @@ public class LocalExecutionPlanner { } } - @Override - public Operator visitFilterNull(FilterNullNode node, LocalExecutionPlanContext context) { - return super.visitFilterNull(node, context); - } - @Override public Operator visitGroupByLevel(GroupByLevelNode node, LocalExecutionPlanContext context) { checkArgument( diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java index 2eb94df12f..2c264e57fd 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java @@ -50,7 +50,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.AggregationNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; @@ -68,7 +67,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationStep; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FillDescriptor; -import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FilterNullParameter; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByLevelDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByTimeParameter; import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; @@ -623,17 +621,6 @@ public class LogicalPlanBuilder { return this; } - public LogicalPlanBuilder planFilterNull(FilterNullParameter filterNullParameter) { - if (filterNullParameter == null) { - return this; - } - - this.root = - new FilterNullNode( - context.getQueryId().genPlanNodeId(), this.getRoot(), filterNullParameter); - return this; - } - public LogicalPlanBuilder planFill(FillDescriptor fillDescriptor, OrderBy scanOrder) { if (fillDescriptor == null) { return this; diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java index f711c9a387..1575c5d635 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanVisitor.java @@ -143,7 +143,6 @@ public class LogicalPlanVisitor extends StatementVisitor<PlanNode, MPPQueryConte // other common upstream node planBuilder = planBuilder - .planFilterNull(analysis.getFilterNullParameter()) .planFill(analysis.getFillDescriptor(), queryStatement.getResultOrder()) .planOffset(queryStatement.getRowOffset()) .planLimit(queryStatement.getRowLimit()); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java index 3c88a9f69a..0a862b7cd2 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java @@ -27,7 +27,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ExchangeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode; @@ -159,13 +158,6 @@ public class PlanGraphPrinter extends PlanVisitor<List<String>, PlanGraphPrinter return render(node, boxValue, context); } - @Override - public List<String> visitFilterNull(FilterNullNode node, GraphContext context) { - List<String> boxValue = new ArrayList<>(); - boxValue.add(String.format("FilterNull-%s", node.getPlanNodeId().getId())); - return render(node, boxValue, context); - } - @Override public List<String> visitGroupByLevel(GroupByLevelNode node, GraphContext context) { List<String> boxValue = new ArrayList<>(); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java index a7e50182a4..0dfa202822 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanNodeType.java @@ -46,7 +46,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ExchangeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; @@ -81,7 +80,6 @@ public enum PlanNodeType { DEVICE_VIEW((short) 1), FILL((short) 2), FILTER((short) 3), - FILTER_NULL((short) 4), GROUP_BY_LEVEL((short) 5), LIMIT((short) 6), OFFSET((short) 7), @@ -166,8 +164,6 @@ public enum PlanNodeType { return FillNode.deserialize(buffer); case 3: return FilterNode.deserialize(buffer); - case 4: - return FilterNullNode.deserialize(buffer); case 5: return GroupByLevelNode.deserialize(buffer); case 6: diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java index f1f9092b86..fc83e2a5a7 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanVisitor.java @@ -45,7 +45,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ExchangeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; @@ -109,10 +108,6 @@ public abstract class PlanVisitor<R, C> { return visitPlan(node, context); } - public R visitFilterNull(FilterNullNode node, C context) { - return visitPlan(node, context); - } - public R visitGroupByLevel(GroupByLevelNode node, C context) { return visitPlan(node, context); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FilterNullNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FilterNullNode.java deleted file mode 100644 index 535ed4fa95..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/FilterNullNode.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * 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.planner.plan.node.process; - -import org.apache.iotdb.db.mpp.plan.expression.Expression; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; -import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.FilterNullParameter; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullPolicy; - -import com.google.common.collect.ImmutableList; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.List; -import java.util.Objects; - -/** FilterNullNode is used to discard specific rows from upstream node. */ -public class FilterNullNode extends ProcessNode { - - private final FilterNullParameter filterNullParameter; - - private PlanNode child; - - public FilterNullNode(PlanNodeId id, FilterNullParameter filterNullParameter) { - super(id); - this.filterNullParameter = filterNullParameter; - } - - public FilterNullNode( - PlanNodeId id, FilterNullPolicy filterNullPolicy, List<Expression> filterNullColumns) { - super(id); - this.filterNullParameter = new FilterNullParameter(filterNullPolicy, filterNullColumns); - } - - public FilterNullNode( - PlanNodeId id, - PlanNode child, - FilterNullPolicy filterNullPolicy, - List<Expression> filterNullColumns) { - this(id, filterNullPolicy, filterNullColumns); - this.child = child; - } - - public FilterNullNode(PlanNodeId id, PlanNode child, FilterNullParameter filterNullParameter) { - this(id, filterNullParameter); - this.child = child; - } - - @Override - public List<PlanNode> getChildren() { - return ImmutableList.of(child); - } - - @Override - public void addChild(PlanNode child) { - this.child = child; - } - - @Override - public int allowedChildCount() { - return ONE_CHILD; - } - - @Override - public PlanNode clone() { - return new FilterNullNode(getPlanNodeId(), filterNullParameter); - } - - @Override - public List<String> getOutputColumnNames() { - return child.getOutputColumnNames(); - } - - @Override - public <R, C> R accept(PlanVisitor<R, C> visitor, C context) { - return visitor.visitFilterNull(this, context); - } - - @Override - protected void serializeAttributes(ByteBuffer byteBuffer) { - PlanNodeType.FILTER_NULL.serialize(byteBuffer); - filterNullParameter.serialize(byteBuffer); - } - - @Override - protected void serializeAttributes(DataOutputStream stream) throws IOException { - PlanNodeType.FILTER_NULL.serialize(stream); - filterNullParameter.serialize(stream); - } - - public static FilterNullNode deserialize(ByteBuffer byteBuffer) { - FilterNullParameter filterNullParameter = FilterNullParameter.deserialize(byteBuffer); - PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); - return new FilterNullNode(planNodeId, filterNullParameter); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - FilterNullNode that = (FilterNullNode) o; - return filterNullParameter.equals(that.filterNullParameter) && child.equals(that.child); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), filterNullParameter, child); - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/FilterNullParameter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/FilterNullParameter.java deleted file mode 100644 index 803dff7c00..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/FilterNullParameter.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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.planner.plan.parameter; - -import org.apache.iotdb.db.mpp.plan.expression.Expression; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullPolicy; -import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; - -import java.io.DataOutputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class FilterNullParameter { - - // The policy to discard the result from upstream npde - private FilterNullPolicy filterNullPolicy; - - // indicate columns used to filter null - private List<Expression> filterNullColumns; - - public FilterNullParameter() {} - - public FilterNullParameter( - FilterNullPolicy filterNullPolicy, List<Expression> filterNullColumns) { - this.filterNullPolicy = filterNullPolicy; - this.filterNullColumns = filterNullColumns; - } - - public FilterNullPolicy getFilterNullPolicy() { - return filterNullPolicy; - } - - public List<Expression> getFilterNullColumns() { - return filterNullColumns; - } - - public void setFilterNullPolicy(FilterNullPolicy filterNullPolicy) { - this.filterNullPolicy = filterNullPolicy; - } - - public void setFilterNullColumns(List<Expression> filterNullColumns) { - this.filterNullColumns = filterNullColumns; - } - - public void serialize(ByteBuffer byteBuffer) { - ReadWriteIOUtils.write(filterNullPolicy.ordinal(), byteBuffer); - ReadWriteIOUtils.write(filterNullColumns.size(), byteBuffer); - for (Expression filterNullColumn : filterNullColumns) { - Expression.serialize(filterNullColumn, byteBuffer); - } - } - - public void serialize(DataOutputStream stream) throws IOException { - ReadWriteIOUtils.write(filterNullPolicy.ordinal(), stream); - ReadWriteIOUtils.write(filterNullColumns.size(), stream); - for (Expression filterNullColumn : filterNullColumns) { - Expression.serialize(filterNullColumn, stream); - } - } - - public static FilterNullParameter deserialize(ByteBuffer byteBuffer) { - FilterNullPolicy filterNullPolicy = - FilterNullPolicy.values()[ReadWriteIOUtils.readInt(byteBuffer)]; - int size = ReadWriteIOUtils.readInt(byteBuffer); - List<Expression> filterNullColumns = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - filterNullColumns.add(Expression.deserialize(byteBuffer)); - } - return new FilterNullParameter(filterNullPolicy, filterNullColumns); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - FilterNullParameter that = (FilterNullParameter) o; - return filterNullPolicy == that.filterNullPolicy - && Objects.equals(filterNullColumns, that.filterNullColumns); - } - - @Override - public int hashCode() { - return Objects.hash(filterNullPolicy, filterNullColumns); - } -} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/FilterNullComponent.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/FilterNullComponent.java deleted file mode 100644 index e0e2c4c6e9..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/FilterNullComponent.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.component; - -import org.apache.iotdb.db.mpp.plan.expression.Expression; -import org.apache.iotdb.db.mpp.plan.statement.StatementNode; -import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** This class maintains information of {@code WITHOUT NULL} clause. */ -public class FilterNullComponent extends StatementNode { - - FilterNullPolicy filterNullPolicy = FilterNullPolicy.NO_FILTER; - - List<Expression> withoutNullColumns = new ArrayList<>(); - - public FilterNullPolicy getWithoutPolicyType() { - return filterNullPolicy; - } - - public void setWithoutPolicyType(FilterNullPolicy filterNullPolicy) { - this.filterNullPolicy = filterNullPolicy; - } - - public void addWithoutNullColumn(Expression e) { - withoutNullColumns.add(e); - } - - public List<Expression> getWithoutNullColumns() { - return withoutNullColumns; - } - - public void setWithoutNullColumns(List<Expression> withoutNullColumns) { - this.withoutNullColumns = withoutNullColumns; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - FilterNullComponent that = (FilterNullComponent) o; - return filterNullPolicy == that.filterNullPolicy - && Objects.equals(withoutNullColumns, that.withoutNullColumns); - } - - @Override - public int hashCode() { - return Objects.hash(filterNullPolicy, withoutNullColumns); - } - - public void serialize(ByteBuffer byteBuffer) { - ReadWriteIOUtils.write(filterNullPolicy.ordinal(), byteBuffer); - ReadWriteIOUtils.write(withoutNullColumns.size(), byteBuffer); - for (Expression expression : withoutNullColumns) { - Expression.serialize(expression, byteBuffer); - } - } - - public static FilterNullComponent deserialize(ByteBuffer byteBuffer) { - FilterNullPolicy filterNullPolicy = - FilterNullPolicy.values()[ReadWriteIOUtils.readInt(byteBuffer)]; - int withoutNullSize = ReadWriteIOUtils.readInt(byteBuffer); - List<Expression> withoutNullColumns = new ArrayList<>(); - for (int i = 0; i < withoutNullSize; i++) { - withoutNullColumns.add(Expression.deserialize(byteBuffer)); - } - FilterNullComponent filterNullComponent = new FilterNullComponent(); - filterNullComponent.withoutNullColumns = withoutNullColumns; - filterNullComponent.filterNullPolicy = filterNullPolicy; - return filterNullComponent; - } -} 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 9406307a38..17f433a2e7 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 @@ -28,7 +28,6 @@ import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand; import org.apache.iotdb.db.mpp.plan.statement.Statement; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; import org.apache.iotdb.db.mpp.plan.statement.component.FillComponent; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullComponent; import org.apache.iotdb.db.mpp.plan.statement.component.FromComponent; import org.apache.iotdb.db.mpp.plan.statement.component.GroupByLevelComponent; import org.apache.iotdb.db.mpp.plan.statement.component.GroupByTimeComponent; @@ -55,7 +54,6 @@ import java.util.List; * <li>[FILL ({PREVIOUS | LINEAR | constant})] * <li>[LIMIT rowLimit] [OFFSET rowOffset] * <li>[SLIMIT seriesLimit] [SOFFSET seriesOffset] - * <li>[WITHOUT NULL {ANY | ALL} [resultColumn [, resultColumn] ...]] * <li>[ORDER BY TIME {ASC | DESC}] * <li>[{ALIGN BY DEVICE | DISABLE ALIGN}] * </ul> @@ -78,8 +76,6 @@ public class QueryStatement extends Statement { protected FillComponent fillComponent; - protected FilterNullComponent filterNullComponent; - protected OrderBy resultOrder = OrderBy.TIMESTAMP_ASC; protected ResultSetFormat resultSetFormat = ResultSetFormat.ALIGN_BY_TIME; @@ -163,14 +159,6 @@ public class QueryStatement extends Statement { this.fillComponent = fillComponent; } - public FilterNullComponent getFilterNullComponent() { - return filterNullComponent; - } - - public void setFilterNullComponent(FilterNullComponent filterNullComponent) { - this.filterNullComponent = filterNullComponent; - } - public OrderBy getResultOrder() { return resultOrder; } diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java index 007f7fad07..ebcd805c0b 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/FragmentInstanceSerdeTest.java @@ -31,12 +31,10 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.FragmentInstance; import org.apache.iotdb.db.mpp.plan.planner.plan.PlanFragment; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TimeJoinNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullPolicy; import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; import org.apache.iotdb.tsfile.read.filter.GroupByFilter; @@ -44,7 +42,6 @@ import com.google.common.collect.ImmutableList; import org.junit.Test; import java.nio.ByteBuffer; -import java.util.ArrayList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -118,13 +115,6 @@ public class FragmentInstanceSerdeTest { OffsetNode offsetNode = new OffsetNode(new PlanNodeId("OffsetNode"), 100); LimitNode limitNode = new LimitNode(new PlanNodeId("LimitNode"), 100); - FilterNullNode filterNullNode = - new FilterNullNode( - new PlanNodeId("TestFilterNullNode"), - null, - FilterNullPolicy.ALL_NULL, - new ArrayList<>()); - TimeJoinNode timeJoinNode = new TimeJoinNode(new PlanNodeId("TimeJoinNode"), OrderBy.TIMESTAMP_DESC); SeriesScanNode seriesScanNode1 = @@ -141,8 +131,7 @@ public class FragmentInstanceSerdeTest { timeJoinNode.addChild(seriesScanNode1); timeJoinNode.addChild(seriesScanNode2); timeJoinNode.addChild(seriesScanNode3); - filterNullNode.addChild(timeJoinNode); - limitNode.addChild(filterNullNode); + limitNode.addChild(timeJoinNode); offsetNode.addChild(limitNode); return offsetNode; diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/QueryLogicalPlanUtil.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/QueryLogicalPlanUtil.java index c62da3bc79..753dee8c19 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/QueryLogicalPlanUtil.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/QueryLogicalPlanUtil.java @@ -35,7 +35,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.AggregationNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LastQueryMergeNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode; @@ -50,7 +49,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationDescriptor; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationStep; import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.GroupByLevelDescriptor; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullPolicy; import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; import org.apache.iotdb.db.query.aggregation.AggregationType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; @@ -185,7 +183,7 @@ public class QueryLogicalPlanUtil { static { String sql = "SELECT s1 FROM root.sg.* WHERE time > 100 and s2 > 10 " - + "ORDER BY TIME DESC WITHOUT NULL ANY LIMIT 100 OFFSET 100 SLIMIT 1 SOFFSET 1"; + + "ORDER BY TIME DESC LIMIT 100 OFFSET 100 SLIMIT 1 SOFFSET 1"; QueryId queryId = new QueryId("test"); List<PlanNode> sourceNodeList = new ArrayList<>(); @@ -234,14 +232,7 @@ public class QueryLogicalPlanUtil { ZonedDateTime.now().getOffset(), OrderBy.TIMESTAMP_DESC); - FilterNullNode filterNullNode = - new FilterNullNode( - queryId.genPlanNodeId(), - filterNode, - FilterNullPolicy.CONTAINS_NULL, - Collections.singletonList(new TimeSeriesOperand(schemaMap.get("root.sg.d2.s1")))); - - OffsetNode offsetNode = new OffsetNode(queryId.genPlanNodeId(), filterNullNode, 100); + OffsetNode offsetNode = new OffsetNode(queryId.genPlanNodeId(), filterNode, 100); LimitNode limitNode = new LimitNode(queryId.genPlanNodeId(), offsetNode, 100); querySQLs.add(sql); diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FilterNullNodeSerdeTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FilterNullNodeSerdeTest.java deleted file mode 100644 index 360b644d8d..0000000000 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/process/FilterNullNodeSerdeTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.plan.node.process; - -import org.apache.iotdb.commons.exception.IllegalPathException; -import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand; -import org.apache.iotdb.db.mpp.plan.plan.node.PlanNodeDeserializeHelper; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNullNode; -import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.TimeJoinNode; -import org.apache.iotdb.db.mpp.plan.statement.component.FilterNullPolicy; -import org.apache.iotdb.db.mpp.plan.statement.component.OrderBy; - -import org.junit.Test; - -import java.nio.ByteBuffer; -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; - -public class FilterNullNodeSerdeTest { - - @Test - public void testSerializeAndDeserialize() throws IllegalPathException { - TimeJoinNode timeJoinNode = - new TimeJoinNode(new PlanNodeId("TestTimeJoinNode"), OrderBy.TIMESTAMP_ASC); - FilterNullNode filterNullNode = - new FilterNullNode( - new PlanNodeId("TestFilterNullNode"), - timeJoinNode, - FilterNullPolicy.ALL_NULL, - Arrays.asList( - new TimeSeriesOperand(new PartialPath("root.sg.d1.s1")), - new TimeSeriesOperand(new PartialPath("root.sg.d1.s2")))); - - ByteBuffer byteBuffer = ByteBuffer.allocate(1024); - filterNullNode.serialize(byteBuffer); - byteBuffer.flip(); - assertEquals(PlanNodeDeserializeHelper.deserialize(byteBuffer), filterNullNode); - } -}
