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 10:50:46 UTC

[iotdb] 01/02: fix a bug

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 <ro...@apache.org>
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) {