This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new eafa32263c [IOTDB-3371] Fix bug when using alias in SELECT clause 
(#6139)
eafa32263c is described below

commit eafa32263cb1da69843de6ded64e637935ae4494
Author: liuminghui233 <[email protected]>
AuthorDate: Wed Jun 15 17:05:10 2022 +0800

    [IOTDB-3371] Fix bug when using alias in SELECT clause (#6139)
---
 .../apache/iotdb/db/mpp/common/header/ColumnHeader.java  |  6 +++++-
 .../apache/iotdb/db/mpp/common/header/DatasetHeader.java | 16 ++++++++++++++--
 .../main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java |  9 ++++++---
 .../main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java  |  9 ++++++---
 4 files changed, 31 insertions(+), 9 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeader.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeader.java
index 9cadcd7bcb..f47ca09099 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeader.java
@@ -43,13 +43,17 @@ public class ColumnHeader {
     this.alias = null;
   }
 
-  public String getColumnName() {
+  public String getColumnNameWithAlias() {
     if (alias != null) {
       return alias;
     }
     return columnName;
   }
 
+  public String getColumnName() {
+    return columnName;
+  }
+
   public TSDataType getColumnType() {
     return dataType;
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
index 7f21dc469f..a89e1a1c19 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
@@ -64,7 +64,9 @@ public class DatasetHeader {
   }
 
   public List<String> getRespColumns() {
-    return 
columnHeaders.stream().map(ColumnHeader::getColumnName).collect(Collectors.toList());
+    return columnHeaders.stream()
+        .map(ColumnHeader::getColumnNameWithAlias)
+        .collect(Collectors.toList());
   }
 
   public List<String> getRespDataTypeList() {
@@ -89,7 +91,17 @@ public class DatasetHeader {
   }
 
   public Map<String, Integer> getColumnNameIndexMap() {
-    return columnToTsBlockIndexMap;
+    if (columnToTsBlockIndexMap == null || columnToTsBlockIndexMap.isEmpty()) {
+      return columnToTsBlockIndexMap;
+    }
+
+    Map<String, Integer> columnNameIndexMap = new HashMap<>();
+    for (ColumnHeader columnHeader : columnHeaders) {
+      columnNameIndexMap.put(
+          columnHeader.getColumnNameWithAlias(),
+          columnToTsBlockIndexMap.get(columnHeader.getColumnName()));
+    }
+    return columnNameIndexMap;
   }
 
   public int getOutputValueColumnCount() {
diff --git 
a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java 
b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
index 670f025848..8f47547ce5 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBJDBCDataSet.java
@@ -116,8 +116,9 @@ public class IoTDBJDBCDataSet {
 
     // deduplicate and map
     if (columnNameIndex != null) {
-      this.columnTypeDeduplicatedList = new 
ArrayList<>(columnNameIndex.size());
-      for (int i = 0; i < columnNameIndex.size(); i++) {
+      int columnSize = (int) 
columnNameIndex.values().stream().distinct().count();
+      this.columnTypeDeduplicatedList = new ArrayList<>(columnSize);
+      for (int i = 0; i < columnSize; i++) {
         columnTypeDeduplicatedList.add(null);
       }
       for (int i = 0; i < columnNameList.size(); i++) {
@@ -126,8 +127,10 @@ public class IoTDBJDBCDataSet {
         this.columnTypeList.add(columnTypeList.get(i));
         if (!columnOrdinalMap.containsKey(name)) {
           int index = columnNameIndex.get(name);
+          if (!columnOrdinalMap.containsValue(index + START_INDEX)) {
+            columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
+          }
           columnOrdinalMap.put(name, index + START_INDEX);
-          columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
         }
       }
     } else {
diff --git 
a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java 
b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index f2ca8203e8..3da00dc36a 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -115,8 +115,9 @@ public class IoTDBRpcDataSet {
 
     // deduplicate and map
     if (columnNameIndex != null) {
-      this.columnTypeDeduplicatedList = new 
ArrayList<>(columnNameIndex.size());
-      for (int i = 0; i < columnNameIndex.size(); i++) {
+      int columnSize = (int) 
columnNameIndex.values().stream().distinct().count();
+      this.columnTypeDeduplicatedList = new ArrayList<>(columnSize);
+      for (int i = 0; i < columnSize; i++) {
         columnTypeDeduplicatedList.add(null);
       }
       for (int i = 0; i < columnNameList.size(); i++) {
@@ -125,8 +126,10 @@ public class IoTDBRpcDataSet {
         this.columnTypeList.add(columnTypeList.get(i));
         if (!columnOrdinalMap.containsKey(name)) {
           int index = columnNameIndex.get(name);
+          if (!columnOrdinalMap.containsValue(index + START_INDEX)) {
+            columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
+          }
           columnOrdinalMap.put(name, index + START_INDEX);
-          columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
         }
       }
     } else {

Reply via email to