This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch beyyes/TableModelGrammar0617 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 085a217aa5fa66785616b49a0945ff24f8a5d117 Author: Beyyes <[email protected]> AuthorDate: Mon Jun 17 12:10:13 2024 +0800 add getPartitionFetcher method for Metadata --- .../TableModelStatementMemorySourceVisitor.java | 2 - .../plan/relational/metadata/Metadata.java | 3 + .../relational/metadata/TableMetadataImpl.java | 7 ++ .../plan/relational/planner/LogicalPlanner.java | 8 +- .../relational/planner/RelationalModelPlanner.java | 8 +- .../planner/optimizations/FilterScanCombine.java | 2 - .../planner/optimizations/IndexScan.java | 13 +- .../planner/optimizations/PruneUnUsedColumns.java | 2 - .../optimizations/RelationalPlanOptimizer.java | 2 - .../RemoveRedundantIdentityProjections.java | 2 - .../planner/optimizations/SimplifyExpressions.java | 2 - .../plan/relational/analyzer/AnalyzerTest.java | 135 +++------------------ .../plan/relational/analyzer/TestMatadata.java | 72 +++++++++++ 13 files changed, 105 insertions(+), 153 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java index fbe6fe2723e..3ba38ba811e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/memory/TableModelStatementMemorySourceVisitor.java @@ -23,7 +23,6 @@ import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.db.queryengine.common.header.ColumnHeader; import org.apache.iotdb.db.queryengine.common.header.DatasetHeader; import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector; -import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanner; import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanGraphPrinter; @@ -67,7 +66,6 @@ public class TableModelStatementMemorySourceVisitor context.getQueryContext(), LocalExecutionPlanner.getInstance().metadata, context.getQueryContext().getSession(), - ClusterPartitionFetcher.getInstance(), WarningCollector.NOOP) .plan(context.getAnalysis()); if (context.getAnalysis().getDataPartition() == null diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java index dc66581b74c..afe51d54cb5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/Metadata.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.metadata; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; +import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType; import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression; @@ -56,6 +57,8 @@ public interface Metadata { boolean canCoerce(Type from, Type to); + IPartitionFetcher getPartitionFetcher(); + /** * get all device ids and corresponding attributes from schema region * 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 f3ff0b59834..e9f6bb061c0 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 @@ -24,6 +24,8 @@ import org.apache.iotdb.commons.udf.builtin.BuiltinScalarFunction; import org.apache.iotdb.db.exception.sql.SemanticException; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; +import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher; +import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType; import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression; @@ -262,6 +264,11 @@ public class TableMetadataImpl implements Metadata { return true; } + @Override + public IPartitionFetcher getPartitionFetcher() { + return ClusterPartitionFetcher.getInstance(); + } + @Override public List<DeviceEntry> indexScan( QualifiedObjectName tableName, 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 a7537c4e680..3d0361a68ff 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 @@ -19,7 +19,6 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo; import org.apache.iotdb.db.queryengine.common.header.ColumnHeader; import org.apache.iotdb.db.queryengine.common.header.DatasetHeader; import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; 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; @@ -60,19 +59,16 @@ public class LogicalPlanner { private final SymbolAllocator symbolAllocator = new SymbolAllocator(); private final List<RelationalPlanOptimizer> relationalPlanOptimizers; private final Metadata metadata; - private final IPartitionFetcher partitionFetcher; private final WarningCollector warningCollector; public LogicalPlanner( MPPQueryContext context, Metadata metadata, SessionInfo sessionInfo, - IPartitionFetcher partitionFetcher, WarningCollector warningCollector) { this.context = context; this.metadata = metadata; this.sessionInfo = requireNonNull(sessionInfo, "session is null"); - this.partitionFetcher = requireNonNull(partitionFetcher, "partitionFetcher is null"); this.warningCollector = requireNonNull(warningCollector, "warningCollector is null"); this.relationalPlanOptimizers = @@ -88,9 +84,7 @@ public class LogicalPlanner { PlanNode planNode = planStatement(analysis, analysis.getStatement()); relationalPlanOptimizers.forEach( - optimizer -> - optimizer.optimize( - planNode, analysis, metadata, partitionFetcher, sessionInfo, context)); + optimizer -> optimizer.optimize(planNode, analysis, metadata, sessionInfo, context)); return new LogicalQueryPlan(context, planNode); } 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 60189c42f63..106abe0fd41 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 @@ -27,7 +27,6 @@ import org.apache.iotdb.commons.client.sync.SyncDataNodeInternalServiceClient; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.execution.QueryStateMachine; import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector; -import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis; import org.apache.iotdb.db.queryengine.plan.planner.IPlanner; import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan; @@ -107,12 +106,7 @@ public class RelationalModelPlanner implements IPlanner { @Override public LogicalQueryPlan doLogicalPlan(IAnalysis analysis, MPPQueryContext context) { - return new LogicalPlanner( - context, - metadata, - context.getSession(), - ClusterPartitionFetcher.getInstance(), - warningCollector) + return new LogicalPlanner(context, metadata, context.getSession(), warningCollector) .plan((Analysis) analysis); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/FilterScanCombine.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/FilterScanCombine.java index 893f3b96617..3015f88ce60 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/FilterScanCombine.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/FilterScanCombine.java @@ -16,7 +16,6 @@ package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.MultiChildProcessNode; @@ -58,7 +57,6 @@ public class FilterScanCombine implements RelationalPlanOptimizer { PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext queryContext) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java index 1aa4c5413d6..10c8db35ba9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/IndexScan.java @@ -60,13 +60,11 @@ public class IndexScan implements RelationalPlanOptimizer { PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext queryContext) { return planNode.accept( - new Rewriter(), - new RewriterContext(null, metadata, sessionInfo, analysis, partitionFetcher, queryContext)); + new Rewriter(), new RewriterContext(null, metadata, sessionInfo, analysis, queryContext)); } private static class Rewriter extends PlanVisitor<PlanNode, RewriterContext> { @@ -124,7 +122,7 @@ public class IndexScan implements RelationalPlanOptimizer { deviceEntries, treeModelDatabase, context.getQueryContext().getGlobalTimeFilter(), - context.getPartitionFetcher()); + context.getMetadata().getPartitionFetcher()); context.getAnalysis().setDataPartition(dataPartition); if (dataPartition.getDataPartitionMap().size() > 1) { @@ -192,7 +190,6 @@ public class IndexScan implements RelationalPlanOptimizer { private Metadata metadata; private final SessionInfo sessionInfo; private final Analysis analysis; - private final IPartitionFetcher partitionFetcher; private final MPPQueryContext queryContext; private FilterNode filterNode; @@ -201,13 +198,11 @@ public class IndexScan implements RelationalPlanOptimizer { Metadata metadata, SessionInfo sessionInfo, Analysis analysis, - IPartitionFetcher partitionFetcher, MPPQueryContext queryContext) { this.predicate = predicate; this.metadata = metadata; this.sessionInfo = sessionInfo; this.analysis = analysis; - this.partitionFetcher = partitionFetcher; this.queryContext = queryContext; } @@ -235,10 +230,6 @@ public class IndexScan implements RelationalPlanOptimizer { return this.analysis; } - public IPartitionFetcher getPartitionFetcher() { - return partitionFetcher; - } - public MPPQueryContext getQueryContext() { return queryContext; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PruneUnUsedColumns.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PruneUnUsedColumns.java index db9fb4eaa86..065a2b45936 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PruneUnUsedColumns.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PruneUnUsedColumns.java @@ -17,7 +17,6 @@ package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations; import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis; @@ -57,7 +56,6 @@ public class PruneUnUsedColumns implements RelationalPlanOptimizer { PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext context) { return planNode.accept(new Rewriter(), new RewriterContext()); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RelationalPlanOptimizer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RelationalPlanOptimizer.java index 0e96f27be60..37611e6a35c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RelationalPlanOptimizer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RelationalPlanOptimizer.java @@ -16,7 +16,6 @@ package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; 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.metadata.Metadata; @@ -26,7 +25,6 @@ public interface RelationalPlanOptimizer { PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext context); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RemoveRedundantIdentityProjections.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RemoveRedundantIdentityProjections.java index 474a327292f..a83246393f0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RemoveRedundantIdentityProjections.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/RemoveRedundantIdentityProjections.java @@ -16,7 +16,6 @@ package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChildProcessNode; @@ -35,7 +34,6 @@ public class RemoveRedundantIdentityProjections implements RelationalPlanOptimiz PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext context) { return planNode.accept(new Rewriter(), new RewriterContext()); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java index afff2eb2e35..7d308c2cf10 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java @@ -16,7 +16,6 @@ package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; -import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis; @@ -35,7 +34,6 @@ public class SimplifyExpressions implements RelationalPlanOptimizer { PlanNode planNode, Analysis analysis, Metadata metadata, - IPartitionFetcher partitionFetcher, SessionInfo sessionInfo, MPPQueryContext context) { // TODO add query statement pruning 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 f59af819f8f..1f260c5e117 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 @@ -21,17 +21,11 @@ package org.apache.iotdb.db.queryengine.plan.relational.analyzer; import org.apache.iotdb.commons.conf.IoTDBConstant; import org.apache.iotdb.commons.exception.IoTDBException; -import org.apache.iotdb.commons.partition.DataPartition; -import org.apache.iotdb.commons.partition.DataPartitionQueryParam; -import org.apache.iotdb.commons.partition.SchemaNodeManagementPartition; -import org.apache.iotdb.commons.partition.SchemaPartition; -import org.apache.iotdb.commons.path.PathPatternTree; import org.apache.iotdb.db.protocol.session.IClientSession; 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.analyze.IPartitionFetcher; 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.planner.plan.node.PlanNode; @@ -53,7 +47,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LogicalExpression; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser; -import org.apache.iotdb.mpp.rpc.thrift.TRegionRouteReq; import org.junit.Test; import org.mockito.Mockito; @@ -177,9 +170,7 @@ public class AnalyzerTest { assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -208,9 +199,7 @@ public class AnalyzerTest { assertNotNull(actualAnalysis); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -234,9 +223,7 @@ public class AnalyzerTest { assertNotNull(actualAnalysis); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -251,9 +238,7 @@ public class AnalyzerTest { actualAnalysis = analyzeSQL(sql, metadata); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -271,9 +256,7 @@ public class AnalyzerTest { actualAnalysis = analyzeSQL(sql, metadata); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -296,9 +279,7 @@ public class AnalyzerTest { assertNotNull(actualAnalysis); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); tableScanNode = (TableScanNode) rootNode.getChildren().get(0).getChildren().get(0); @@ -311,9 +292,7 @@ public class AnalyzerTest { assertNotNull(actualAnalysis); assertEquals(1, actualAnalysis.getTables().size()); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); tableScanNode = (TableScanNode) rootNode.getChildren().get(0).getChildren().get(0); @@ -327,8 +306,7 @@ public class AnalyzerTest { actualAnalysis = analyzeSQL(sql, metadata); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode.getChildren().get(0).getChildren().get(0) instanceof FilterNode); @@ -343,8 +321,7 @@ public class AnalyzerTest { actualAnalysis = analyzeSQL(sql, metadata); context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); tableScanNode = (TableScanNode) rootNode.getChildren().get(0).getChildren().get(0); @@ -360,8 +337,7 @@ public class AnalyzerTest { context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -370,8 +346,7 @@ public class AnalyzerTest { context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -381,8 +356,7 @@ public class AnalyzerTest { context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -391,8 +365,7 @@ public class AnalyzerTest { context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); } @@ -403,9 +376,7 @@ public class AnalyzerTest { sql = "SELECT CAST(s2 AS DOUBLE) FROM table1 WHERE CAST(s1 AS DOUBLE) > 1.0"; context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -414,9 +385,7 @@ public class AnalyzerTest { "SELECT SUBSTRING(tag1, 2), SUBSTRING(tag2, s1) FROM table1 WHERE SUBSTRING(tag2, 1) = 'A'"; context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -424,9 +393,7 @@ public class AnalyzerTest { sql = "SELECT ROUND(s1, 1) FROM table1 WHERE ROUND(s2, 2) > 1.0"; context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -434,9 +401,7 @@ public class AnalyzerTest { sql = "SELECT REPLACE(tag1, 'A', 'B') FROM table1 WHERE REPLACE(attr1, 'C', 'D') = 'D'"; context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); @@ -444,9 +409,7 @@ public class AnalyzerTest { sql = "SELECT DIFF(s1) FROM table1 WHERE DIFF(s2) > 0"; context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); - logicalPlanner = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP); + logicalPlanner = new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP); logicalQueryPlan = logicalPlanner.plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); } @@ -460,8 +423,7 @@ public class AnalyzerTest { context = new MPPQueryContext(sql, queryId, sessionInfo, null, null); actualAnalysis = analyzeSQL(sql, metadata); logicalQueryPlan = - new LogicalPlanner( - context, metadata, sessionInfo, getFakePartitionFetcher(), WarningCollector.NOOP) + new LogicalPlanner(context, metadata, sessionInfo, WarningCollector.NOOP) .plan(actualAnalysis); rootNode = logicalQueryPlan.getRootNode(); assertTrue(rootNode instanceof OutputNode); @@ -507,64 +469,5 @@ public class AnalyzerTest { return null; } - private static final DataPartition DATA_PARTITION = MockTablePartition.constructDataPartition(); - private static final SchemaPartition SCHEMA_PARTITION = - MockTablePartition.constructSchemaPartition(); - - private static IPartitionFetcher getFakePartitionFetcher() { - - return new IPartitionFetcher() { - - @Override - public SchemaPartition getSchemaPartition(PathPatternTree patternTree) { - return SCHEMA_PARTITION; - } - - @Override - public SchemaPartition getOrCreateSchemaPartition( - PathPatternTree patternTree, String userName) { - return SCHEMA_PARTITION; - } - - @Override - public DataPartition getDataPartition( - Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { - return DATA_PARTITION; - } - - @Override - public DataPartition getDataPartitionWithUnclosedTimeRange( - Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { - return DATA_PARTITION; - } - - @Override - public DataPartition getOrCreateDataPartition( - Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { - return DATA_PARTITION; - } - - @Override - public DataPartition getOrCreateDataPartition( - List<DataPartitionQueryParam> dataPartitionQueryParams, String userName) { - return DATA_PARTITION; - } - - @Override - public SchemaNodeManagementPartition getSchemaNodeManagementPartitionWithLevel( - PathPatternTree patternTree, PathPatternTree scope, Integer level) { - return null; - } - - @Override - public boolean updateRegionCache(TRegionRouteReq req) { - return false; - } - - @Override - public void invalidAllCache() {} - }; - } - private static class NopAccessControl implements AccessControl {} } 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 585898e2b08..bf481e52257 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 @@ -14,10 +14,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.analyzer; +import org.apache.iotdb.commons.partition.DataPartition; +import org.apache.iotdb.commons.partition.DataPartitionQueryParam; +import org.apache.iotdb.commons.partition.SchemaNodeManagementPartition; +import org.apache.iotdb.commons.partition.SchemaPartition; +import org.apache.iotdb.commons.path.PathPatternTree; import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory; import org.apache.iotdb.commons.udf.builtin.BuiltinAggregationFunction; import org.apache.iotdb.db.queryengine.common.MPPQueryContext; import org.apache.iotdb.db.queryengine.common.SessionInfo; +import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher; import org.apache.iotdb.db.queryengine.plan.relational.function.OperatorType; import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnMetadata; import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema; @@ -33,6 +39,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager; import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager; import org.apache.iotdb.db.queryengine.plan.relational.type.TypeNotFoundException; import org.apache.iotdb.db.queryengine.plan.relational.type.TypeSignature; +import org.apache.iotdb.mpp.rpc.thrift.TRegionRouteReq; import org.apache.tsfile.file.metadata.StringArrayDeviceID; import org.apache.tsfile.read.common.type.BinaryType; @@ -41,6 +48,7 @@ import org.apache.tsfile.read.common.type.Type; import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Optional; import static org.apache.iotdb.db.queryengine.plan.relational.metadata.TableMetadataImpl.getFunctionType; @@ -175,6 +183,11 @@ public class TestMatadata implements Metadata { return true; } + @Override + public IPartitionFetcher getPartitionFetcher() { + return getFakePartitionFetcher(); + } + @Override public List<DeviceEntry> indexScan( QualifiedObjectName tableName, @@ -233,4 +246,63 @@ public class TestMatadata implements Metadata { // Boolean type and Binary Type can not be compared with other types return isNumericType(left) && isNumericType(right); } + + private static final DataPartition DATA_PARTITION = MockTablePartition.constructDataPartition(); + private static final SchemaPartition SCHEMA_PARTITION = + MockTablePartition.constructSchemaPartition(); + + private static IPartitionFetcher getFakePartitionFetcher() { + + return new IPartitionFetcher() { + + @Override + public SchemaPartition getSchemaPartition(PathPatternTree patternTree) { + return SCHEMA_PARTITION; + } + + @Override + public SchemaPartition getOrCreateSchemaPartition( + PathPatternTree patternTree, String userName) { + return SCHEMA_PARTITION; + } + + @Override + public DataPartition getDataPartition( + Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { + return DATA_PARTITION; + } + + @Override + public DataPartition getDataPartitionWithUnclosedTimeRange( + Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { + return DATA_PARTITION; + } + + @Override + public DataPartition getOrCreateDataPartition( + Map<String, List<DataPartitionQueryParam>> sgNameToQueryParamsMap) { + return DATA_PARTITION; + } + + @Override + public DataPartition getOrCreateDataPartition( + List<DataPartitionQueryParam> dataPartitionQueryParams, String userName) { + return DATA_PARTITION; + } + + @Override + public SchemaNodeManagementPartition getSchemaNodeManagementPartitionWithLevel( + PathPatternTree patternTree, PathPatternTree scope, Integer level) { + return null; + } + + @Override + public boolean updateRegionCache(TRegionRouteReq req) { + return false; + } + + @Override + public void invalidAllCache() {} + }; + } }
