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

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

commit f116081b3ff88fa157b073d153b54ce64bfdcc17
Author: Zhenyu Luo <[email protected]>
AuthorDate: Fri Dec 5 12:38:27 2025 +0800

    perf: Optimize TypeManager allocation in StatementAnalyzer (#16870)
    
    (cherry picked from commit 1b2b32bc2a3113a93a8855162b9759ffd547cf0a)
---
 .../apache/iotdb/db/queryengine/plan/Coordinator.java   | 17 ++++++++++-------
 .../plan/execution/config/TableConfigTaskVisitor.java   |  9 +++++++--
 .../plan/relational/analyzer/StatementAnalyzer.java     |  9 +++++----
 .../relational/analyzer/StatementAnalyzerFactory.java   | 17 ++++++++++++-----
 .../plan/relational/planner/TableModelPlanner.java      |  9 +++++++--
 .../plan/relational/analyzer/AnalyzerTest.java          |  7 +++++--
 .../queryengine/plan/relational/analyzer/AuthTest.java  | 10 +++++++---
 .../relational/analyzer/RowPatternRecognitionTest.java  |  4 +++-
 .../queryengine/plan/relational/planner/PlanTester.java |  4 +++-
 9 files changed, 59 insertions(+), 27 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 3a900b4bc12..f10600cbda9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -122,6 +122,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
 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.statement.IConfigStatement;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.utils.SetThreadName;
@@ -189,9 +190,11 @@ public class Coordinator {
   private final List<PlanOptimizer> logicalPlanOptimizers;
   private final List<PlanOptimizer> distributionPlanOptimizers;
   private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier 
dataNodeLocationSupplier;
+  private final TypeManager typeManager;
 
   private Coordinator() {
     this.queryExecutionMap = new ConcurrentHashMap<>();
+    this.typeManager = new InternalTypeManager();
     this.executor = getQueryExecutor();
     this.writeOperationExecutor = getWriteExecutor();
     this.scheduledExecutor = getScheduledExecutor();
@@ -205,13 +208,11 @@ public class Coordinator {
     this.statementRewrite = new 
StatementRewriteFactory().getStatementRewrite();
     this.logicalPlanOptimizers =
         new LogicalOptimizeFactory(
-                new PlannerContext(
-                    LocalExecutionPlanner.getInstance().metadata, new 
InternalTypeManager()))
+                new 
PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
             .getPlanOptimizers();
     this.distributionPlanOptimizers =
         new DistributedOptimizeFactory(
-                new PlannerContext(
-                    LocalExecutionPlanner.getInstance().metadata, new 
InternalTypeManager()))
+                new 
PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
             .getPlanOptimizers();
     this.dataNodeLocationSupplier = 
DataNodeLocationSupplierFactory.getSupplier();
   }
@@ -399,7 +400,8 @@ public class Coordinator {
             logicalPlanOptimizers,
             distributionPlanOptimizers,
             AuthorityChecker.getAccessControl(),
-            dataNodeLocationSupplier);
+            dataNodeLocationSupplier,
+            typeManager);
     return new QueryExecution(tableModelPlanner, queryContext, executor);
   }
 
@@ -480,7 +482,7 @@ public class Coordinator {
           executor,
           statement.accept(
               new TableConfigTaskVisitor(
-                  clientSession, metadata, 
AuthorityChecker.getAccessControl()),
+                  clientSession, metadata, 
AuthorityChecker.getAccessControl(), typeManager),
               queryContext));
     }
     if (statement instanceof WrappedInsertStatement) {
@@ -498,7 +500,8 @@ public class Coordinator {
             logicalPlanOptimizers,
             distributionPlanOptimizers,
             AuthorityChecker.getAccessControl(),
-            dataNodeLocationSupplier);
+            dataNodeLocationSupplier,
+            typeManager);
     return new QueryExecution(tableModelPlanner, queryContext, executor);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
index d427a8d2d01..3356ed2b584 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
@@ -220,6 +220,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ViewFieldDefinition;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
 import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
+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.statement.metadata.DatabaseSchemaStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveAINodeStatement;
@@ -282,13 +283,17 @@ public class TableConfigTaskVisitor extends 
AstVisitor<IConfigTask, MPPQueryCont
 
   private final AccessControl accessControl;
 
