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++);
}
}