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

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


The following commit(s) were added to refs/heads/ty/NormalizeTimeColumn by this 
push:
     new ee0d093a009 Make Time Column as a normal value column in table model
ee0d093a009 is described below

commit ee0d093a00994dccffe86d4fc72d2302d9b3ebda
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Jul 17 19:10:39 2024 +0800

    Make Time Column as a normal value column in table model
---
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 32 +++++++++------------
 .../queryengine/common/header/DatasetHeader.java   |  6 ----
 .../distribute/TableDistributionPlanner.java       | 33 +++++-----------------
 3 files changed, 21 insertions(+), 50 deletions(-)

diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index dea1239786e..66e6cc2ddd8 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -56,10 +56,8 @@ public class IoTDBRpcDataSet {
   public List<String> columnTypeList; // no deduplication
   private final Map<String, Integer>
       columnOrdinalMap; // used because the server returns deduplicated columns
-  // record original time column index, like select s1, time, s2 from table, 
timeOriginColumnIndex
-  // will be 2
-  private int timeOriginColumnIndex = 1;
-  private List<TSDataType> columnTypeDeduplicatedList; // deduplicated from 
columnTypeList
+  private final Map<String, Integer> columnName2TsBlockColumnIndexMap;
+  private final List<TSDataType> columnTypeDeduplicatedList; // deduplicated 
from columnTypeList
   public int fetchSize;
   public final long timeout;
   public boolean hasCachedRecord = false;
@@ -128,7 +126,9 @@ public class IoTDBRpcDataSet {
     }
     // deduplicate and map
     this.columnOrdinalMap = new HashMap<>();
+    this.columnName2TsBlockColumnIndexMap = new HashMap<>();
     if (!ignoreTimeStamp) {
+      this.columnName2TsBlockColumnIndexMap.put(TIMESTAMP_STR, 1);
       this.columnOrdinalMap.put(TIMESTAMP_STR, 1);
     }
 
@@ -143,17 +143,13 @@ public class IoTDBRpcDataSet {
         String name = columnNameList.get(i);
         this.columnNameList.add(name);
         this.columnTypeList.add(columnTypeList.get(i));
-        if (!columnOrdinalMap.containsKey(name)) {
+        if (!columnName2TsBlockColumnIndexMap.containsKey(name)) {
           int index = columnNameIndex.get(name);
-          if (index >= 0) {
-            if (columnTypeDeduplicatedList.get(index) == null) {
-              columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
-            }
-          } else {
-            // -1 for Time Column
-            timeOriginColumnIndex = i + 1;
+          if (columnTypeDeduplicatedList.get(index) == null) {
+            columnTypeDeduplicatedList.set(index, 
TSDataType.valueOf(columnTypeList.get(i)));
           }
-          columnOrdinalMap.put(name, index + startIndex);
+          columnOrdinalMap.put(name, i + startIndex);
+          columnName2TsBlockColumnIndexMap.put(name, index);
         }
       }
     } else {
@@ -166,6 +162,7 @@ public class IoTDBRpcDataSet {
         this.columnTypeList.add(columnType);
         columnOrdinalMap.computeIfAbsent(
             name, v -> addColumnTypeListReturnIndex(index, 
TSDataType.valueOf(columnType)));
+        columnName2TsBlockColumnIndexMap.put(name, i);
       }
     }
 
@@ -452,8 +449,7 @@ public class IoTDBRpcDataSet {
   }
 
   public int findColumn(String columnName) {
-    int columnIndex = columnOrdinalMap.get(columnName);
-    return columnIndex == -1 ? timeOriginColumnIndex : columnIndex;
+    return columnOrdinalMap.get(columnName);
   }
 
   public String getValueByName(String columnName) throws 
StatementExecutionException {
@@ -563,13 +559,13 @@ public class IoTDBRpcDataSet {
     return columnNameList.get(columnIndex - 1);
   }
 
-  // return -1 for time column
+  // return -1 for time column of tree model
   private int getTsBlockColumnIndex(String columnName) {
-    Integer index = columnOrdinalMap.get(columnName);
+    Integer index = columnName2TsBlockColumnIndexMap.get(columnName);
     if (index == null) {
       throw new IllegalArgumentException("Unknown column name :" + columnName);
     }
-    return index - startIndex;
+    return index;
   }
 
   public void checkRecord() throws StatementExecutionException {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
index 43f0167eec2..312645b1c03 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java
@@ -30,8 +30,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
-import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
-
 /** The header of query result dataset. */
 public class DatasetHeader {
 
@@ -160,8 +158,4 @@ public class DatasetHeader {
   public int hashCode() {
     return Objects.hash(columnHeaders, isIgnoreTimestamp);
   }
-
-  public void addTimeColumn() {
-    columnToTsBlockIndexMap.put(TIMESTAMP_EXPRESSION_STRING, -1);
-  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
index b5ee339640e..56a89b90828 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
@@ -33,15 +33,14 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Pla
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushLimitOffsetIntoTableScan;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static 
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector.NOOP;
-import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
 
 public class TableDistributionPlanner {
   private final Analysis analysis;
@@ -88,30 +87,12 @@ public class TableDistributionPlanner {
     PlanNode outputNodeWithExchange =
         new 
AddExchangeNodes(mppQueryContext).addExchangeNodes(distributedPlan, 
planContext);
     if (analysis.getStatement() instanceof Query) {
-      // select s1, time, s2 from table;
-      // List<String> columnNameList {s1, time, s2}
-      // Map<String, Integer> columnName2TsBlockColumnIndexMap {s1:0, time: 
-1, s2: 1}
-      // resultSet.getString(2);
-      //     => String columnName = columnNameList.get(2 - 1); fetch columnName
-      //     => int indexForTsBlockColumn = 
columnName2TsBlockColumnIndexMap.get(columnName);
-      //     => Column c = indexForTsBlockColumn >= 0 ?
-      // tsBlock.getValueColumn(indexForTsBlockColumn) : 
tsBlock.getTimeColumn()
-      //     => c.getString(currentRowIndex);
-      List<String> outputColumnNames =
-          new ArrayList<>(outputNodeWithExchange.getOutputSymbols().size());
-      boolean hasTimeColumn = false;
-      for (Symbol column : outputNodeWithExchange.getOutputSymbols()) {
-        String columnName = column.getName();
-        if (!TIMESTAMP_EXPRESSION_STRING.equalsIgnoreCase(columnName)) {
-          outputColumnNames.add(columnName);
-        } else {
-          hasTimeColumn = true;
-        }
-      }
-      
analysis.getRespDatasetHeader().setColumnToTsBlockIndexMap(outputColumnNames);
-      if (hasTimeColumn) {
-        analysis.getRespDatasetHeader().addTimeColumn();
-      }
+      analysis
+          .getRespDatasetHeader()
+          .setColumnToTsBlockIndexMap(
+              outputNodeWithExchange.getOutputSymbols().stream()
+                  .map(Symbol::getName)
+                  .collect(Collectors.toList()));
     }
     adjustUpStream(outputNodeWithExchange, planContext);
 

Reply via email to