+  private final TypeManager typeManager;
+
   public TableConfigTaskVisitor(
       final IClientSession clientSession,
       final Metadata metadata,
-      final AccessControl accessControl) {
+      final AccessControl accessControl,
+      final TypeManager typeManager) {
     this.clientSession = clientSession;
     this.metadata = metadata;
     this.accessControl = accessControl;
+    this.typeManager = typeManager;
   }
 
   @Override
@@ -878,7 +883,7 @@ public class TableConfigTaskVisitor extends 
AstVisitor<IConfigTask, MPPQueryCont
     new Analyzer(
             context,
             context.getSession(),
-            new StatementAnalyzerFactory(metadata, null, accessControl),
+            new StatementAnalyzerFactory(metadata, null, accessControl, 
typeManager),
             Collections.emptyList(),
             Collections.emptyMap(),
             StatementRewrite.NOOP,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 8a3fc89c936..5acf353e32e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -192,7 +192,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.With;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WithQuery;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.type.CompatibleResolver;
-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.statement.component.FillPolicy;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
@@ -307,12 +306,12 @@ public class StatementAnalyzer {
 
   private final SessionInfo sessionContext;
 
-  private final TypeManager typeManager = new InternalTypeManager();
-
   private final Metadata metadata;
 
   private final CorrelationSupport correlationSupport;
 
+  private final TypeManager typeManager;
+
   public StatementAnalyzer(
       StatementAnalyzerFactory statementAnalyzerFactory,
       Analysis analysis,
@@ -321,7 +320,8 @@ public class StatementAnalyzer {
       WarningCollector warningCollector,
       SessionInfo sessionContext,
       Metadata metadata,
-      CorrelationSupport correlationSupport) {
+      CorrelationSupport correlationSupport,
+      TypeManager typeManager) {
     this.statementAnalyzerFactory = statementAnalyzerFactory;
     this.analysis = analysis;
     this.queryContext = queryContext;
@@ -330,6 +330,7 @@ public class StatementAnalyzer {
     this.sessionContext = sessionContext;
     this.metadata = metadata;
     this.correlationSupport = correlationSupport;
+    this.typeManager = typeManager;
   }
 
   public Scope analyze(Node node) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
index ba63eb40990..53c300f3ce3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
@@ -25,6 +25,7 @@ import 
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
 
 import static java.util.Objects.requireNonNull;
 
@@ -33,16 +34,21 @@ public class StatementAnalyzerFactory {
   private final Metadata metadata;
   private final SqlParser sqlParser;
   private final AccessControl accessControl;
+  private final TypeManager typeManager;
 
   public StatementAnalyzerFactory(
-      final Metadata metadata, final SqlParser sqlParser, final AccessControl 
accessControl) {
+      final Metadata metadata,
+      final SqlParser sqlParser,
+      final AccessControl accessControl,
+      final TypeManager typeManager) {
     this.metadata = requireNonNull(metadata, "plannerContext is null");
     this.sqlParser = sqlParser;
     this.accessControl = requireNonNull(accessControl, "accessControl is 
null");
+    this.typeManager = requireNonNull(typeManager, "typeManager is null");
   }
 
   public StatementAnalyzerFactory withSpecializedAccessControl(AccessControl 
accessControl) {
-    return new StatementAnalyzerFactory(metadata, sqlParser, accessControl);
+    return new StatementAnalyzerFactory(metadata, sqlParser, accessControl, 
typeManager);
   }
 
   public StatementAnalyzer createStatementAnalyzer(
@@ -59,12 +65,13 @@ public class StatementAnalyzerFactory {
         warningCollector,
         session,
         metadata,
-        correlationSupport);
+        correlationSupport,
+        typeManager);
   }
 
   public static StatementAnalyzerFactory createTestingStatementAnalyzerFactory(
-      Metadata metadata, AccessControl accessControl) {
-    return new StatementAnalyzerFactory(metadata, new SqlParser(), 
accessControl);
+      Metadata metadata, AccessControl accessControl, TypeManager typeManager) 
{
+    return new StatementAnalyzerFactory(metadata, new SqlParser(), 
accessControl, typeManager);
   }
 
   public AccessControl getAccessControl() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
index 8d7ce3cebbb..fddff825f0d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
@@ -47,6 +47,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
 import 
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
 import org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler;
 import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
 import org.apache.iotdb.db.queryengine.plan.scheduler.load.LoadTsFileScheduler;
@@ -87,6 +88,8 @@ public class TableModelPlanner implements IPlanner {
 
   private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier 
dataNodeLocationSupplier;
 
+  private final TypeManager typeManager;
+
   public TableModelPlanner(
       final Statement statement,
       final SqlParser sqlParser,
@@ -100,7 +103,8 @@ public class TableModelPlanner implements IPlanner {
       final List<PlanOptimizer> logicalPlanOptimizers,
       final List<PlanOptimizer> distributionPlanOptimizers,
       final AccessControl accessControl,
-      final DataNodeLocationSupplierFactory.DataNodeLocationSupplier 
dataNodeLocationSupplier) {
+      final DataNodeLocationSupplierFactory.DataNodeLocationSupplier 
dataNodeLocationSupplier,
+      final TypeManager typeManager) {
     this.statement = statement;
     this.sqlParser = sqlParser;
     this.metadata = metadata;
@@ -112,6 +116,7 @@ public class TableModelPlanner implements IPlanner {
     this.distributionPlanOptimizers = distributionPlanOptimizers;
     this.accessControl = accessControl;
     this.dataNodeLocationSupplier = dataNodeLocationSupplier;
+    this.typeManager = typeManager;
   }
 
   @Override
@@ -119,7 +124,7 @@ public class TableModelPlanner implements IPlanner {
     return new Analyzer(
             context,
             context.getSession(),
-            new StatementAnalyzerFactory(metadata, sqlParser, accessControl),
+            new StatementAnalyzerFactory(metadata, sqlParser, accessControl, 
typeManager),
             Collections.emptyList(),
             Collections.emptyMap(),
             statementRewrite,
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 de38c52a0c5..b50c7cbd33b 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
@@ -72,6 +72,7 @@ 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.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
@@ -1261,7 +1262,8 @@ public class AnalyzerTest {
       final SessionInfo session) {
     try {
       final StatementAnalyzerFactory statementAnalyzerFactory =
-          new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+          new StatementAnalyzerFactory(
+              metadata, sqlParser, nopAccessControl, new 
InternalTypeManager());
 
       Analyzer analyzer =
           new Analyzer(
@@ -1285,7 +1287,8 @@ public class AnalyzerTest {
       final SqlParser sqlParser,
       final SessionInfo session) {
     final StatementAnalyzerFactory statementAnalyzerFactory =
-        new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+        new StatementAnalyzerFactory(
+            metadata, sqlParser, nopAccessControl, new InternalTypeManager());
     Analyzer analyzer =
         new Analyzer(
             context,
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
index 7a2174769a0..631640d5dda 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
@@ -32,6 +32,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckV
 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.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
+import 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -224,7 +225,8 @@ public class AuthTest {
         new StatementAnalyzerFactory(
             TEST_MATADATA,
             sqlParser,
-            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()));
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+            new InternalTypeManager());
     MPPQueryContext context = new MPPQueryContext(sql, QUERY_ID, 0, session, 
null, null);
     Analyzer analyzer =
         new Analyzer(
@@ -251,7 +253,8 @@ public class AuthTest {
         new TableConfigTaskVisitor(
             Mockito.mock(IClientSession.class),
             TEST_MATADATA,
-            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+            new InternalTypeManager()),
         context);
   }
 
@@ -266,7 +269,8 @@ public class AuthTest {
         new TableConfigTaskVisitor(
             clientSession,
             TEST_MATADATA,
-            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
+            new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+            new InternalTypeManager()),
         context);
   }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
index c96747ff720..ecb8c6fb266 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.security.AllowAllAccessCo
 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.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -475,7 +476,8 @@ public class RowPatternRecognitionTest {
       final SqlParser sqlParser,
       final SessionInfo session) {
     final StatementAnalyzerFactory statementAnalyzerFactory =
-        new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+        new StatementAnalyzerFactory(
+            metadata, sqlParser, nopAccessControl, new InternalTypeManager());
 
     Analyzer analyzer =
         new Analyzer(
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
index 1d388876b29..a4cef177d81 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
@@ -43,6 +43,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.security.AllowAllAccessCo
 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.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
 
 import com.google.common.collect.ImmutableList;
 import org.mockito.Mockito;
@@ -170,7 +171,8 @@ public class PlanTester {
       SessionInfo session) {
     try {
       StatementAnalyzerFactory statementAnalyzerFactory =
-          new StatementAnalyzerFactory(metadata, sqlParser, new 
AllowAllAccessControl());
+          new StatementAnalyzerFactory(
+              metadata, sqlParser, new AllowAllAccessControl(), new 
InternalTypeManager());
 
       Analyzer analyzer =
           new Analyzer(

Reply via email to