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) {

Reply via email to