You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/05/28 04:14:01 UTC
[iotdb] 04/06: support + - * / %
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch iotdb-1400
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 83034d5efa8f8b53756769c8e301f7dfd1d478b5
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Thu May 27 21:39:57 2021 +0800
support + - * / %
---
.../apache/iotdb/db/qp/physical/crud/UDTFPlan.java | 31 +++++++++-
.../apache/iotdb/db/query/dataset/UDTFDataSet.java | 72 +++++++++++++++++++++-
.../iotdb/db/query/expression/Expression.java | 5 --
.../query/expression/binary/BinaryExpression.java | 18 +++---
.../query/expression/unary/FunctionExpression.java | 18 ------
.../query/expression/unary/NegationExpression.java | 6 +-
.../query/expression/unary/TimeSeriesOperand.java | 10 ---
.../transformer/ArithmeticAdditionTransformer.java | 2 +-
.../transformer/ArithmeticBinaryTransformer.java | 7 ++-
.../transformer/ArithmeticDivisionTransformer.java | 2 +-
.../transformer/ArithmeticModuloTransformer.java | 2 +-
.../ArithmeticMultiplicationTransformer.java | 2 +-
.../ArithmeticSubtractionTransformer.java | 2 +-
.../org/apache/iotdb/db/service/TSServiceImpl.java | 9 +--
14 files changed, 121 insertions(+), 65 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
index bd2cc94..856319f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UDTFPlan.java
@@ -26,12 +26,15 @@ import org.apache.iotdb.db.qp.logical.Operator;
import org.apache.iotdb.db.qp.strategy.PhysicalGenerator;
import org.apache.iotdb.db.query.expression.Expression;
import org.apache.iotdb.db.query.expression.ResultColumn;
+import org.apache.iotdb.db.query.expression.binary.BinaryExpression;
import org.apache.iotdb.db.query.expression.unary.FunctionExpression;
+import org.apache.iotdb.db.query.expression.unary.NegationExpression;
import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
import org.apache.iotdb.db.query.udf.service.UDFClassLoaderManager;
import org.apache.iotdb.db.query.udf.service.UDFRegistrationService;
import org.apache.iotdb.db.service.IoTDB;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.Pair;
import java.time.ZoneId;
@@ -152,6 +155,27 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
}
}
+ public TSDataType getOriginalOutputColumnDataType(int originalOutputColumn) {
+ Expression expression = resultColumns.get(originalOutputColumn).getExpression();
+ // UDF query
+ if (expression instanceof FunctionExpression) {
+ return getExecutorByOriginalOutputColumnIndex(originalOutputColumn)
+ .getConfigurations()
+ .getOutputDataType();
+ }
+ // arithmetic binary query
+ if (expression instanceof BinaryExpression) {
+ return TSDataType.DOUBLE;
+ }
+ // arithmetic negation query
+ if (expression instanceof NegationExpression) {
+ return getDeduplicatedDataTypes()
+ .get(getReaderIndex(((NegationExpression) expression).getExpression().toString()));
+ }
+ // raw query
+ return getDeduplicatedDataTypes().get(getReaderIndex(expression.toString()));
+ }
+
public UDTFExecutor getExecutorByOriginalOutputColumnIndex(int originalOutputColumn) {
return originalOutputColumnIndex2Executor.get(originalOutputColumn);
}
@@ -165,7 +189,12 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan {
}
public boolean isUdfColumn(int datasetOutputIndex) {
- return datasetOutputColumnIndex2UdfColumnName.get(datasetOutputIndex) != null;
+ return resultColumns.get(datasetOutputIndex).getExpression() instanceof FunctionExpression;
+ }
+
+ public boolean isArithmeticColumn(int datasetOutputIndex) {
+ Expression expression = resultColumns.get(datasetOutputIndex).getExpression();
+ return expression instanceof BinaryExpression || expression instanceof NegationExpression;
}
public int getReaderIndex(String pathName) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/UDTFDataSet.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/UDTFDataSet.java
index 4fa2db9..79226f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/dataset/UDTFDataSet.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/UDTFDataSet.java
@@ -24,12 +24,27 @@ import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.expression.binary.AdditionExpression;
+import org.apache.iotdb.db.query.expression.binary.BinaryExpression;
+import org.apache.iotdb.db.query.expression.binary.DivisionExpression;
+import org.apache.iotdb.db.query.expression.binary.ModuloExpression;
+import org.apache.iotdb.db.query.expression.binary.MultiplicationExpression;
+import org.apache.iotdb.db.query.expression.binary.SubtractionExpression;
+import org.apache.iotdb.db.query.expression.unary.NegationExpression;
import org.apache.iotdb.db.query.reader.series.IReaderByTimestamp;
import org.apache.iotdb.db.query.reader.series.ManagedSeriesReader;
import org.apache.iotdb.db.query.udf.api.customizer.strategy.AccessStrategy;
import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
import org.apache.iotdb.db.query.udf.core.input.InputLayer;
import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticAdditionTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticDivisionTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticModuloTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticMultiplicationTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticNegationTransformer;
+import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticSubtractionTransformer;
import org.apache.iotdb.db.query.udf.core.transformer.RawQueryPointTransformer;
import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
import org.apache.iotdb.db.query.udf.core.transformer.UDFQueryRowTransformer;
@@ -113,6 +128,8 @@ public abstract class UDTFDataSet extends QueryDataSet {
for (int i = 0; i < size; ++i) {
if (udtfPlan.isUdfColumn(i)) {
constructUDFTransformer(i, memoryBudgetForSingleWindowTransformer);
+ } else if (udtfPlan.isArithmeticColumn(i)) {
+ constructArithmeticTransformer(i);
} else {
constructRawQueryTransformer(i);
}
@@ -175,12 +192,61 @@ public abstract class UDTFDataSet extends QueryDataSet {
return readerIndexes;
}
+ private void constructArithmeticTransformer(int columnIndex) {
+ Expression expression = udtfPlan.getResultColumns().get(columnIndex).getExpression();
+
+ // unary expression
+ if (expression instanceof NegationExpression) {
+ transformers[columnIndex] =
+ new ArithmeticNegationTransformer(
+ constructPointReaderBySeriesName(
+ ((NegationExpression) expression).getExpression().toString()));
+ return;
+ }
+
+ // binary expression
+ ArithmeticBinaryTransformer transformer;
+ BinaryExpression binaryExpression = (BinaryExpression) expression;
+ if (binaryExpression instanceof AdditionExpression) {
+ transformer =
+ new ArithmeticAdditionTransformer(
+ constructPointReaderBySeriesName(binaryExpression.getLeftExpression().toString()),
+ constructPointReaderBySeriesName(binaryExpression.getRightExpression().toString()));
+ } else if (binaryExpression instanceof SubtractionExpression) {
+ transformer =
+ new ArithmeticSubtractionTransformer(
+ constructPointReaderBySeriesName(binaryExpression.getLeftExpression().toString()),
+ constructPointReaderBySeriesName(binaryExpression.getRightExpression().toString()));
+ } else if (binaryExpression instanceof MultiplicationExpression) {
+ transformer =
+ new ArithmeticMultiplicationTransformer(
+ constructPointReaderBySeriesName(binaryExpression.getLeftExpression().toString()),
+ constructPointReaderBySeriesName(binaryExpression.getRightExpression().toString()));
+ } else if (binaryExpression instanceof DivisionExpression) {
+ transformer =
+ new ArithmeticDivisionTransformer(
+ constructPointReaderBySeriesName(binaryExpression.getLeftExpression().toString()),
+ constructPointReaderBySeriesName(binaryExpression.getRightExpression().toString()));
+ } else if (binaryExpression instanceof ModuloExpression) {
+ transformer =
+ new ArithmeticModuloTransformer(
+ constructPointReaderBySeriesName(binaryExpression.getLeftExpression().toString()),
+ constructPointReaderBySeriesName(binaryExpression.getRightExpression().toString()));
+ } else {
+ throw new UnsupportedOperationException(binaryExpression.toString());
+ }
+ transformers[columnIndex] = transformer;
+ }
+
private void constructRawQueryTransformer(int columnIndex) {
transformers[columnIndex] =
new RawQueryPointTransformer(
- inputLayer.constructPointReader(
- udtfPlan.getReaderIndex(
- udtfPlan.getRawQueryColumnNameByDatasetOutputColumnIndex(columnIndex))));
+ constructPointReaderBySeriesName(
+ udtfPlan.getRawQueryColumnNameByDatasetOutputColumnIndex(columnIndex)));
+ }
+
+ private LayerPointReader constructPointReaderBySeriesName(String seriesName) {
+ return inputLayer.constructPointReader(udtfPlan.getReaderIndex(seriesName));
}
public void finalizeUDFs(long queryId) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index b0c5f60..f610c5a 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -19,11 +19,9 @@
package org.apache.iotdb.db.query.expression;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.util.List;
import java.util.Set;
@@ -38,9 +36,6 @@ public interface Expression {
return false;
}
- // TODO: implement this method
- TSDataType dataType() throws MetadataException;
-
void concat(List<PartialPath> prefixPaths, List<Expression> resultExpressions);
void removeWildcards(WildcardsRemover wildcardsRemover, List<Expression> resultExpressions)
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
index cff5bc3..48f94f8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.util.ArrayList;
import java.util.List;
@@ -39,14 +38,9 @@ public abstract class BinaryExpression implements Expression {
this.rightExpression = rightExpression;
}
- /**
- * The result data type of all arithmetic operations will be DOUBLE.
- *
- * <p>TODO: This is just a simple implementation and should be optimized later.
- */
@Override
- public final TSDataType dataType() {
- return TSDataType.DOUBLE;
+ public boolean isTimeSeriesGeneratingFunctionExpression() {
+ return true;
}
@Override
@@ -108,6 +102,14 @@ public abstract class BinaryExpression implements Expression {
rightExpression.collectPaths(pathSet);
}
+ public Expression getLeftExpression() {
+ return leftExpression;
+ }
+
+ public Expression getRightExpression() {
+ return rightExpression;
+ }
+
@Override
public final String toString() {
return String.format(
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
index a321f97..1920e32 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
@@ -19,14 +19,12 @@
package org.apache.iotdb.db.query.expression.unary;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.constant.SQLConstant;
import org.apache.iotdb.db.qp.strategy.optimizer.ConcatPathOptimizer;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.tsfile.exception.NotImplementedException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.util.ArrayList;
@@ -113,12 +111,6 @@ public class FunctionExpression implements Expression {
}
@Override
- public TSDataType dataType() {
- // TODO: the expression type is determined in runtime
- throw new NotImplementedException();
- }
-
- @Override
public void concat(List<PartialPath> prefixPaths, List<Expression> resultExpressions) {
List<List<Expression>> resultExpressionsForRecursionList = new ArrayList<>();
@@ -153,16 +145,6 @@ public class FunctionExpression implements Expression {
}
}
- public List<TSDataType> getDataTypes() throws MetadataException {
- if (dataTypes == null) {
- dataTypes = new ArrayList<>();
- for (Expression expression : expressions) {
- dataTypes.add(expression.dataType());
- }
- }
- return dataTypes;
- }
-
public List<PartialPath> getPaths() {
if (paths == null) {
paths = new ArrayList<>();
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
index ea63365..675adb9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
@@ -19,12 +19,10 @@
package org.apache.iotdb.db.query.expression.unary;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.util.ArrayList;
import java.util.List;
@@ -43,8 +41,8 @@ public class NegationExpression implements Expression {
}
@Override
- public TSDataType dataType() throws MetadataException {
- return expression.dataType();
+ public boolean isTimeSeriesGeneratingFunctionExpression() {
+ return true;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
index e69353c..232d031 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
@@ -19,12 +19,10 @@
package org.apache.iotdb.db.query.expression.unary;
-import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.qp.utils.WildcardsRemover;
import org.apache.iotdb.db.query.expression.Expression;
-import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import java.util.List;
@@ -48,14 +46,6 @@ public class TimeSeriesOperand implements Expression {
}
@Override
- public TSDataType dataType() throws MetadataException {
- if (dataType == null) {
- dataType = IoTDB.metaManager.getSeriesType(path);
- }
- return dataType;
- }
-
- @Override
public void concat(List<PartialPath> prefixPaths, List<Expression> resultExpressions) {
for (PartialPath prefixPath : prefixPaths) {
resultExpressions.add(new TimeSeriesOperand(prefixPath.concatPath(path)));
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java
index 15aa3cc..031f58d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticAdditionTransformer.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
public class ArithmeticAdditionTransformer extends ArithmeticBinaryTransformer {
- protected ArithmeticAdditionTransformer(
+ public ArithmeticAdditionTransformer(
LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
super(leftPointReader, rightPointReader);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
index a1e52b8..d29e2da 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticBinaryTransformer.java
@@ -45,9 +45,10 @@ public abstract class ArithmeticBinaryTransformer extends Transformer {
if (!cacheTime()) {
return false;
}
- evaluate(
- castCurrentValueToDoubleOperand(leftPointReader),
- castCurrentValueToDoubleOperand(rightPointReader));
+ cachedDouble =
+ evaluate(
+ castCurrentValueToDoubleOperand(leftPointReader),
+ castCurrentValueToDoubleOperand(rightPointReader));
leftPointReader.readyForNext();
rightPointReader.readyForNext();
return true;
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java
index c4bfd28..c603003 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticDivisionTransformer.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
public class ArithmeticDivisionTransformer extends ArithmeticBinaryTransformer {
- protected ArithmeticDivisionTransformer(
+ public ArithmeticDivisionTransformer(
LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
super(leftPointReader, rightPointReader);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java
index 9a2ca0d..561974a 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticModuloTransformer.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
public class ArithmeticModuloTransformer extends ArithmeticBinaryTransformer {
- protected ArithmeticModuloTransformer(
+ public ArithmeticModuloTransformer(
LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
super(leftPointReader, rightPointReader);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java
index 2298767..566108b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticMultiplicationTransformer.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
public class ArithmeticMultiplicationTransformer extends ArithmeticBinaryTransformer {
- protected ArithmeticMultiplicationTransformer(
+ public ArithmeticMultiplicationTransformer(
LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
super(leftPointReader, rightPointReader);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java
index 4ccde7a..5ce2a58 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/transformer/ArithmeticSubtractionTransformer.java
@@ -23,7 +23,7 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
public class ArithmeticSubtractionTransformer extends ArithmeticBinaryTransformer {
- protected ArithmeticSubtractionTransformer(
+ public ArithmeticSubtractionTransformer(
LayerPointReader leftPointReader, LayerPointReader rightPointReader) {
super(leftPointReader, rightPointReader);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index fc8c344..0761dad 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -83,7 +83,6 @@ import org.apache.iotdb.db.query.dataset.DirectAlignByTimeDataSet;
import org.apache.iotdb.db.query.dataset.DirectNonAlignDataSet;
import org.apache.iotdb.db.query.dataset.UDTFDataSet;
import org.apache.iotdb.db.query.expression.ResultColumn;
-import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
import org.apache.iotdb.db.tools.watermark.GroupedLSBWatermarkEncoder;
import org.apache.iotdb.db.tools.watermark.WatermarkEncoder;
import org.apache.iotdb.db.utils.QueryDataSetUtils;
@@ -1022,13 +1021,7 @@ public class TSServiceImpl implements TSIService.Iface {
UDTFPlan udtfPlan = (UDTFPlan) plan;
for (int i = 0; i < paths.size(); i++) {
respColumns.add(resultColumns.get(i).getResultColumnName());
- seriesTypes.add(
- resultColumns.get(i).getExpression() instanceof TimeSeriesOperand
- ? udtfPlan.getDataTypes().get(i)
- : udtfPlan
- .getExecutorByOriginalOutputColumnIndex(i)
- .getConfigurations()
- .getOutputDataType());
+ seriesTypes.add(udtfPlan.getOriginalOutputColumnDataType(i));
}
break;
default: