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 c7d3818477405641732c4e73353404bcffff8bda Author: Steve Yurong Su <[email protected]> AuthorDate: Fri May 28 18:39:47 2021 +0800 fix a bug --- .../iotdb/db/qp/physical/crud/QueryPlan.java | 2 +- .../db/qp/physical/crud/RawDataQueryPlan.java | 2 +- .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java | 41 ++++++++++------------ .../apache/iotdb/db/query/dataset/UDTFDataSet.java | 3 +- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java index c28d9c6..c2c3157 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java @@ -113,7 +113,7 @@ public abstract class QueryPlan extends PhysicalPlan { alignByTime = align; } - public void addPathToIndex(String columnName, Integer index) { + public void setColumnNameToDatasetOutputIndex(String columnName, Integer index) { pathToIndex.put(columnName, index); } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java index 74b6b25..49d6da5 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/RawDataQueryPlan.java @@ -89,7 +89,7 @@ public class RawDataQueryPlan extends QueryPlan { String columnForDisplay = getColumnForDisplay(columnForReader, originalIndex); if (!columnForDisplaySet.contains(columnForDisplay)) { - addPathToIndex(columnForDisplay, getPathToIndex().size()); + setColumnNameToDatasetOutputIndex(columnForDisplay, getPathToIndex().size()); columnForDisplaySet.add(columnForDisplay); } } 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 856319f..0ae2109 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 @@ -54,8 +54,7 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan { protected Map<String, UDTFExecutor> columnName2Executor = new HashMap<>(); protected Map<Integer, UDTFExecutor> originalOutputColumnIndex2Executor = new HashMap<>(); - protected List<String> datasetOutputColumnIndex2UdfColumnName = new ArrayList<>(); - protected List<String> datasetOutputColumnIndex2RawQueryColumnName = new ArrayList<>(); + protected Map<Integer, Integer> datasetOutputIndexToResultColumnIndex = new HashMap<>(); protected Map<String, Integer> pathNameToReaderIndex; @@ -98,12 +97,9 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan { String columnForDisplay = getColumnForDisplay(columnForReader, originalIndex); if (!columnForDisplaySet.contains(columnForDisplay)) { - addPathToIndex(columnForDisplay, getPathToIndex().size()); - if (isUdf) { - addUdfOutputColumn(columnForDisplay); - } else { - addRawQueryOutputColumn(columnForDisplay); - } + int datasetOutputIndex = getPathToIndex().size(); + setColumnNameToDatasetOutputIndex(columnForDisplay, datasetOutputIndex); + setDatasetOutputIndexToResultColumnIndex(datasetOutputIndex, originalIndex); columnForDisplaySet.add(columnForDisplay); } } @@ -111,6 +107,11 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan { setPathNameToReaderIndex(pathNameToReaderIndex); } + private void setDatasetOutputIndexToResultColumnIndex( + int datasetOutputIndex, Integer originalIndex) { + datasetOutputIndexToResultColumnIndex.put(datasetOutputIndex, originalIndex); + } + @Override public void constructUdfExecutors(List<ResultColumn> resultColumns) { for (int i = 0; i < resultColumns.size(); ++i) { @@ -180,20 +181,26 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan { return originalOutputColumnIndex2Executor.get(originalOutputColumn); } + public ResultColumn getResultColumnByDatasetOutputIndex(int datasetOutputIndex) { + return resultColumns.get(datasetOutputIndexToResultColumnIndex.get(datasetOutputIndex)); + } + public UDTFExecutor getExecutorByDataSetOutputColumnIndex(int datasetOutputIndex) { - return columnName2Executor.get(datasetOutputColumnIndex2UdfColumnName.get(datasetOutputIndex)); + return columnName2Executor.get( + getResultColumnByDatasetOutputIndex(datasetOutputIndex).getResultColumnName()); } public String getRawQueryColumnNameByDatasetOutputColumnIndex(int datasetOutputIndex) { - return datasetOutputColumnIndex2RawQueryColumnName.get(datasetOutputIndex); + return getResultColumnByDatasetOutputIndex(datasetOutputIndex).getResultColumnName(); } public boolean isUdfColumn(int datasetOutputIndex) { - return resultColumns.get(datasetOutputIndex).getExpression() instanceof FunctionExpression; + return getResultColumnByDatasetOutputIndex(datasetOutputIndex).getExpression() + instanceof FunctionExpression; } public boolean isArithmeticColumn(int datasetOutputIndex) { - Expression expression = resultColumns.get(datasetOutputIndex).getExpression(); + Expression expression = getResultColumnByDatasetOutputIndex(datasetOutputIndex).getExpression(); return expression instanceof BinaryExpression || expression instanceof NegationExpression; } @@ -201,16 +208,6 @@ public class UDTFPlan extends RawDataQueryPlan implements UDFPlan { return pathNameToReaderIndex.get(pathName); } - public void addUdfOutputColumn(String udfDatasetOutputColumn) { - datasetOutputColumnIndex2UdfColumnName.add(udfDatasetOutputColumn); - datasetOutputColumnIndex2RawQueryColumnName.add(null); - } - - public void addRawQueryOutputColumn(String rawQueryOutputColumn) { - datasetOutputColumnIndex2UdfColumnName.add(null); - datasetOutputColumnIndex2RawQueryColumnName.add(rawQueryOutputColumn); - } - public void setPathNameToReaderIndex(Map<String, Integer> pathNameToReaderIndex) { this.pathNameToReaderIndex = pathNameToReaderIndex; } 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 610b2c4..7cab6b2 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 @@ -192,7 +192,8 @@ public abstract class UDTFDataSet extends QueryDataSet { } private void constructArithmeticTransformer(int columnIndex) { - Expression expression = udtfPlan.getResultColumns().get(columnIndex).getExpression(); + Expression expression = + udtfPlan.getResultColumnByDatasetOutputIndex(columnIndex).getExpression(); // unary expression if (expression instanceof NegationExpression) {
