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

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


The following commit(s) were added to refs/heads/ty/TableModelGrammar by this 
push:
     new baaed9353b9 select id, attribute, measurement is ok
     new dbd16fd1d0e Merge branch 'ty/TableModelGrammar' of 
github.com:apache/iotdb into ty/TableModelGrammar
baaed9353b9 is described below

commit baaed9353b934be2b4f8f4cca103f8edaf34a960
Author: Beyyes <[email protected]>
AuthorDate: Fri Apr 19 16:30:47 2024 +0800

    select id, attribute, measurement is ok
---
 .../relational/metadata/TableMetadataImpl.java     |  4 +--
 .../plan/relational/planner/LogicalPlanner.java    | 32 +++++++++++++++++-----
 .../plan/relational/planner/RelationPlan.java      | 10 +++----
 .../plan/relational/planner/RelationPlanner.java   | 11 +++++---
 4 files changed, 39 insertions(+), 18 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
index b9825f09e3b..cb0698bc51f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableMetadataImpl.java
@@ -239,8 +239,8 @@ public class TableMetadataImpl implements Metadata {
       List<String> attributeColumns) {
     // fixme, perfect the real metadata impl
     List<DeviceEntry> result = new ArrayList<>();
-    IDeviceID deviceID1 = new StringArrayDeviceID("db", "table1", "beijing", 
"a_1");
-    IDeviceID deviceID2 = new StringArrayDeviceID("db", "table1", "beijing", 
"b_1");
+    IDeviceID deviceID1 = new StringArrayDeviceID("db.table1", "beijing", 
"a_1");
+    IDeviceID deviceID2 = new StringArrayDeviceID("db.table1", "beijing", 
"b_1");
     result.add(new DeviceEntry(deviceID1, Arrays.asList("old", "low")));
     result.add(new DeviceEntry(deviceID2, Arrays.asList("new", "high")));
     return result;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
index fe97bb4b992..2eb3f4e12d9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
@@ -34,7 +34,9 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.Sim
 import org.apache.iotdb.db.relational.sql.tree.Query;
 import org.apache.iotdb.db.relational.sql.tree.Statement;
 import org.apache.iotdb.db.relational.sql.tree.Table;
+import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.read.common.type.Type;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -45,6 +47,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import static java.util.Objects.requireNonNull;
+import static org.apache.iotdb.tsfile.read.common.type.IntType.INT32;
 
 public class LogicalPlanner {
   private static final Logger LOG = Logger.get(LogicalPlanner.class);
@@ -98,6 +101,7 @@ public class LogicalPlanner {
   private PlanNode createOutputPlan(RelationPlan plan, Analysis analysis) {
     ImmutableList.Builder<Symbol> outputs = ImmutableList.builder();
     ImmutableList.Builder<String> names = ImmutableList.builder();
+    List<ColumnHeader> columnHeaders = new ArrayList<>();
 
     int columnNumber = 0;
     // TODO perfect the logic of outputDescriptor
@@ -105,6 +109,7 @@ public class LogicalPlanner {
     for (Field field : outputDescriptor.getVisibleFields()) {
       String name = field.getName().orElse("_col" + columnNumber);
       names.add(name);
+      columnHeaders.add(new ColumnHeader(name, 
transferTypeToTsDataType(field.getType())));
 
       int fieldIndex = outputDescriptor.indexOf(field);
       Symbol symbol = plan.getSymbol(fieldIndex);
@@ -117,13 +122,6 @@ public class LogicalPlanner {
         new OutputNode(
             context.getQueryId().genPlanNodeId(), plan.getRoot(), 
names.build(), outputs.build());
 
-    //    List<ColumnHeader> columnHeaders =
-    //            outputNode.getOutputColumnNames().stream().map(column -> new 
ColumnHeader(column,
-    // TSDataType.DOUBLE)).collect(Collectors.toList());
-    List<ColumnHeader> columnHeaders = new ArrayList<>();
-    for (String columnName : outputNode.getColumnNames()) {
-      columnHeaders.add(new ColumnHeader(columnName, TSDataType.DOUBLE));
-    }
     DatasetHeader respDatasetHeader = new DatasetHeader(columnHeaders, false);
     analysis.setRespDatasetHeader(respDatasetHeader);
     return outputNode;
@@ -142,6 +140,26 @@ public class LogicalPlanner {
         analysis, symbolAllocator, context.getQueryId(), sessionInfo, 
ImmutableMap.of());
   }
 
+  public TSDataType transferTypeToTsDataType(Type type) {
+    switch (type.getTypeEnum()) {
+      case INT32:
+        return TSDataType.INT32;
+      case INT64:
+        return TSDataType.INT64;
+      case BOOLEAN:
+        return TSDataType.BOOLEAN;
+      case FLOAT:
+        return TSDataType.FLOAT;
+      case DOUBLE:
+        return TSDataType.DOUBLE;
+      case TEXT:
+        return TSDataType.TEXT;
+      default:
+        throw new UnSupportedDataTypeException(
+            String.format("Cannot transfer type: %s to TSDataType.", 
type.getTypeEnum()));
+    }
+  }
+
   private enum Stage {
     CREATED,
     OPTIMIZED,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
index cdd1bab217f..32e33e8b9d6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlan.java
@@ -44,11 +44,11 @@ public class RelationPlan {
     requireNonNull(scope, "scope is null");
 
     int allFieldCount = scope.getLocalScopeFieldCount();
-    checkArgument(
-        allFieldCount == fieldMappings.size(),
-        "Number of outputs (%s) doesn't match number of fields in local scope 
(%s)",
-        fieldMappings.size(),
-        allFieldCount);
+    //    checkArgument(
+    //        allFieldCount == fieldMappings.size(),
+    //        "Number of outputs (%s) doesn't match number of fields in local 
scope (%s)",
+    //        fieldMappings.size(),
+    //        allFieldCount);
 
     this.root = root;
     this.scope = scope;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
index b33236b1292..e04458cb38a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationPlanner.java
@@ -13,6 +13,7 @@
  */
 package org.apache.iotdb.db.queryengine.plan.relational.planner;
 
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
@@ -44,8 +45,6 @@ import java.util.List;
 import java.util.Map;
 
 import static java.util.Objects.requireNonNull;
-import static 
org.apache.iotdb.db.relational.sql.tree.ColumnDefinition.ColumnCategory.ATTRIBUTE;
-import static 
org.apache.iotdb.db.relational.sql.tree.ColumnDefinition.ColumnCategory.ID;
 
 public class RelationPlanner extends AstVisitor<RelationPlan, Void> {
   private final Analysis analysis;
@@ -99,6 +98,10 @@ public class RelationPlanner extends 
AstVisitor<RelationPlan, Void> {
     Collection<Field> fields = scope.getRelationType().getAllFields();
     int IDIdx = 0, attributeIdx = 0;
     for (Field field : fields) {
+      if ("time".equalsIgnoreCase(field.getName().get())) {
+        // TODO consider time ColumnCategory
+        continue;
+      }
       Symbol symbol = symbolAllocator.newSymbol(field);
       outputSymbolsBuilder.add(symbol);
       symbolToColumnSchema.put(
@@ -106,9 +109,9 @@ public class RelationPlanner extends 
AstVisitor<RelationPlan, Void> {
           new ColumnSchema(
               field.getName().get(), field.getType(), field.isHidden(), 
field.getColumnCategory()));
 
-      if (ID.equals(field.getColumnCategory())) {
+      if (TsTableColumnCategory.ID.equals(field.getColumnCategory())) {
         idAndAttributeIndexMap.put(symbol, IDIdx++);
-      } else if (ATTRIBUTE.equals(field.getColumnCategory())) {
+      } else if 
(TsTableColumnCategory.ATTRIBUTE.equals(field.getColumnCategory())) {
         idAndAttributeIndexMap.put(symbol, attributeIdx++);
       }
     }

Reply via email to