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 <[email protected]> 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:
