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 a4f22dfdd5d fix relational plan test
a4f22dfdd5d is described below

commit a4f22dfdd5d85394027c63571beb2a4bf55f7e53
Author: Beyyes <[email protected]>
AuthorDate: Mon Apr 8 14:29:17 2024 +0800

    fix relational plan test
---
 .../plan/relational/planner/LogicalPlanner.java    | 29 ++++++++--------
 .../plan/relational/planner/QueryPlanner.java      |  8 ++---
 .../plan/relational/planner/RelationPlan.java      |  7 ++--
 .../plan/relational/planner/RelationPlanner.java   |  4 +--
 .../relational/planner/RelationalModelPlanner.java | 24 +++++++++----
 .../distribute/RelationalDistributionPlanner.java  | 32 +++++++++++++++++
 .../plan/relational/analyzer/AnalyzerTest.java     | 40 +++++++---------------
 .../plan/relational/analyzer/TestMatadata.java     | 34 +++++++++++++++---
 8 files changed, 117 insertions(+), 61 deletions(-)

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 517f627106f..1df569c2967 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
@@ -17,6 +17,7 @@ import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Field;
@@ -35,16 +36,8 @@ import static java.util.Objects.requireNonNull;
 
 public class LogicalPlanner {
   private static final Logger LOG = Logger.get(LogicalPlanner.class);
-
-  public enum Stage {
-    CREATED,
-    OPTIMIZED,
-    OPTIMIZED_AND_VALIDATED
-  }
-
   private final MPPQueryContext context;
-
-  private final SessionInfo session;
+  private final SessionInfo sessionInfo;
   private final SymbolAllocator symbolAllocator = new SymbolAllocator();
   private final Metadata metadata;
   private final WarningCollector warningCollector;
@@ -52,19 +45,19 @@ public class LogicalPlanner {
   public LogicalPlanner(
       MPPQueryContext context,
       Metadata metadata,
-      SessionInfo session,
+      SessionInfo sessionInfo,
       WarningCollector warningCollector) {
     this.context = context;
     this.metadata = metadata;
-    this.session = requireNonNull(session, "session is null");
+    this.sessionInfo = requireNonNull(sessionInfo, "session is null");
     this.warningCollector = requireNonNull(warningCollector, "warningCollector 
is null");
   }
 
-  public PlanNode plan(Analysis analysis) throws IoTDBException {
-    return planStatement(analysis, analysis.getStatement());
+  public LogicalQueryPlan plan(Analysis analysis) throws IoTDBException {
+    return new LogicalQueryPlan(context, planStatement(analysis, 
analysis.getStatement()));
   }
 
-  public PlanNode planStatement(Analysis analysis, Statement statement) throws 
IoTDBException {
+  private PlanNode planStatement(Analysis analysis, Statement statement) 
throws IoTDBException {
     return createOutputPlan(planStatementWithoutOutput(analysis, statement), 
analysis);
   }
 
@@ -109,6 +102,12 @@ public class LogicalPlanner {
 
   private RelationPlanner getRelationPlanner(Analysis analysis) {
     return new RelationPlanner(
-        analysis, symbolAllocator, context.getQueryId(), session, 
ImmutableMap.of());
+        analysis, symbolAllocator, context.getQueryId(), sessionInfo, 
ImmutableMap.of());
+  }
+
+  private enum Stage {
+    CREATED,
+    OPTIMIZED,
+    OPTIMIZED_AND_VALIDATED
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
index 8a94321d735..eb23a4a2cbf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/QueryPlanner.java
@@ -202,9 +202,9 @@ class QueryPlanner {
   private static List<Symbol> computeOutputs(
       PlanBuilder builder, List<Expression> outputExpressions) {
     ImmutableList.Builder<Symbol> outputSymbols = ImmutableList.builder();
-    //        for (Expression expression : outputExpressions) {
-    //            // outputSymbols.add(builder.translate(expression));
-    //        }
+    for (Expression expression : outputExpressions) {
+      outputSymbols.add(new Symbol(expression.toString()));
+    }
     return outputSymbols.build();
   }
 
@@ -259,7 +259,7 @@ class QueryPlanner {
     ImmutableList.Builder<Symbol> orderBySymbols = ImmutableList.builder();
     Map<Symbol, SortOrder> orderings = new HashMap<>();
     for (Expression fieldOrExpression : orderByExpressions) {
-      Symbol symbol = null;
+      Symbol symbol = new Symbol(fieldOrExpression.toString());
       // subPlan.translate(fieldOrExpression);
 
       SortItem sortItem = sortItems.next();
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 de035fd48fd..5ece186d194 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
@@ -30,9 +30,12 @@ import static java.util.Objects.requireNonNull;
  * the outputs of the plan.
  */
 class RelationPlan {
+
   private final PlanNode root;
-  private final List<Symbol>
-      fieldMappings; // for each field in the relation, the corresponding 
symbol from "root"
+
+  // for each field in the relation, the corresponding symbol from "root"
+  private final List<Symbol> fieldMappings;
+
   private final Scope scope;
 
   public RelationPlan(PlanNode root, Scope scope, List<Symbol> fieldMappings) {
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 ec08bd7f4d3..b916c753b2e 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
@@ -117,8 +117,8 @@ class RelationPlanner extends AstVisitor<RelationPlan, 
Void> {
       plan = new RelationPlan(root, scope, outputSymbols);
     }
 
-    plan = addRowFilters(node, plan);
-    // TODO what's the meaning of addColumnMasks?
+    // TODO what's the meaning of RowFilters addColumnMasks?
+    // plan = addRowFilters(node, plan);
     // plan = addColumnMasks(node, plan);
 
     return plan;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
index e3b19c5d59c..713be1450bd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/RelationalModelPlanner.java
@@ -36,7 +36,9 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analyzer;
 import 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.StatementAnalyzerFactory;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.distribute.RelationalDistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
+import org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler;
 import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
 import org.apache.iotdb.db.relational.sql.parser.SqlParser;
 import org.apache.iotdb.db.relational.sql.tree.Statement;
@@ -105,19 +107,17 @@ public class RelationalModelPlanner implements IPlanner {
 
   @Override
   public LogicalQueryPlan doLogicalPlan(IAnalysis analysis, MPPQueryContext 
context) {
-    // TODO need implemented by Beyyes
     try {
-      new LogicalPlanner(context, metadata, null, 
warningCollector).plan((Analysis) analysis);
+      return new LogicalPlanner(context, metadata, null, warningCollector)
+          .plan((Analysis) analysis);
     } catch (IoTDBException e) {
       throw new RuntimeException(e);
     }
-    return null;
   }
 
   @Override
   public DistributedQueryPlan doDistributionPlan(IAnalysis analysis, 
LogicalQueryPlan logicalPlan) {
-    // TODO
-    return null;
+    return new RelationalDistributionPlanner((Analysis) analysis, 
logicalPlan).planFragments();
   }
 
   @Override
@@ -126,7 +126,19 @@ public class RelationalModelPlanner implements IPlanner {
       DistributedQueryPlan distributedPlan,
       MPPQueryContext context,
       QueryStateMachine stateMachine) {
-    return null;
+    IScheduler scheduler =
+        new ClusterScheduler(
+            context,
+            stateMachine,
+            distributedPlan.getInstances(),
+            context.getQueryType(),
+            executor,
+            writeOperationExecutor,
+            scheduledExecutor,
+            syncInternalServiceClientManager,
+            asyncInternalServiceClientManager);
+    scheduler.start();
+    return scheduler;
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
new file mode 100644
index 00000000000..0c85ad78cde
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/RelationalDistributionPlanner.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.iotdb.db.queryengine.plan.relational.planner.distribute;
+
+import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
+import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
+
+public class RelationalDistributionPlanner {
+  private final Analysis analysis;
+  private final LogicalQueryPlan logicalQueryPlan;
+
+  public RelationalDistributionPlanner(Analysis analysis, LogicalQueryPlan 
logicalQueryPlan) {
+    this.analysis = analysis;
+    this.logicalQueryPlan = logicalQueryPlan;
+  }
+
+  public DistributedQueryPlan planFragments() {
+    return null;
+  }
+}
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index d2018ff4256..e1b5f3af7d5 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -19,9 +19,12 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
+import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
+import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
+import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.relational.function.BoundSignature;
 import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionId;
 import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionKind;
@@ -34,6 +37,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.QualifiedObjectN
 import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.ResolvedFunction;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableHandle;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.LogicalPlanner;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
 import org.apache.iotdb.db.relational.sql.parser.SqlParser;
 import org.apache.iotdb.db.relational.sql.tree.Statement;
@@ -122,42 +126,24 @@ public class AnalyzerTest {
   }
 
   @Test
-  public void testSingleTableQuery() throws OperatorNotFoundException {
+  public void testSingleTableQuery() throws IoTDBException {
     String sql =
-        "SELECT tag1 as tt, tag2, attribute1 as attr1, s1+1, s2 FROM table1 "
-            + "WHERE time>1 AND tag1=\"A\" and tag3=\"B\" AND s1=1 OR s3=3 
ORDER BY time DESC OFFSET 10 LIMIT 5";
+        "SELECT tag1 as tt, tag2, attr1, s1+1 FROM table1 "
+            + "WHERE time>1 AND tag1='A' OR s2>3 ORDER BY time DESC OFFSET 10 
LIMIT 5";
     Metadata metadata = new TestMatadata();
 
-    //    ResolvedFunction lLessThanI =
-    //        new ResolvedFunction(
-    //            new BoundSignature("l<i", BOOLEAN, Arrays.asList(INT64, 
INT32)),
-    //            new FunctionId("l<i"),
-    //            FunctionKind.SCALAR,
-    //            true);
-    //
-    //    ResolvedFunction iAddi =
-    //        new ResolvedFunction(
-    //            new BoundSignature("l+i", INT64, Arrays.asList(INT32, 
INT32)),
-    //            new FunctionId("l+i"),
-    //            FunctionKind.SCALAR,
-    //            true);
-    //
-    //    Mockito.when(
-    //            metadata.resolveOperator(eq(OperatorType.LESS_THAN), 
eq(Arrays.asList(INT64,
-    // INT32))))
-    //        .thenReturn(lLessThanI);
-    //    Mockito.when(metadata.resolveOperator(eq(OperatorType.ADD), 
eq(Arrays.asList(INT32,
-    // INT32))))
-    //        .thenReturn(iAddi);
-
     Analysis actualAnalysis = analyzeSQL(sql, metadata);
     assertNotNull(actualAnalysis);
     System.out.println(actualAnalysis.getTypes());
 
     QueryId queryId = new QueryId("tmp_query");
     MPPQueryContext context = new MPPQueryContext(queryId);
-    // LogicalPlanner logicalPlanner = new LogicalPlanner(context, metadata);
-
+    SessionInfo sessionInfo = new SessionInfo(1L, "iotdb", 
ZoneId.systemDefault());
+    WarningCollector warningCollector = WarningCollector.NOOP;
+    LogicalPlanner logicalPlanner =
+        new LogicalPlanner(context, metadata, sessionInfo, warningCollector);
+    LogicalQueryPlan result = logicalPlanner.plan(actualAnalysis);
+    System.out.println(result);
   }
 
   private Analysis analyzeSQL(String sql, Metadata metadata) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
index 62ac6cae73c..1c37929bee0 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMatadata.java
@@ -1,6 +1,9 @@
 package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
+import org.apache.iotdb.db.queryengine.plan.relational.function.BoundSignature;
+import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionId;
+import org.apache.iotdb.db.queryengine.plan.relational.function.FunctionKind;
 import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnHandle;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnMetadata;
@@ -13,7 +16,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.metadata.TableHandle;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadata;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
 import org.apache.iotdb.tsfile.read.common.type.BinaryType;
-import org.apache.iotdb.tsfile.read.common.type.DoubleType;
+import org.apache.iotdb.tsfile.read.common.type.BooleanType;
 import org.apache.iotdb.tsfile.read.common.type.Type;
 
 import org.mockito.Mockito;
@@ -45,8 +48,8 @@ public class TestMatadata implements Metadata {
   private static final ColumnMetadata TAG3_CM = new ColumnMetadata(TAG3, 
BinaryType.TEXT);
   private static final ColumnMetadata ATTR1_CM = new ColumnMetadata(ATTR1, 
BinaryType.TEXT);
   private static final ColumnMetadata ATTR2_CM = new ColumnMetadata(ATTR2, 
BinaryType.TEXT);
-  private static final ColumnMetadata S1_CM = new ColumnMetadata(S1, INT32);
-  private static final ColumnMetadata S2_CM = new ColumnMetadata(S2, 
DoubleType.DOUBLE);
+  private static final ColumnMetadata S1_CM = new ColumnMetadata(S1, INT64);
+  private static final ColumnMetadata S2_CM = new ColumnMetadata(S2, INT64);
 
   public static final String DB2 = "db2";
   public static final String TABLE2 = "table2";
@@ -82,7 +85,7 @@ public class TestMatadata implements Metadata {
 
   @Override
   public Optional<TableHandle> getTableHandle(SessionInfo session, 
QualifiedObjectName name) {
-    return Optional.empty();
+    return Optional.of(Mockito.mock(TableHandle.class));
   }
 
   @Override
@@ -104,6 +107,27 @@ public class TestMatadata implements Metadata {
   public ResolvedFunction resolveOperator(
       OperatorType operatorType, List<? extends Type> argumentTypes)
       throws OperatorNotFoundException {
-    return null;
+    if (operatorType == OperatorType.LESS_THAN) {
+      return new ResolvedFunction(
+          new BoundSignature("less_than", BooleanType.BOOLEAN, 
Arrays.asList(INT64, INT32)),
+          new FunctionId("less_than"),
+          FunctionKind.SCALAR,
+          true);
+    } else if (operatorType == OperatorType.ADD) {
+      return new ResolvedFunction(
+          new BoundSignature("add", INT64, Arrays.asList(INT64, INT32)),
+          new FunctionId("add"),
+          FunctionKind.SCALAR,
+          true);
+    } else if (operatorType == OperatorType.EQUAL) {
+      return new ResolvedFunction(
+          new BoundSignature(
+              "equals", BooleanType.BOOLEAN, Arrays.asList(BinaryType.TEXT, 
BinaryType.TEXT)),
+          new FunctionId("equals"),
+          FunctionKind.SCALAR,
+          true);
+    } else {
+      throw new OperatorNotFoundException(operatorType, argumentTypes, new 
RuntimeException());
+    }
   }
 }

Reply via email to