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 {