This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new ea70aea230 [IOTDB-4025] Implement IntermediateLayerVisitor for
Expression (#6891)
ea70aea230 is described below
commit ea70aea230deedb9275dbeca1f87098f23cde999
Author: Liao Lanyu <[email protected]>
AuthorDate: Fri Aug 12 10:43:53 2022 +0800
[IOTDB-4025] Implement IntermediateLayerVisitor for Expression (#6891)
---
.../iotdb/db/mpp/plan/expression/Expression.java | 28 +-
.../plan/expression/binary/AdditionExpression.java | 10 -
.../plan/expression/binary/BinaryExpression.java | 110 -----
.../plan/expression/binary/DivisionExpression.java | 10 -
.../plan/expression/binary/EqualToExpression.java | 9 -
.../expression/binary/GreaterEqualExpression.java | 10 -
.../expression/binary/GreaterThanExpression.java | 10 -
.../expression/binary/LessEqualExpression.java | 9 -
.../plan/expression/binary/LessThanExpression.java | 9 -
.../plan/expression/binary/LogicAndExpression.java | 9 -
.../plan/expression/binary/LogicOrExpression.java | 9 -
.../plan/expression/binary/ModuloExpression.java | 9 -
.../binary/MultiplicationExpression.java | 10 -
.../plan/expression/binary/NonEqualExpression.java | 9 -
.../expression/binary/SubtractionExpression.java | 10 -
.../mpp/plan/expression/leaf/ConstantOperand.java | 42 --
.../plan/expression/leaf/TimeSeriesOperand.java | 62 ---
.../mpp/plan/expression/leaf/TimestampOperand.java | 60 ---
.../plan/expression/multi/FunctionExpression.java | 234 -----------
.../plan/expression/ternary/BetweenExpression.java | 15 -
.../plan/expression/ternary/TernaryExpression.java | 130 ------
.../db/mpp/plan/expression/unary/InExpression.java | 8 -
.../plan/expression/unary/IsNullExpression.java | 8 -
.../mpp/plan/expression/unary/LikeExpression.java | 8 -
.../plan/expression/unary/LogicNotExpression.java | 8 -
.../plan/expression/unary/NegationExpression.java | 8 -
.../plan/expression/unary/RegularExpression.java | 8 -
.../mpp/plan/expression/unary/UnaryExpression.java | 86 ----
.../visitor/IntermediateLayerVisitor.java | 454 ++++++++++++++++++++
.../visitor/OldIntermediateLayerVisitor.java | 461 +++++++++++++++++++++
.../mpp/transformation/dag/builder/DAGBuilder.java | 24 +-
.../dag/builder/EvaluationDAGBuilder.java | 21 +-
32 files changed, 942 insertions(+), 956 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
index 3436370342..829873d941 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.binary.AdditionExpression;
@@ -50,10 +49,7 @@ import
org.apache.iotdb.db.mpp.plan.expression.unary.NegationExpression;
import org.apache.iotdb.db.mpp.plan.expression.unary.RegularExpression;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -184,27 +180,11 @@ public abstract class Expression {
public abstract void bindInputLayerColumnIndexWithExpression(
Map<String, List<InputLocation>> inputLocations);
- public abstract void updateStatisticsForMemoryAssigner(LayerMemoryAssigner
memoryAssigner);
+ public Integer getInputColumnIndex() {
+ return inputColumnIndex;
+ }
- // TODO: remove after MPP finish
- @Deprecated
- public abstract IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException;
-
- public abstract IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException;
+ public abstract void updateStatisticsForMemoryAssigner(LayerMemoryAssigner
memoryAssigner);
/////////////////////////////////////////////////////////////////////////////////////////////////
// toString
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/AdditionExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/AdditionExpression.java
index d4c80fe955..01591f6dfc 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/AdditionExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/AdditionExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticAdditionTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticBinaryTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class AdditionExpression extends
ArithmeticBinaryExpression {
super(byteBuffer);
}
- @Override
- protected ArithmeticBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new ArithmeticAdditionTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "+";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
index 8e1ce8d452..0ee8b1ab84 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
@@ -21,23 +21,13 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.BinaryTransformer;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -225,111 +215,11 @@ public abstract class BinaryExpression extends
Expression {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer leftParentIntermediateLayer =
- leftExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- IntermediateLayer rightParentIntermediateLayer =
- rightExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- Transformer transformer =
- constructTransformer(
- leftParentIntermediateLayer.constructPointReader(),
- rightParentIntermediateLayer.constructPointReader());
- expressionDataTypeMap.put(this, transformer.getDataType());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer leftParentIntermediateLayer =
- leftExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- IntermediateLayer rightParentIntermediateLayer =
- rightExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- Transformer transformer =
- constructTransformer(
- leftParentIntermediateLayer.constructPointReader(),
- rightParentIntermediateLayer.constructPointReader());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
@Override
public boolean isMappable(TypeProvider typeProvider) {
return leftExpression.isMappable(typeProvider) &&
rightExpression.isMappable(typeProvider);
}
- protected abstract BinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader);
-
@Override
public final String getExpressionStringInternal() {
StringBuilder builder = new StringBuilder();
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/DivisionExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/DivisionExpression.java
index 26ecfdb071..ee444a134b 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/DivisionExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/DivisionExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticDivisionTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class DivisionExpression extends
ArithmeticBinaryExpression {
super(byteBuffer);
}
- @Override
- protected ArithmeticBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new ArithmeticDivisionTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "/";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/EqualToExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/EqualToExpression.java
index a9a683ce87..54f9882d4a 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/EqualToExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/EqualToExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareEqualToTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class EqualToExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareEqualToTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "=";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterEqualExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterEqualExpression.java
index d87a42046f..f065198f6b 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterEqualExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterEqualExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterEqualTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class GreaterEqualExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareGreaterEqualTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return ">=";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterThanExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterThanExpression.java
index 848557695c..c7fa4a2635 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterThanExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/GreaterThanExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterThanTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class GreaterThanExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareGreaterThanTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return ">";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessEqualExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessEqualExpression.java
index 36c9e12294..a765c20c37 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessEqualExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessEqualExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessEqualTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class LessEqualExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareLessEqualTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "<=";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessThanExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessThanExpression.java
index 630b7a4edc..b3d8ba0cae 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessThanExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LessThanExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessThanTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class LessThanExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareLessThanTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "<";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicAndExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicAndExpression.java
index 68addddc49..311ae5046b 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicAndExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicAndExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicAndTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicBinaryTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class LogicAndExpression extends
LogicBinaryExpression {
super(byteBuffer);
}
- @Override
- protected LogicBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new LogicAndTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "&";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicOrExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicOrExpression.java
index 785263b210..c0b877af47 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicOrExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/LogicOrExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicOrTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class LogicOrExpression extends LogicBinaryExpression
{
super(byteBuffer);
}
- @Override
- protected LogicBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new LogicOrTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "|";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/ModuloExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/ModuloExpression.java
index 24f7ab6b40..c2ba296cfa 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/ModuloExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/ModuloExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticModuloTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class ModuloExpression extends
ArithmeticBinaryExpression {
super(byteBuffer);
}
- @Override
- protected ArithmeticBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new ArithmeticModuloTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "%";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/MultiplicationExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/MultiplicationExpression.java
index adc381612d..a6bf85d42d 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/MultiplicationExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/MultiplicationExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticMultiplicationTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class MultiplicationExpression extends
ArithmeticBinaryExpression {
super(byteBuffer);
}
- @Override
- protected ArithmeticBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new ArithmeticMultiplicationTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "*";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/NonEqualExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/NonEqualExpression.java
index 2a25f392f2..e5665be10d 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/NonEqualExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/NonEqualExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareNonEqualTransformer;
import java.nio.ByteBuffer;
@@ -37,12 +34,6 @@ public class NonEqualExpression extends
CompareBinaryExpression {
super(byteBuffer);
}
- @Override
- protected CompareBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new CompareNonEqualTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "!=";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/SubtractionExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/SubtractionExpression.java
index 946179f782..a9832fcca5 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/SubtractionExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/SubtractionExpression.java
@@ -21,9 +21,6 @@ package org.apache.iotdb.db.mpp.plan.expression.binary;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticBinaryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticSubtractionTransformer;
import java.nio.ByteBuffer;
@@ -37,13 +34,6 @@ public class SubtractionExpression extends
ArithmeticBinaryExpression {
super(byteBuffer);
}
- @Override
- protected ArithmeticBinaryTransformer constructTransformer(
- LayerPointReader leftParentLayerPointReader, LayerPointReader
rightParentLayerPointReader) {
- return new ArithmeticSubtractionTransformer(
- leftParentLayerPointReader, rightParentLayerPointReader);
- }
-
@Override
protected String operator() {
return "-";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/ConstantOperand.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/ConstantOperand.java
index de0584f4fe..8056c963a8 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/ConstantOperand.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/ConstantOperand.java
@@ -20,17 +20,12 @@
package org.apache.iotdb.db.mpp.plan.expression.leaf;
import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.ConstantIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -123,43 +118,6 @@ public class ConstantOperand extends LeafOperand {
// Do nothing
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- expressionDataTypeMap.put(this, this.getDataType());
- IntermediateLayer intermediateLayer =
- new ConstantIntermediateLayer(this, queryId,
memoryAssigner.assign());
- expressionIntermediateLayerMap.put(this, intermediateLayer);
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- IntermediateLayer intermediateLayer =
- new ConstantIntermediateLayer(this, queryId,
memoryAssigner.assign());
- expressionIntermediateLayerMap.put(this, intermediateLayer);
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
@Override
public String getExpressionStringInternal() {
return valueString;
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
index 06baccbce1..264bb5381b 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
@@ -21,20 +21,13 @@ package org.apache.iotdb.db.mpp.plan.expression.leaf;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.path.PathDeserializeUtil;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -121,61 +114,6 @@ public class TimeSeriesOperand extends LeafOperand {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- LayerPointReader parentLayerPointReader =
- rawTimeSeriesInputLayer.constructValuePointReader(inputColumnIndex);
- expressionDataTypeMap.put(this, parentLayerPointReader.getDataType());
-
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- LayerPointReader parentLayerPointReader =
- rawTimeSeriesInputLayer.constructValuePointReader(inputColumnIndex);
-
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
@Override
public String getExpressionStringInternal() {
return path.isMeasurementAliasExists() ? path.getFullPathWithAlias() :
path.getFullPath();
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimestampOperand.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimestampOperand.java
index 5adecbe211..076d7594d2 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimestampOperand.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimestampOperand.java
@@ -21,19 +21,12 @@ package org.apache.iotdb.db.mpp.plan.expression.leaf;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -106,59 +99,6 @@ public class TimestampOperand extends LeafOperand {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- LayerPointReader parentLayerPointReader =
rawTimeSeriesInputLayer.constructTimePointReader();
- expressionDataTypeMap.put(this, parentLayerPointReader.getDataType());
-
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- LayerPointReader parentLayerPointReader =
rawTimeSeriesInputLayer.constructTimePointReader();
-
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, parentLayerPointReader));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
@Override
protected boolean isConstantOperandInternal() {
return false;
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
index 259b50565f..2d6fad00d9 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.udf.builtin.BuiltinAggregationFunction;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
@@ -31,19 +30,7 @@ import
org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.MultiInputColumnIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.MappableUDFQueryRowTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowWindowTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.TransparentTransformer;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFInformationInferrer;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
@@ -322,113 +309,6 @@ public class FunctionExpression extends Expression {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
- Transformer transformer;
- if (isBuiltInAggregationFunctionExpression) {
- transformer =
- new TransparentTransformer(
-
rawTimeSeriesInputLayer.constructValuePointReader(inputColumnIndex));
- } else {
- IntermediateLayer udfInputIntermediateLayer =
- constructUdfInputIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- transformer =
- constructUdfTransformer(
- queryId, udtfContext, typeProvider, memoryAssigner,
udfInputIntermediateLayer);
- }
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- private IntermediateLayer constructUdfInputIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- List<IntermediateLayer> intermediateLayers = new ArrayList<>();
- for (Expression expression : expressions) {
- intermediateLayers.add(
- expression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner));
- }
- return intermediateLayers.size() == 1
- ? intermediateLayers.get(0)
- : new MultiInputColumnIntermediateLayer(
- this,
- queryId,
- memoryAssigner.assign(),
- intermediateLayers.stream()
- .map(IntermediateLayer::constructPointReader)
- .collect(Collectors.toList()));
- }
-
- private UDFQueryTransformer constructUdfTransformer(
- long queryId,
- UDTFContext udtfContext,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner,
- IntermediateLayer udfInputIntermediateLayer)
- throws QueryProcessException, IOException {
- UDTFExecutor executor = udtfContext.getExecutorByFunctionExpression(this);
-
- executor.beforeStart(
- queryId,
- memoryAssigner.assign(),
-
expressions.stream().map(Expression::toString).collect(Collectors.toList()),
- expressions.stream()
- .map(f -> typeProvider.getType(f.toString()))
- .collect(Collectors.toList()),
- functionAttributes);
-
- AccessStrategy accessStrategy =
executor.getConfigurations().getAccessStrategy();
- switch (accessStrategy.getAccessStrategyType()) {
- case MAPPABLE_ROW_BY_ROW:
- return new MappableUDFQueryRowTransformer(
- udfInputIntermediateLayer.constructRowReader(), executor);
- case ROW_BY_ROW:
- return new
UDFQueryRowTransformer(udfInputIntermediateLayer.constructRowReader(),
executor);
- case SLIDING_SIZE_WINDOW:
- case SLIDING_TIME_WINDOW:
- return new UDFQueryRowWindowTransformer(
- udfInputIntermediateLayer.constructRowWindowReader(
- accessStrategy, memoryAssigner.assign()),
- executor);
- default:
- throw new UnsupportedOperationException("Unsupported transformer
access strategy");
- }
- }
-
@Override
public boolean isMappable(TypeProvider typeProvider) {
if (isBuiltInAggregationFunctionExpression) {
@@ -445,120 +325,6 @@ public class FunctionExpression extends Expression {
.equals(AccessStrategy.AccessStrategyType.MAPPABLE_ROW_BY_ROW);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
- Transformer transformer;
- if (isBuiltInAggregationFunctionExpression) {
- transformer =
- new TransparentTransformer(
-
rawTimeSeriesInputLayer.constructValuePointReader(inputColumnIndex));
- } else {
- IntermediateLayer udfInputIntermediateLayer =
- constructUdfInputIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- transformer =
- constructUdfTransformer(
- queryId,
- udtfContext,
- expressionDataTypeMap,
- memoryAssigner,
- udfInputIntermediateLayer);
- }
- expressionDataTypeMap.put(this, transformer.getDataType());
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- // TODO: remove it after MPP finished
- @Deprecated
- private IntermediateLayer constructUdfInputIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- List<IntermediateLayer> intermediateLayers = new ArrayList<>();
- for (Expression expression : expressions) {
- intermediateLayers.add(
- expression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner));
- }
- return intermediateLayers.size() == 1
- ? intermediateLayers.get(0)
- : new MultiInputColumnIntermediateLayer(
- this,
- queryId,
- memoryAssigner.assign(),
- intermediateLayers.stream()
- .map(IntermediateLayer::constructPointReader)
- .collect(Collectors.toList()));
- }
-
- // TODO: remove it after MPP finished
- @Deprecated
- private UDFQueryTransformer constructUdfTransformer(
- long queryId,
- UDTFContext udtfContext,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner,
- IntermediateLayer udfInputIntermediateLayer)
- throws QueryProcessException, IOException {
- UDTFExecutor executor = udtfContext.getExecutorByFunctionExpression(this);
-
- executor.beforeStart(
- queryId,
- memoryAssigner.assign(),
-
expressions.stream().map(Expression::toString).collect(Collectors.toList()),
-
expressions.stream().map(expressionDataTypeMap::get).collect(Collectors.toList()),
- functionAttributes);
-
- AccessStrategy accessStrategy =
executor.getConfigurations().getAccessStrategy();
- switch (accessStrategy.getAccessStrategyType()) {
- case MAPPABLE_ROW_BY_ROW:
- return new MappableUDFQueryRowTransformer(
- udfInputIntermediateLayer.constructRowReader(), executor);
- case ROW_BY_ROW:
- return new
UDFQueryRowTransformer(udfInputIntermediateLayer.constructRowReader(),
executor);
- case SLIDING_SIZE_WINDOW:
- case SLIDING_TIME_WINDOW:
- return new UDFQueryRowWindowTransformer(
- udfInputIntermediateLayer.constructRowWindowReader(
- accessStrategy, memoryAssigner.assign()),
- executor);
- default:
- throw new UnsupportedOperationException("Unsupported transformer
access strategy");
- }
- }
-
public List<PartialPath> getPaths() {
if (paths == null) {
paths = new ArrayList<>();
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
index b1445eca59..2b6f9c79e3 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
@@ -24,9 +24,6 @@ package org.apache.iotdb.db.mpp.plan.expression.ternary;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.ternary.BetweenTransformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.ternary.TernaryTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -61,18 +58,6 @@ public class BetweenExpression extends TernaryExpression {
this.isNotBetween = ReadWriteIOUtils.readBool(byteBuffer);
}
- @Override
- protected TernaryTransformer constructTransformer(
- LayerPointReader firstParentLayerPointReader,
- LayerPointReader secondParentLayerPointReader,
- LayerPointReader thirdParentLayerPointReader) {
- return new BetweenTransformer(
- firstParentLayerPointReader,
- secondParentLayerPointReader,
- thirdParentLayerPointReader,
- isNotBetween);
- }
-
@Override
protected String operator() {
return "between";
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
index 0c8a5fb547..80725eab5f 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
@@ -23,23 +23,13 @@ package org.apache.iotdb.db.mpp.plan.expression.ternary;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.ternary.TernaryTransformer;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -211,126 +201,6 @@ public abstract class TernaryExpression extends
Expression {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer firstParentIntermediateLayer =
- firstExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- IntermediateLayer secondParentIntermediateLayer =
- secondExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- IntermediateLayer thirdParentIntermediateLayer =
- thirdExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- Transformer transformer =
- constructTransformer(
- firstParentIntermediateLayer.constructPointReader(),
- secondParentIntermediateLayer.constructPointReader(),
- thirdParentIntermediateLayer.constructPointReader());
- expressionDataTypeMap.put(this, transformer.getDataType());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer firstParentIntermediateLayer =
- firstExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- IntermediateLayer secondParentIntermediateLayer =
- secondExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- IntermediateLayer thirdParentIntermediateLayer =
- thirdExpression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- Transformer transformer =
- constructTransformer(
- firstParentIntermediateLayer.constructPointReader(),
- secondParentIntermediateLayer.constructPointReader(),
- thirdParentIntermediateLayer.constructPointReader());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- protected abstract TernaryTransformer constructTransformer(
- LayerPointReader firstParentLayerPointReader,
- LayerPointReader secondParentLayerPointReader,
- LayerPointReader thirdParentLayerPointReader);
-
protected abstract String operator();
@Override
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
index 47aa0dd53e..8dde1583a1 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
@@ -25,9 +25,6 @@ import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
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.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.InTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -102,11 +99,6 @@ public class InExpression extends UnaryExpression {
return ExpressionType.IN;
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new InTransformer(pointReader, isNotIn, values);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new InExpression(childExpression, isNotIn, values);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
index 83f4e3a3b0..3b910b0cde 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
@@ -22,9 +22,6 @@ package org.apache.iotdb.db.mpp.plan.expression.unary;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.IsNullTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -69,11 +66,6 @@ public class IsNullExpression extends UnaryExpression {
return ExpressionType.IS_NULL;
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new IsNullTransformer(pointReader, isNot);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new IsNullExpression(childExpression, isNot);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
index d14b2c30a3..004b56c507 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
@@ -23,9 +23,6 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.RegularTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -141,11 +138,6 @@ public class LikeExpression extends UnaryExpression {
return ExpressionType.LIKE;
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new RegularTransformer(pointReader, pattern);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new LikeExpression(childExpression, patternString, pattern);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
index 9a7191d497..c1b1a7f5ef 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
@@ -26,9 +26,6 @@ import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
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.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.LogicNotTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.nio.ByteBuffer;
@@ -43,11 +40,6 @@ public class LogicNotExpression extends UnaryExpression {
super(Expression.deserialize(byteBuffer));
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new LogicNotTransformer(pointReader);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new LogicNotExpression(childExpression);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
index 2b9cba69b8..30473ddeac 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
@@ -26,9 +26,6 @@ import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
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.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.ArithmeticNegationTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.nio.ByteBuffer;
@@ -43,11 +40,6 @@ public class NegationExpression extends UnaryExpression {
super(Expression.deserialize(byteBuffer));
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new ArithmeticNegationTransformer(pointReader);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new NegationExpression(childExpression);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
index aee30c1a3f..7759b29f68 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
@@ -23,9 +23,6 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.RegularTransformer;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -67,11 +64,6 @@ public class RegularExpression extends UnaryExpression {
return pattern;
}
- @Override
- protected Transformer constructTransformer(LayerPointReader pointReader) {
- return new RegularTransformer(pointReader, pattern);
- }
-
@Override
protected Expression constructExpression(Expression childExpression) {
return new RegularExpression(childExpression, patternString, pattern);
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
index 2ba93e2e10..e53fd40d0a 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
@@ -21,23 +21,14 @@ package org.apache.iotdb.db.mpp.plan.expression.unary;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
-import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
-import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
-import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
-import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
-import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -121,88 +112,11 @@ public abstract class UnaryExpression extends Expression {
memoryAssigner.increaseExpressionReference(this);
}
- @Override
- public final IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- Map<Expression, TSDataType> expressionDataTypeMap,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer parentLayerPointReader =
- expression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner);
- Transformer transformer =
constructTransformer(parentLayerPointReader.constructPointReader());
- expressionDataTypeMap.put(this, transformer.getDataType());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
- @Override
- public IntermediateLayer constructIntermediateLayer(
- long queryId,
- UDTFContext udtfContext,
- QueryDataSetInputLayer rawTimeSeriesInputLayer,
- Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
- TypeProvider typeProvider,
- LayerMemoryAssigner memoryAssigner)
- throws QueryProcessException, IOException {
- if (!expressionIntermediateLayerMap.containsKey(this)) {
- float memoryBudgetInMB = memoryAssigner.assign();
-
- IntermediateLayer parentLayerPointReader =
- expression.constructIntermediateLayer(
- queryId,
- udtfContext,
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner);
- Transformer transformer =
constructTransformer(parentLayerPointReader.constructPointReader());
-
- // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
- // yet. And since a ConstantLayerPointReader won't produce too much IO,
- // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
- expressionIntermediateLayerMap.put(
- this,
- memoryAssigner.getReference(this) == 1 || isConstantOperand()
- ? new SingleInputColumnSingleReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer)
- : new SingleInputColumnMultiReferenceIntermediateLayer(
- this, queryId, memoryBudgetInMB, transformer));
- }
-
- return expressionIntermediateLayerMap.get(this);
- }
-
@Override
public boolean isMappable(TypeProvider typeProvider) {
return expression.isMappable(typeProvider);
}
- protected abstract Transformer constructTransformer(LayerPointReader
pointReader);
-
@Override
public final void concat(List<PartialPath> prefixPaths, List<Expression>
resultExpressions) {
List<Expression> resultExpressionsForRecursion = new ArrayList<>();
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
new file mode 100644
index 0000000000..75095e51d0
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
@@ -0,0 +1,454 @@
+/*
+ * 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.expression.visitor;
+
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
+import org.apache.iotdb.db.mpp.plan.expression.Expression;
+import org.apache.iotdb.db.mpp.plan.expression.binary.BinaryExpression;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.TimestampOperand;
+import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
+import org.apache.iotdb.db.mpp.plan.expression.ternary.BetweenExpression;
+import org.apache.iotdb.db.mpp.plan.expression.ternary.TernaryExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.InExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.IsNullExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.LikeExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.RegularExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.UnaryExpression;
+import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
+import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.ConstantIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.MultiInputColumnIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
+import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
+import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticAdditionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticDivisionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticModuloTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticMultiplicationTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticSubtractionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareEqualToTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterThanTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessThanTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareNonEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicAndTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicOrTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.MappableUDFQueryRowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowWindowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.ternary.BetweenTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.ArithmeticNegationTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.InTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.IsNullTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.LogicNotTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.RegularTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.TransparentTransformer;
+import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
+import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
+import org.apache.iotdb.udf.api.customizer.strategy.AccessStrategy;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/** Responsible for constructing {@link IntermediateLayer} through Expression.
*/
+public class IntermediateLayerVisitor
+ extends ExpressionVisitor<
+ IntermediateLayer,
IntermediateLayerVisitor.IntermediateLayerVisitorContext> {
+
+ @Override
+ public IntermediateLayer visitExpression(
+ Expression expression, IntermediateLayerVisitorContext context) {
+ throw new UnsupportedOperationException(
+ "Unsupported statement type: " + expression.getClass().getName());
+ }
+
+ @Override
+ public IntermediateLayer visitUnaryExpression(
+ UnaryExpression unaryExpression, IntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(unaryExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer parentLayerPointReader =
+ this.process(unaryExpression.getExpression(), context);
+
+ Transformer transformer =
+ getConcreteUnaryTransformer(
+ unaryExpression, parentLayerPointReader.constructPointReader());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ unaryExpression,
+ context.memoryAssigner.getReference(unaryExpression) == 1
+ || unaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ unaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ unaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(unaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitBinaryExpression(
+ BinaryExpression binaryExpression, IntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(binaryExpression))
{
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer leftParentIntermediateLayer =
+ this.process(binaryExpression.getLeftExpression(), context);
+ IntermediateLayer rightParentIntermediateLayer =
+ this.process(binaryExpression.getRightExpression(), context);
+
+ Transformer transformer =
+ getConcreteBinaryTransformer(
+ binaryExpression,
+ leftParentIntermediateLayer.constructPointReader(),
+ rightParentIntermediateLayer.constructPointReader());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ binaryExpression,
+ context.memoryAssigner.getReference(binaryExpression) == 1
+ || binaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ binaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ binaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(binaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitTernaryExpression(
+ TernaryExpression ternaryExpression, IntermediateLayerVisitorContext
context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(ternaryExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer firstParentIntermediateLayer =
+ this.process(ternaryExpression.getFirstExpression(), context);
+ IntermediateLayer secondParentIntermediateLayer =
+ this.process(ternaryExpression.getSecondExpression(), context);
+ IntermediateLayer thirdParentIntermediateLayer =
+ this.process(ternaryExpression.getThirdExpression(), context);
+ Transformer transformer =
+ getConcreteTernaryTransformer(
+ ternaryExpression,
+ firstParentIntermediateLayer.constructPointReader(),
+ secondParentIntermediateLayer.constructPointReader(),
+ thirdParentIntermediateLayer.constructPointReader());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ ternaryExpression,
+ context.memoryAssigner.getReference(ternaryExpression) == 1
+ || ternaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ ternaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ ternaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(ternaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitFunctionExpression(
+ FunctionExpression functionExpression, IntermediateLayerVisitorContext
context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(functionExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+ Transformer transformer;
+ if (functionExpression.isBuiltInAggregationFunctionExpression()) {
+ transformer =
+ new TransparentTransformer(
+ context.rawTimeSeriesInputLayer.constructValuePointReader(
+ functionExpression.getInputColumnIndex()));
+ } else {
+ try {
+ IntermediateLayer udfInputIntermediateLayer =
+ constructUdfInputIntermediateLayer(functionExpression, context);
+ transformer = getUdfTransformer(functionExpression, context,
udfInputIntermediateLayer);
+ } catch (QueryProcessException | IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ context.expressionIntermediateLayerMap.put(
+ functionExpression,
+ context.memoryAssigner.getReference(functionExpression) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ functionExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ functionExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(functionExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitTimeStampOperand(
+ TimestampOperand timestampOperand, IntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(timestampOperand))
{
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ LayerPointReader parentLayerPointReader =
+ context.rawTimeSeriesInputLayer.constructTimePointReader();
+
+ context.expressionIntermediateLayerMap.put(
+ timestampOperand,
+ context.memoryAssigner.getReference(timestampOperand) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ timestampOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ timestampOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader));
+ }
+
+ return context.expressionIntermediateLayerMap.get(timestampOperand);
+ }
+
+ @Override
+ public IntermediateLayer visitTimeSeriesOperand(
+ TimeSeriesOperand timeSeriesOperand, IntermediateLayerVisitorContext
context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(timeSeriesOperand)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ LayerPointReader parentLayerPointReader =
+ context.rawTimeSeriesInputLayer.constructValuePointReader(
+ timeSeriesOperand.getInputColumnIndex());
+
+ context.expressionIntermediateLayerMap.put(
+ timeSeriesOperand,
+ context.memoryAssigner.getReference(timeSeriesOperand) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ timeSeriesOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ timeSeriesOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader));
+ }
+
+ return context.expressionIntermediateLayerMap.get(timeSeriesOperand);
+ }
+
+ @Override
+ public IntermediateLayer visitConstantOperand(
+ ConstantOperand constantOperand, IntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(constantOperand)) {
+ try {
+ IntermediateLayer intermediateLayer =
+ new ConstantIntermediateLayer(
+ constantOperand, context.queryId,
context.memoryAssigner.assign());
+ context.expressionIntermediateLayerMap.put(constantOperand,
intermediateLayer);
+ } catch (QueryProcessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return context.expressionIntermediateLayerMap.get(constantOperand);
+ }
+
+ private Transformer getConcreteUnaryTransformer(
+ Expression expression, LayerPointReader pointReader) {
+ switch (expression.getExpressionType()) {
+ case IN:
+ InExpression inExpression = (InExpression) expression;
+ return new InTransformer(pointReader, inExpression.isNotIn(),
inExpression.getValues());
+ case IS_NULL:
+ IsNullExpression isNullExpression = (IsNullExpression) expression;
+ return new IsNullTransformer(pointReader, isNullExpression.isNot());
+ case LOGIC_NOT:
+ return new LogicNotTransformer(pointReader);
+ case NEGATION:
+ return new ArithmeticNegationTransformer(pointReader);
+ case LIKE:
+ LikeExpression likeExpression = (LikeExpression) expression;
+ return new RegularTransformer(pointReader,
likeExpression.getPattern());
+ case REGEXP:
+ RegularExpression regularExpression = (RegularExpression) expression;
+ return new RegularTransformer(pointReader,
regularExpression.getPattern());
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private Transformer getConcreteBinaryTransformer(
+ Expression expression,
+ LayerPointReader leftParentLayerPointReader,
+ LayerPointReader rightParentLayerPointReader) {
+ switch (expression.getExpressionType()) {
+ case ADDITION:
+ return new ArithmeticAdditionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case SUBTRACTION:
+ return new ArithmeticSubtractionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case MULTIPLICATION:
+ return new ArithmeticMultiplicationTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case DIVISION:
+ return new ArithmeticDivisionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case MODULO:
+ return new ArithmeticModuloTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case EQUAL_TO:
+ return new CompareEqualToTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case NON_EQUAL:
+ return new CompareNonEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case GREATER_THAN:
+ return new CompareGreaterThanTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case GREATER_EQUAL:
+ return new CompareGreaterEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LESS_THAN:
+ return new CompareLessThanTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LESS_EQUAL:
+ return new CompareLessEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LOGIC_AND:
+ return new LogicAndTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
+ case LOGIC_OR:
+ return new LogicOrTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private Transformer getConcreteTernaryTransformer(
+ Expression expression,
+ LayerPointReader firstParentLayerPointReader,
+ LayerPointReader secondParentLayerPointReader,
+ LayerPointReader thirdParentLayerPointReader) {
+ switch (expression.getExpressionType()) {
+ case BETWEEN:
+ BetweenExpression betweenExpression = (BetweenExpression) expression;
+ return new BetweenTransformer(
+ firstParentLayerPointReader,
+ secondParentLayerPointReader,
+ thirdParentLayerPointReader,
+ betweenExpression.isNotBetween());
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private UDFQueryTransformer getUdfTransformer(
+ FunctionExpression functionExpression,
+ IntermediateLayerVisitorContext context,
+ IntermediateLayer udfInputIntermediateLayer)
+ throws QueryProcessException, IOException {
+ UDTFExecutor executor =
context.udtfContext.getExecutorByFunctionExpression(functionExpression);
+ List<Expression> expressions = functionExpression.getExpressions();
+
+ executor.beforeStart(
+ context.queryId,
+ context.memoryAssigner.assign(),
+
expressions.stream().map(Expression::toString).collect(Collectors.toList()),
+ expressions.stream()
+ .map(f -> context.typeProvider.getType(f.toString()))
+ .collect(Collectors.toList()),
+ functionExpression.getFunctionAttributes());
+
+ AccessStrategy accessStrategy =
executor.getConfigurations().getAccessStrategy();
+ switch (accessStrategy.getAccessStrategyType()) {
+ case MAPPABLE_ROW_BY_ROW:
+ return new MappableUDFQueryRowTransformer(
+ udfInputIntermediateLayer.constructRowReader(), executor);
+ case ROW_BY_ROW:
+ return new
UDFQueryRowTransformer(udfInputIntermediateLayer.constructRowReader(),
executor);
+ case SLIDING_SIZE_WINDOW:
+ case SLIDING_TIME_WINDOW:
+ return new UDFQueryRowWindowTransformer(
+ udfInputIntermediateLayer.constructRowWindowReader(
+ accessStrategy, context.memoryAssigner.assign()),
+ executor);
+ default:
+ throw new UnsupportedOperationException("Unsupported transformer
access strategy");
+ }
+ }
+
+ private IntermediateLayer constructUdfInputIntermediateLayer(
+ FunctionExpression functionExpression, IntermediateLayerVisitorContext
context)
+ throws QueryProcessException, IOException {
+ List<IntermediateLayer> intermediateLayers = new ArrayList<>();
+ for (Expression expression : functionExpression.getExpressions()) {
+ intermediateLayers.add(this.process(expression, context));
+ }
+ return intermediateLayers.size() == 1
+ ? intermediateLayers.get(0)
+ : new MultiInputColumnIntermediateLayer(
+ functionExpression,
+ context.queryId,
+ context.memoryAssigner.assign(),
+ intermediateLayers.stream()
+ .map(IntermediateLayer::constructPointReader)
+ .collect(Collectors.toList()));
+ }
+
+ public static class IntermediateLayerVisitorContext {
+ long queryId;
+
+ UDTFContext udtfContext;
+
+ QueryDataSetInputLayer rawTimeSeriesInputLayer;
+
+ Map<Expression, IntermediateLayer> expressionIntermediateLayerMap;
+
+ TypeProvider typeProvider;
+
+ LayerMemoryAssigner memoryAssigner;
+
+ public IntermediateLayerVisitorContext(
+ long queryId,
+ UDTFContext udtfContext,
+ QueryDataSetInputLayer rawTimeSeriesInputLayer,
+ Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
+ TypeProvider typeProvider,
+ LayerMemoryAssigner memoryAssigner) {
+ this.queryId = queryId;
+ this.udtfContext = udtfContext;
+ this.rawTimeSeriesInputLayer = rawTimeSeriesInputLayer;
+ this.expressionIntermediateLayerMap = expressionIntermediateLayerMap;
+ this.typeProvider = typeProvider;
+ this.memoryAssigner = memoryAssigner;
+ }
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/OldIntermediateLayerVisitor.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/OldIntermediateLayerVisitor.java
new file mode 100644
index 0000000000..a136c71af4
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/OldIntermediateLayerVisitor.java
@@ -0,0 +1,461 @@
+/*
+ * 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.expression.visitor;
+
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.mpp.plan.expression.Expression;
+import org.apache.iotdb.db.mpp.plan.expression.binary.BinaryExpression;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.TimestampOperand;
+import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
+import org.apache.iotdb.db.mpp.plan.expression.ternary.BetweenExpression;
+import org.apache.iotdb.db.mpp.plan.expression.ternary.TernaryExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.InExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.IsNullExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.LikeExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.RegularExpression;
+import org.apache.iotdb.db.mpp.plan.expression.unary.UnaryExpression;
+import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
+import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.ConstantIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.MultiInputColumnIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnMultiReferenceIntermediateLayer;
+import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.SingleInputColumnSingleReferenceIntermediateLayer;
+import org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
+import org.apache.iotdb.db.mpp.transformation.dag.transformer.Transformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticAdditionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticDivisionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticModuloTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticMultiplicationTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.ArithmeticSubtractionTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareEqualToTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareGreaterThanTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareLessThanTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.CompareNonEqualTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicAndTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.binary.LogicOrTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.MappableUDFQueryRowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryRowWindowTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.multi.UDFQueryTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.ternary.BetweenTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.ArithmeticNegationTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.InTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.IsNullTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.LogicNotTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.RegularTransformer;
+import
org.apache.iotdb.db.mpp.transformation.dag.transformer.unary.TransparentTransformer;
+import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFContext;
+import org.apache.iotdb.db.mpp.transformation.dag.udf.UDTFExecutor;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.udf.api.customizer.strategy.AccessStrategy;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Deprecated
+// remove after finishing MPP
+public class OldIntermediateLayerVisitor
+ extends ExpressionVisitor<
+ IntermediateLayer,
OldIntermediateLayerVisitor.OldIntermediateLayerVisitorContext> {
+
+ @Override
+ public IntermediateLayer visitExpression(
+ Expression expression, OldIntermediateLayerVisitorContext context) {
+ throw new UnsupportedOperationException(
+ "Unsupported statement type: " + expression.getClass().getName());
+ }
+
+ @Override
+ public IntermediateLayer visitUnaryExpression(
+ UnaryExpression unaryExpression, OldIntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(unaryExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer parentLayerPointReader =
+ this.process(unaryExpression.getExpression(), context);
+ Transformer transformer =
+ getConcreteUnaryTransformer(
+ unaryExpression, parentLayerPointReader.constructPointReader());
+ context.expressionDataTypeMap.put(unaryExpression,
transformer.getDataType());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ unaryExpression,
+ context.memoryAssigner.getReference(unaryExpression) == 1
+ || unaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ unaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ unaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(unaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitBinaryExpression(
+ BinaryExpression binaryExpression, OldIntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(binaryExpression))
{
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer leftParentIntermediateLayer =
+ this.process(binaryExpression.getLeftExpression(), context);
+ IntermediateLayer rightParentIntermediateLayer =
+ this.process(binaryExpression.getRightExpression(), context);
+
+ Transformer transformer =
+ getConcreteBinaryTransformer(
+ binaryExpression,
+ leftParentIntermediateLayer.constructPointReader(),
+ rightParentIntermediateLayer.constructPointReader());
+
+ context.expressionDataTypeMap.put(binaryExpression,
transformer.getDataType());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ binaryExpression,
+ context.memoryAssigner.getReference(binaryExpression) == 1
+ || binaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ binaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ binaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(binaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitTernaryExpression(
+ TernaryExpression ternaryExpression, OldIntermediateLayerVisitorContext
context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(ternaryExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ IntermediateLayer firstParentIntermediateLayer =
+ this.process(ternaryExpression.getFirstExpression(), context);
+ IntermediateLayer secondParentIntermediateLayer =
+ this.process(ternaryExpression.getSecondExpression(), context);
+ IntermediateLayer thirdParentIntermediateLayer =
+ this.process(ternaryExpression.getThirdExpression(), context);
+ Transformer transformer =
+ getConcreteTernaryTransformer(
+ ternaryExpression,
+ firstParentIntermediateLayer.constructPointReader(),
+ secondParentIntermediateLayer.constructPointReader(),
+ thirdParentIntermediateLayer.constructPointReader());
+
+ context.expressionDataTypeMap.put(ternaryExpression,
transformer.getDataType());
+
+ // SingleInputColumnMultiReferenceIntermediateLayer doesn't support
ConstantLayerPointReader
+ // yet. And since a ConstantLayerPointReader won't produce too much IO,
+ // SingleInputColumnSingleReferenceIntermediateLayer could be a better
choice.
+ context.expressionIntermediateLayerMap.put(
+ ternaryExpression,
+ context.memoryAssigner.getReference(ternaryExpression) == 1
+ || ternaryExpression.isConstantOperand()
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ ternaryExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ ternaryExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(ternaryExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitFunctionExpression(
+ FunctionExpression functionExpression,
OldIntermediateLayerVisitorContext context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(functionExpression)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+ Transformer transformer;
+ if (functionExpression.isBuiltInAggregationFunctionExpression()) {
+ transformer =
+ new TransparentTransformer(
+ context.rawTimeSeriesInputLayer.constructValuePointReader(
+ functionExpression.getInputColumnIndex()));
+ } else {
+ try {
+ IntermediateLayer udfInputIntermediateLayer =
+ constructUdfInputIntermediateLayer(functionExpression, context);
+ transformer = getUdfTransformer(functionExpression, context,
udfInputIntermediateLayer);
+ } catch (QueryProcessException | IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ context.expressionDataTypeMap.put(functionExpression,
transformer.getDataType());
+ context.expressionIntermediateLayerMap.put(
+ functionExpression,
+ context.memoryAssigner.getReference(functionExpression) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ functionExpression, context.queryId, memoryBudgetInMB,
transformer)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ functionExpression, context.queryId, memoryBudgetInMB,
transformer));
+ }
+
+ return context.expressionIntermediateLayerMap.get(functionExpression);
+ }
+
+ @Override
+ public IntermediateLayer visitTimeStampOperand(
+ TimestampOperand timestampOperand, OldIntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(timestampOperand))
{
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ LayerPointReader parentLayerPointReader =
+ context.rawTimeSeriesInputLayer.constructTimePointReader();
+
+ context.expressionDataTypeMap.put(timestampOperand,
parentLayerPointReader.getDataType());
+ context.expressionIntermediateLayerMap.put(
+ timestampOperand,
+ context.memoryAssigner.getReference(timestampOperand) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ timestampOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ timestampOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader));
+ }
+
+ return context.expressionIntermediateLayerMap.get(timestampOperand);
+ }
+
+ @Override
+ public IntermediateLayer visitTimeSeriesOperand(
+ TimeSeriesOperand timeSeriesOperand, OldIntermediateLayerVisitorContext
context) {
+ if
(!context.expressionIntermediateLayerMap.containsKey(timeSeriesOperand)) {
+ float memoryBudgetInMB = context.memoryAssigner.assign();
+
+ LayerPointReader parentLayerPointReader =
+ context.rawTimeSeriesInputLayer.constructValuePointReader(
+ timeSeriesOperand.getInputColumnIndex());
+
+ context.expressionDataTypeMap.put(timeSeriesOperand,
parentLayerPointReader.getDataType());
+ context.expressionIntermediateLayerMap.put(
+ timeSeriesOperand,
+ context.memoryAssigner.getReference(timeSeriesOperand) == 1
+ ? new SingleInputColumnSingleReferenceIntermediateLayer(
+ timeSeriesOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader)
+ : new SingleInputColumnMultiReferenceIntermediateLayer(
+ timeSeriesOperand, context.queryId, memoryBudgetInMB,
parentLayerPointReader));
+ }
+
+ return context.expressionIntermediateLayerMap.get(timeSeriesOperand);
+ }
+
+ @Override
+ public IntermediateLayer visitConstantOperand(
+ ConstantOperand constantOperand, OldIntermediateLayerVisitorContext
context) {
+ if (!context.expressionIntermediateLayerMap.containsKey(constantOperand)) {
+ try {
+ context.expressionDataTypeMap.put(constantOperand,
constantOperand.getDataType());
+ IntermediateLayer intermediateLayer =
+ new ConstantIntermediateLayer(
+ constantOperand, context.queryId,
context.memoryAssigner.assign());
+ context.expressionIntermediateLayerMap.put(constantOperand,
intermediateLayer);
+ } catch (QueryProcessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return context.expressionIntermediateLayerMap.get(constantOperand);
+ }
+
+ private Transformer getConcreteUnaryTransformer(
+ Expression expression, LayerPointReader pointReader) {
+ switch (expression.getExpressionType()) {
+ case IN:
+ InExpression inExpression = (InExpression) expression;
+ return new InTransformer(pointReader, inExpression.isNotIn(),
inExpression.getValues());
+ case IS_NULL:
+ IsNullExpression isNullExpression = (IsNullExpression) expression;
+ return new IsNullTransformer(pointReader, isNullExpression.isNot());
+ case LOGIC_NOT:
+ return new LogicNotTransformer(pointReader);
+ case NEGATION:
+ return new ArithmeticNegationTransformer(pointReader);
+ case LIKE:
+ LikeExpression likeExpression = (LikeExpression) expression;
+ return new RegularTransformer(pointReader,
likeExpression.getPattern());
+ case REGEXP:
+ RegularExpression regularExpression = (RegularExpression) expression;
+ return new RegularTransformer(pointReader,
regularExpression.getPattern());
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private Transformer getConcreteBinaryTransformer(
+ Expression expression,
+ LayerPointReader leftParentLayerPointReader,
+ LayerPointReader rightParentLayerPointReader) {
+ switch (expression.getExpressionType()) {
+ case ADDITION:
+ return new ArithmeticAdditionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case SUBTRACTION:
+ return new ArithmeticSubtractionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case MULTIPLICATION:
+ return new ArithmeticMultiplicationTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case DIVISION:
+ return new ArithmeticDivisionTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case MODULO:
+ return new ArithmeticModuloTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case EQUAL_TO:
+ return new CompareEqualToTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case NON_EQUAL:
+ return new CompareNonEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case GREATER_THAN:
+ return new CompareGreaterThanTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case GREATER_EQUAL:
+ return new CompareGreaterEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LESS_THAN:
+ return new CompareLessThanTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LESS_EQUAL:
+ return new CompareLessEqualTransformer(
+ leftParentLayerPointReader, rightParentLayerPointReader);
+ case LOGIC_AND:
+ return new LogicAndTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
+ case LOGIC_OR:
+ return new LogicOrTransformer(leftParentLayerPointReader,
rightParentLayerPointReader);
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private Transformer getConcreteTernaryTransformer(
+ Expression expression,
+ LayerPointReader firstParentLayerPointReader,
+ LayerPointReader secondParentLayerPointReader,
+ LayerPointReader thirdParentLayerPointReader) {
+ switch (expression.getExpressionType()) {
+ case BETWEEN:
+ BetweenExpression betweenExpression = (BetweenExpression) expression;
+ return new BetweenTransformer(
+ firstParentLayerPointReader,
+ secondParentLayerPointReader,
+ thirdParentLayerPointReader,
+ betweenExpression.isNotBetween());
+ default:
+ throw new UnsupportedOperationException(
+ "Unsupported Expression Type: " + expression.getExpressionType());
+ }
+ }
+
+ private UDFQueryTransformer getUdfTransformer(
+ FunctionExpression functionExpression,
+ OldIntermediateLayerVisitorContext context,
+ IntermediateLayer udfInputIntermediateLayer)
+ throws QueryProcessException, IOException {
+ UDTFExecutor executor =
context.udtfContext.getExecutorByFunctionExpression(functionExpression);
+ List<Expression> expressions = functionExpression.getExpressions();
+
+ executor.beforeStart(
+ context.queryId,
+ context.memoryAssigner.assign(),
+
expressions.stream().map(Expression::toString).collect(Collectors.toList()),
+
expressions.stream().map(context.expressionDataTypeMap::get).collect(Collectors.toList()),
+ functionExpression.getFunctionAttributes());
+
+ AccessStrategy accessStrategy =
executor.getConfigurations().getAccessStrategy();
+ switch (accessStrategy.getAccessStrategyType()) {
+ case MAPPABLE_ROW_BY_ROW:
+ return new MappableUDFQueryRowTransformer(
+ udfInputIntermediateLayer.constructRowReader(), executor);
+ case ROW_BY_ROW:
+ return new
UDFQueryRowTransformer(udfInputIntermediateLayer.constructRowReader(),
executor);
+ case SLIDING_SIZE_WINDOW:
+ case SLIDING_TIME_WINDOW:
+ return new UDFQueryRowWindowTransformer(
+ udfInputIntermediateLayer.constructRowWindowReader(
+ accessStrategy, context.memoryAssigner.assign()),
+ executor);
+ default:
+ throw new UnsupportedOperationException("Unsupported transformer
access strategy");
+ }
+ }
+
+ private IntermediateLayer constructUdfInputIntermediateLayer(
+ FunctionExpression functionExpression,
OldIntermediateLayerVisitorContext context)
+ throws QueryProcessException, IOException {
+ List<IntermediateLayer> intermediateLayers = new ArrayList<>();
+ for (Expression expression : functionExpression.getExpressions()) {
+ intermediateLayers.add(this.process(expression, context));
+ }
+ return intermediateLayers.size() == 1
+ ? intermediateLayers.get(0)
+ : new MultiInputColumnIntermediateLayer(
+ functionExpression,
+ context.queryId,
+ context.memoryAssigner.assign(),
+ intermediateLayers.stream()
+ .map(IntermediateLayer::constructPointReader)
+ .collect(Collectors.toList()));
+ }
+
+ public static class OldIntermediateLayerVisitorContext {
+ long queryId;
+
+ UDTFContext udtfContext;
+
+ QueryDataSetInputLayer rawTimeSeriesInputLayer;
+
+ Map<Expression, IntermediateLayer> expressionIntermediateLayerMap;
+
+ Map<Expression, TSDataType> expressionDataTypeMap;
+
+ LayerMemoryAssigner memoryAssigner;
+
+ public OldIntermediateLayerVisitorContext(
+ long queryId,
+ UDTFContext udtfContext,
+ QueryDataSetInputLayer rawTimeSeriesInputLayer,
+ Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
+ Map<Expression, TSDataType> expressionDataTypeMap,
+ LayerMemoryAssigner memoryAssigner) {
+ this.queryId = queryId;
+ this.udtfContext = udtfContext;
+ this.rawTimeSeriesInputLayer = rawTimeSeriesInputLayer;
+ this.expressionIntermediateLayerMap = expressionIntermediateLayerMap;
+ this.expressionDataTypeMap = expressionDataTypeMap;
+ this.memoryAssigner = memoryAssigner;
+ }
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/DAGBuilder.java
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/DAGBuilder.java
index abe194bf2a..518e147183 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/DAGBuilder.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/DAGBuilder.java
@@ -19,9 +19,9 @@
package org.apache.iotdb.db.mpp.transformation.dag.builder;
-import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.expression.ResultColumn;
+import
org.apache.iotdb.db.mpp.plan.expression.visitor.OldIntermediateLayerVisitor;
import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
import
org.apache.iotdb.db.mpp.transformation.dag.intermediate.IntermediateLayer;
@@ -29,7 +29,6 @@ import
org.apache.iotdb.db.mpp.transformation.dag.memory.LayerMemoryAssigner;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -87,18 +86,19 @@ public class DAGBuilder {
return this;
}
- public DAGBuilder buildResultColumnPointReaders() throws
QueryProcessException, IOException {
+ public DAGBuilder buildResultColumnPointReaders() {
+ OldIntermediateLayerVisitor visitor = new OldIntermediateLayerVisitor();
+ OldIntermediateLayerVisitor.OldIntermediateLayerVisitorContext context =
+ new OldIntermediateLayerVisitor.OldIntermediateLayerVisitorContext(
+ queryId,
+ udtfPlan.getUdtfContext(),
+ rawTimeSeriesInputLayer,
+ expressionIntermediateLayerMap,
+ expressionDataTypeMap,
+ memoryAssigner);
for (int i = 0; i < resultColumnExpressions.length; ++i) {
resultColumnPointReaders[i] =
- resultColumnExpressions[i]
- .constructIntermediateLayer(
- queryId,
- udtfPlan.getUdtfContext(),
- rawTimeSeriesInputLayer,
- expressionIntermediateLayerMap,
- expressionDataTypeMap,
- memoryAssigner)
- .constructPointReader();
+ visitor.process(resultColumnExpressions[i],
context).constructPointReader();
}
return this;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/EvaluationDAGBuilder.java
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/EvaluationDAGBuilder.java
index 7a7a76bf5a..1dfffd74b9 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/EvaluationDAGBuilder.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/builder/EvaluationDAGBuilder.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.transformation.dag.builder;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.mpp.plan.analyze.TypeProvider;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
+import
org.apache.iotdb.db.mpp.plan.expression.visitor.IntermediateLayerVisitor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.InputLocation;
import org.apache.iotdb.db.mpp.transformation.api.LayerPointReader;
import org.apache.iotdb.db.mpp.transformation.dag.input.QueryDataSetInputLayer;
@@ -95,17 +96,17 @@ public class EvaluationDAGBuilder {
public EvaluationDAGBuilder buildResultColumnPointReaders()
throws QueryProcessException, IOException {
+ IntermediateLayerVisitor visitor = new IntermediateLayerVisitor();
+ IntermediateLayerVisitor.IntermediateLayerVisitorContext context =
+ new IntermediateLayerVisitor.IntermediateLayerVisitorContext(
+ queryId,
+ udtfContext,
+ inputLayer,
+ expressionIntermediateLayerMap,
+ typeProvider,
+ memoryAssigner);
for (int i = 0; i < outputExpressions.length; ++i) {
- outputPointReaders[i] =
- outputExpressions[i]
- .constructIntermediateLayer(
- queryId,
- udtfContext,
- inputLayer,
- expressionIntermediateLayerMap,
- typeProvider,
- memoryAssigner)
- .constructPointReader();
+ outputPointReaders[i] = visitor.process(outputExpressions[i],
context).constructPointReader();
}
return this;
}