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

jiangtian pushed a commit to branch TableModelIngestion
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit f09ad546ee45dc3d967857eac25bbfd3147e6e48
Author: DESKTOP-L0L5GPJ\jt <[email protected]>
AuthorDate: Thu Jun 13 16:45:27 2024 +0800

    temp save
---
 .../protocol/thrift/impl/ClientRPCServiceImpl.java | 46 ++++++-----
 .../iotdb/db/queryengine/plan/Coordinator.java     |  1 -
 .../db/queryengine/plan/analyze/AnalyzeUtils.java  | 64 +++++++++------
 .../queryengine/plan/analyze/AnalyzeVisitor.java   | 49 ++++++++---
 .../db/queryengine/plan/analyze/IAnalysis.java     |  2 +-
 .../plan/analyze/schema/ISchemaAutoCreation.java   |  5 +-
 .../plan/analyze/schema/SchemaValidator.java       |  7 +-
 .../plan/parser/StatementGenerator.java            | 15 ++--
 .../queryengine/plan/planner/LogicalPlanner.java   |  3 +-
 .../planner/plan/node/load/LoadTsFileNode.java     |  7 +-
 .../relational/analyzer/StatementAnalyzer.java     | 32 +++-----
 .../plan/relational/metadata/Metadata.java         |  1 -
 .../plan/relational/sql/ast/InsertTablet.java      | 36 ++++----
 .../relational/sql/ast/WrappedInsertStatement.java | 96 +++++++---------------
 .../plan/relational/sql/ast/WrappedStatement.java  | 13 ++-
 .../utils/ConversionUtils.java}                    | 30 ++-----
 .../plan/statement/crud/InsertBaseStatement.java   | 22 +++++
 .../plan/statement/crud/InsertTabletStatement.java | 24 +-----
 .../schema/table/column/TsTableColumnCategory.java |  2 +-
 19 files changed, 221 insertions(+), 234 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index ae4339991b7..0455eb26069 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -733,7 +733,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                 true,
                 true),
             AggregationStep.SINGLE,
-            Collections.singletonList(new InputLocation[]{new InputLocation(0, 
0)}));
+            Collections.singletonList(new InputLocation[] {new 
InputLocation(0, 0)}));
 
     GroupByTimeParameter groupByTimeParameter =
         new GroupByTimeParameter(
@@ -761,7 +761,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
               !TSDataType.BLOB.equals(dataType)
                   || (!TAggregationType.LAST_VALUE.equals(aggregationType)
-                  && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
+                      && 
!TAggregationType.FIRST_VALUE.equals(aggregationType)));
     } else {
       path = new NonAlignedFullPath(Factory.DEFAULT_FACTORY.create(device), 
measurementSchema);
       operator =
@@ -777,7 +777,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
               !TSDataType.BLOB.equals(dataType)
                   || (!TAggregationType.LAST_VALUE.equals(aggregationType)
-                  && !TAggregationType.FIRST_VALUE.equals(aggregationType)));
+                      && 
!TAggregationType.FIRST_VALUE.equals(aggregationType)));
     }
 
     try {
@@ -1222,7 +1222,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
   public TSStatus closeSession(TSCloseSessionReq req) {
     return new TSStatus(
         !SESSION_MANAGER.closeSession(
-            SESSION_MANAGER.getCurrSession(), 
COORDINATOR::cleanupQueryExecution)
+                SESSION_MANAGER.getCurrSession(), 
COORDINATOR::cleanupQueryExecution)
             ? RpcUtils.getStatus(TSStatusCode.NOT_LOGIN)
             : RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS));
   }
@@ -2080,19 +2080,25 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
       long queryId = SESSION_MANAGER.requestQueryId();
       ExecutionResult result;
       if (statement.isWriteToTable()) {
-        result = COORDINATOR.executeForTableModel(statement,
-            relationSqlParser, clientSession,
-            queryId,
-            SESSION_MANAGER.getSessionInfo(clientSession), "", metadata,
-            config.getConnectionTimeoutInMS());
+        result =
+            COORDINATOR.executeForTableModel(
+                statement,
+                relationSqlParser,
+                clientSession,
+                queryId,
+                SESSION_MANAGER.getSessionInfo(clientSession),
+                "",
+                metadata,
+                config.getConnectionTimeoutInMS());
       } else {
-        result = COORDINATOR.executeForTreeModel(
-            statement,
-            queryId,
-            SESSION_MANAGER.getSessionInfo(clientSession),
-            "",
-            partitionFetcher,
-            schemaFetcher);
+        result =
+            COORDINATOR.executeForTreeModel(
+                statement,
+                queryId,
+                SESSION_MANAGER.getSessionInfo(clientSession),
+                "",
+                partitionFetcher,
+                schemaFetcher);
       }
       return result.status;
     } catch (IoTDBException e) {
@@ -2822,9 +2828,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
         "Log in failed. Either you are not authorized or the session has timed 
out.");
   }
 
-  /**
-   * Add stat of whole stage query into metrics
-   */
+  /** Add stat of whole stage query into metrics */
   private void addQueryLatency(StatementType statementType, long 
costTimeInNanos) {
     if (statementType == null) {
       return;
@@ -2842,9 +2846,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
             statementType.name());
   }
 
-  /**
-   * Add stat of operation into metrics
-   */
+  /** Add stat of operation into metrics */
   private void addStatementExecutionLatency(
       OperationType operation, String statementType, long costTime) {
     if (statementType == null) {
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 fe20273f183..180edcea95d 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
@@ -340,7 +340,6 @@ public class Coordinator {
     return new QueryExecution(relationalModelPlanner, queryContext, executor);
   }
 
-
   public IQueryExecution getQueryExecution(Long queryId) {
     return queryExecutionMap.get(queryId);
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
index f1b9210c216..0728af062db 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeUtils.java
@@ -19,13 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.analyze;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.partition.DataPartition;
@@ -40,9 +33,18 @@ import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 public class AnalyzeUtils {
 
   private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS 
=
@@ -53,16 +55,21 @@ public class AnalyzeUtils {
     // util class
   }
 
-  public static void analyzeInsert(MPPQueryContext context,
-      InsertBaseStatement insertBaseStatement, Runnable schemaValidation,
-      DataPartitionQueryFunc partitionFetcher, IAnalysis analysis) {
+  public static InsertBaseStatement analyzeInsert(
+      MPPQueryContext context,
+      InsertBaseStatement insertBaseStatement,
+      Runnable schemaValidation,
+      DataPartitionQueryFunc partitionFetcher,
+      IAnalysis analysis,
+      boolean removeLogicalView) {
     context.setQueryType(QueryType.WRITE);
     insertBaseStatement.semanticCheck();
-    validateSchema(analysis, insertBaseStatement,
-        schemaValidation);
-    InsertBaseStatement realStatement = removeLogicalView(analysis, 
insertBaseStatement);
+    validateSchema(analysis, insertBaseStatement, schemaValidation);
+
+    InsertBaseStatement realStatement =
+        removeLogicalView ? removeLogicalView(analysis, insertBaseStatement) : 
insertBaseStatement;
     if (analysis.isFinishQueryAfterAnalyze()) {
-      return;
+      return realStatement;
     }
     analysis.setRealStatement(realStatement);
 
@@ -77,18 +84,20 @@ public class AnalyzeUtils {
       getAnalysisForWriting(
           analysis,
           Collections.singletonList(dataPartitionQueryParam),
-          context.getSession().getUserName(), partitionFetcher);
+          context.getSession().getUserName(),
+          partitionFetcher);
     } else {
       computeAnalysisForMultiTablets(
           analysis,
           (InsertMultiTabletsStatement) realStatement,
-          context.getSession().getUserName(), partitionFetcher);
+          context.getSession().getUserName(),
+          partitionFetcher);
     }
+    return realStatement;
   }
 
   public static void validateSchema(
-      IAnalysis analysis, InsertBaseStatement insertStatement,
-      Runnable schemaValidation) {
+      IAnalysis analysis, InsertBaseStatement insertStatement, Runnable 
schemaValidation) {
     final long startTime = System.nanoTime();
     try {
       schemaValidation.run();
@@ -136,7 +145,9 @@ public class AnalyzeUtils {
 
   /** get analysis according to statement and params */
   public static void getAnalysisForWriting(
-      IAnalysis analysis, List<DataPartitionQueryParam> 
dataPartitionQueryParams, String userName,
+      IAnalysis analysis,
+      List<DataPartitionQueryParam> dataPartitionQueryParams,
+      String userName,
       DataPartitionQueryFunc partitionQueryFunc) {
 
     DataPartition dataPartition =
@@ -153,7 +164,9 @@ public class AnalyzeUtils {
   }
 
   public static void computeAnalysisForInsertRows(
-      IAnalysis analysis, InsertRowsStatement insertRowsStatement, String 
userName,
+      IAnalysis analysis,
+      InsertRowsStatement insertRowsStatement,
+      String userName,
       DataPartitionQueryFunc partitionFetcher) {
     Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new 
HashMap<>();
     for (InsertRowStatement insertRowStatement : 
insertRowsStatement.getInsertRowStatementList()) {
@@ -175,8 +188,10 @@ public class AnalyzeUtils {
   }
 
   public static void computeAnalysisForMultiTablets(
-      IAnalysis analysis, InsertMultiTabletsStatement 
insertMultiTabletsStatement, String userName
-      , DataPartitionQueryFunc partitionFetcher) {
+      IAnalysis analysis,
+      InsertMultiTabletsStatement insertMultiTabletsStatement,
+      String userName,
+      DataPartitionQueryFunc partitionFetcher) {
     Map<String, Set<TTimePartitionSlot>> dataPartitionQueryParamMap = new 
HashMap<>();
     for (InsertTabletStatement insertTabletStatement :
         insertMultiTabletsStatement.getInsertTabletStatementList()) {
@@ -198,7 +213,8 @@ public class AnalyzeUtils {
   }
 
   public interface DataPartitionQueryFunc {
-    DataPartition queryDataPartition(List<DataPartitionQueryParam> 
dataPartitionQueryParams,
-        String userName);
+
+    DataPartition queryDataPartition(
+        List<DataPartitionQueryParam> dataPartitionQueryParams, String 
userName);
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index f8904a2b448..33247de6a9e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -2618,9 +2618,13 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
   public Analysis visitInsertTablet(
       InsertTabletStatement insertTabletStatement, MPPQueryContext context) {
     Analysis analysis = new Analysis();
-    AnalyzeUtils.analyzeInsert(context, insertTabletStatement,
+    AnalyzeUtils.analyzeInsert(
+        context,
+        insertTabletStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertTabletStatement, 
context),
-        partitionFetcher::getOrCreateDataPartition, analysis);
+        partitionFetcher::getOrCreateDataPartition,
+        analysis,
+        true);
     return analysis;
   }
 
@@ -2629,7 +2633,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowStatement,
+    validateSchema(
+        analysis,
+        insertRowStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertRowStatement, 
context));
     InsertBaseStatement realInsertStatement = removeLogicalView(analysis, 
insertRowStatement);
     if (analysis.isFinishQueryAfterAnalyze()) {
@@ -2647,11 +2653,14 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
       getAnalysisForWriting(
           analysis,
           Collections.singletonList(dataPartitionQueryParam),
-          context.getSession().getUserName(), 
partitionFetcher::getOrCreateDataPartition);
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     } else {
       computeAnalysisForInsertRows(
-          analysis, (InsertRowsStatement) realInsertStatement, 
context.getSession().getUserName()
-          , partitionFetcher::getOrCreateDataPartition);
+          analysis,
+          (InsertRowsStatement) realInsertStatement,
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     }
     return analysis;
   }
@@ -2662,7 +2671,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowsStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowsStatement,
+    validateSchema(
+        analysis,
+        insertRowsStatement,
         () -> SchemaValidator.validate(schemaFetcher, insertRowsStatement, 
context));
     InsertRowsStatement realInsertRowsStatement =
         (InsertRowsStatement) removeLogicalView(analysis, insertRowsStatement);
@@ -2672,7 +2683,10 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     analysis.setRealStatement(realInsertRowsStatement);
 
     computeAnalysisForInsertRows(
-        analysis, realInsertRowsStatement, context.getSession().getUserName(), 
partitionFetcher::getOrCreateDataPartition);
+        analysis,
+        realInsertRowsStatement,
+        context.getSession().getUserName(),
+        partitionFetcher::getOrCreateDataPartition);
     return analysis;
   }
 
@@ -2682,7 +2696,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertMultiTabletsStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertMultiTabletsStatement,
+    validateSchema(
+        analysis,
+        insertMultiTabletsStatement,
         () -> SchemaValidator.validate(schemaFetcher, 
insertMultiTabletsStatement, context));
     InsertMultiTabletsStatement realStatement =
         (InsertMultiTabletsStatement) removeLogicalView(analysis, 
insertMultiTabletsStatement);
@@ -2692,7 +2708,10 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     analysis.setRealStatement(realStatement);
 
     computeAnalysisForMultiTablets(
-        analysis, realStatement, context.getSession().getUserName(), 
partitionFetcher::getOrCreateDataPartition);
+        analysis,
+        realStatement,
+        context.getSession().getUserName(),
+        partitionFetcher::getOrCreateDataPartition);
     return analysis;
   }
 
@@ -2702,7 +2721,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
     context.setQueryType(QueryType.WRITE);
     insertRowsOfOneDeviceStatement.semanticCheck();
     Analysis analysis = new Analysis();
-    validateSchema(analysis, insertRowsOfOneDeviceStatement,
+    validateSchema(
+        analysis,
+        insertRowsOfOneDeviceStatement,
         () -> SchemaValidator.validate(schemaFetcher, 
insertRowsOfOneDeviceStatement, context));
     InsertBaseStatement realInsertStatement =
         removeLogicalView(analysis, insertRowsOfOneDeviceStatement);
@@ -2725,8 +2746,10 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
           partitionFetcher::getOrCreateDataPartition);
     } else {
       computeAnalysisForInsertRows(
-          analysis, (InsertRowsStatement) realInsertStatement, 
context.getSession().getUserName()
-          , partitionFetcher::getOrCreateDataPartition);
+          analysis,
+          (InsertRowsStatement) realInsertStatement,
+          context.getSession().getUserName(),
+          partitionFetcher::getOrCreateDataPartition);
     }
     return analysis;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
index 97d29a81c7d..23a04679e64 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/IAnalysis.java
@@ -26,8 +26,8 @@ import org.apache.iotdb.commons.partition.SchemaPartition;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.TimePredicate;
-
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+
 import org.apache.tsfile.read.common.block.TsBlock;
 
 import java.util.List;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
index 55f8dd5210c..1d6468583ad 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
@@ -39,8 +39,9 @@ public interface ISchemaAutoCreation {
 
   TSDataType getDataType(int index);
 
-  //TODO: Check necessity because all implementations return null
+  // TODO: Check necessity because all implementations return null
   TSEncoding getEncoding(int index);
-  //TODO: Check necessity because all implementations return null
+
+  // TODO: Check necessity because all implementations return null
   CompressionType getCompressionType(int index);
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
index 1406698cc42..96c55a05b0e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/SchemaValidator.java
@@ -60,15 +60,16 @@ public class SchemaValidator {
   public static void validate(
       Metadata metadata, WrappedInsertStatement insertStatement, 
MPPQueryContext context) {
     try {
-      
metadata.fetchAndComputeSchemaWithAutoCreate(insertStatement.getSchemaValidationList(),
-          context);
+      String databaseName = context.getSession().getDatabaseName().get();
+      //      metadata.validateTableHeaderSchema(databaseName);
+      //      metadata.fetchAndComputeSchemaWithAutoCreate(
+      //          insertStatement.getSchemaValidationList(), context);
       insertStatement.updateAfterSchemaValidation(context);
     } catch (QueryProcessException e) {
       throw new SemanticException(e.getMessage());
     }
   }
 
-
   public static ISchemaTree validate(
       ISchemaFetcher schemaFetcher,
       List<PartialPath> devicePaths,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
index 288f54fd77c..ef4314b4d24 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/StatementGenerator.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.qp.sql.IoTDBSqlParser;
@@ -35,7 +36,6 @@ import 
org.apache.iotdb.db.queryengine.plan.expression.leaf.ConstantOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand;
 import 
org.apache.iotdb.db.queryengine.plan.expression.multi.FunctionExpression;
-import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ColumnDefinition.ColumnCategory;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.component.FromComponent;
 import 
org.apache.iotdb.db.queryengine.plan.statement.component.GroupByTimeComponent;
@@ -338,13 +338,16 @@ public class StatementGenerator {
     insertStatement.setAligned(insertTabletReq.isAligned);
     insertStatement.setWriteToTable(insertTabletReq.isWriteToTable());
     if (insertTabletReq.isWriteToTable()) {
-      if (!insertTabletReq.isSetColumnCategories() || 
insertTabletReq.getColumnCategoriesSize() != 
insertTabletReq.getMeasurementsSize()) {
-        throw new IllegalArgumentException("Missing or invalid column 
categories for table "
-            + "insertion");
+      if (!insertTabletReq.isSetColumnCategories()
+          || insertTabletReq.getColumnCategoriesSize() != 
insertTabletReq.getMeasurementsSize()) {
+        throw new IllegalArgumentException(
+            "Missing or invalid column categories for table " + "insertion");
       }
-      ColumnCategory[] columnCategories = new 
ColumnCategory[insertTabletReq.columnCategories.size()];
+      TsTableColumnCategory[] columnCategories =
+          new TsTableColumnCategory[insertTabletReq.columnCategories.size()];
       for (int i = 0; i < columnCategories.length; i++) {
-        columnCategories[i] = 
ColumnCategory.values()[insertTabletReq.getColumnCategories().get(i)];
+        columnCategories[i] =
+            
TsTableColumnCategory.deserialize(insertTabletReq.getColumnCategories().get(i));
       }
       insertStatement.setColumnCategories(columnCategories);
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
index 64f6b273176..65f28cd4a9e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanner.java
@@ -45,7 +45,8 @@ public class LogicalPlanner {
 
   public LogicalQueryPlan plan(Analysis analysis) {
     long startTime = System.nanoTime();
-    PlanNode rootNode = new 
LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), context);
+    PlanNode rootNode =
+        new LogicalPlanVisitor(analysis).process(analysis.getTreeStatement(), 
context);
 
     // optimize the query logical plan
     if (analysis.isQuery()) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
index 540f9e4d9f6..be5de4cc819 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadTsFileNode.java
@@ -92,10 +92,11 @@ public class LoadTsFileNode extends WritePlanNode {
   public List<WritePlanNode> splitByPartition(IAnalysis analysis) {
     List<WritePlanNode> res = new ArrayList<>();
     LoadTsFileStatement statement =
-        ((Analysis) analysis).getStatement() instanceof PipeEnrichedStatement
+        ((Analysis) analysis).getTreeStatement() instanceof 
PipeEnrichedStatement
             ? (LoadTsFileStatement)
-                ((PipeEnrichedStatement) ((Analysis) 
analysis).getStatement()).getInnerStatement()
-            : (LoadTsFileStatement) ((Analysis) analysis).getStatement();
+                ((PipeEnrichedStatement) ((Analysis) 
analysis).getTreeStatement())
+                    .getInnerStatement()
+            : (LoadTsFileStatement) ((Analysis) analysis).getTreeStatement();
 
     for (int i = 0; i < resources.size(); i++) {
       res.add(
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 9ba4c068c7f..e6bd82bfe25 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
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.analyzer;
 
-import java.util.Collections;
-import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
@@ -28,8 +26,6 @@ import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.execution.warnings.IoTDBWarning;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
 import org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils;
-import org.apache.iotdb.db.queryengine.plan.analyze.IAnalysis;
-import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
@@ -105,6 +101,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Values;
 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.statement.crud.InsertBaseStatement;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
@@ -114,9 +111,6 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Streams;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
-import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertMultiTabletsStatement;
-import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
 import org.apache.tsfile.read.common.type.RowType;
 import org.apache.tsfile.read.common.type.Type;
 
@@ -145,10 +139,6 @@ import static java.util.Collections.emptyList;
 import static java.util.Locale.ENGLISH;
 import static java.util.Objects.requireNonNull;
 import static 
org.apache.iotdb.db.queryengine.execution.warnings.StandardWarningCode.REDUNDANT_ORDER_BY;
-import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.computeAnalysisForMultiTablets;
-import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.getAnalysisForWriting;
-import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.removeLogicalView;
-import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeUtils.validateSchema;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.AggregationAnalyzer.verifyOrderByAggregations;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.AggregationAnalyzer.verifySourceAggregations;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.CanonicalizationAware.canonicalizationAwareKey;
@@ -372,14 +362,18 @@ public class StatementAnalyzer {
       final Scope ret = Scope.create();
 
       final MPPQueryContext context = insert.getContext();
-      final InsertTabletStatement insertTabletStatement = 
insert.getInnerTreeStatement();
-
-      IAnalysis analysis = AnalyzeUtils.analyzeInsert(context, 
insertTabletStatement,
-          () -> SchemaValidator.validate(metadata, insert, context),
-          metadata::getOrCreateDataPartition);
+      InsertBaseStatement insertTabletStatement = 
insert.getInnerTreeStatement();
+
+      insertTabletStatement =
+          AnalyzeUtils.analyzeInsert(
+              context,
+              insertTabletStatement,
+              () -> SchemaValidator.validate(metadata, insert, context),
+              metadata::getOrCreateDataPartition,
+              analysis,
+              false);
+      insert.setInnerTreeStatement(insertTabletStatement);
 
-      // TODO-TableIngestion: use IAnalysis
-      // StatementAnalyzer.this.analysis = analysis;
       return ret;
     }
 
@@ -1996,7 +1990,7 @@ public class StatementAnalyzer {
 
     /**
      * @return true if the Query / QuerySpecification containing the analyzed 
Limit or FetchFirst,
-     * must contain orderBy (i.e., for FetchFirst with ties).
+     *     must contain orderBy (i.e., for FetchFirst with ties).
      */
     private boolean analyzeLimit(Node node, Scope scope) {
       //      checkState(
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 166a2e4c78b..91acf28da3f 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
@@ -19,7 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.metadata;
 
-import java.util.Map;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
index 38a423fae21..de0f00a73a9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InsertTablet.java
@@ -19,26 +19,25 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import 
org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
 import 
org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputationWithAutoCreation;
 import 
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
+
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.utils.Pair;
 
-public class InsertTablet extends WrappedInsertStatement {
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-  private InsertTabletStatement insertTabletStatement;
+public class InsertTablet extends WrappedInsertStatement {
 
   public InsertTablet(InsertTabletStatement insertTabletStatement, 
MPPQueryContext context) {
     super(insertTabletStatement, context);
-    this.insertTabletStatement = insertTabletStatement;
   }
 
   @Override
@@ -48,11 +47,12 @@ public class InsertTablet extends WrappedInsertStatement {
 
   @Override
   public InsertTabletStatement getInnerTreeStatement() {
-    return insertTabletStatement;
+    return ((InsertTabletStatement) super.getInnerTreeStatement());
   }
 
   @Override
   public List<ISchemaComputationWithAutoCreation> getSchemaValidationList() {
+    InsertTabletStatement insertTabletStatement = getInnerTreeStatement();
     Map<IDeviceID, ISchemaComputationWithAutoCreation> map = new HashMap<>();
     for (int i = 0; i < insertTabletStatement.getRowCount(); i++) {
       map.computeIfAbsent(insertTabletStatement.getTableDeviceID(i), 
this::getSchemaComputation);
@@ -62,7 +62,7 @@ public class InsertTablet extends WrappedInsertStatement {
 
   @Override
   public void updateAfterSchemaValidation(MPPQueryContext context) throws 
QueryProcessException {
-    insertTabletStatement.updateAfterSchemaValidation(context);
+    getInnerTreeStatement().updateAfterSchemaValidation(context);
   }
 
   @Override
@@ -78,38 +78,38 @@ public class InsertTablet extends WrappedInsertStatement {
 
     @Override
     public void computeMeasurement(int index, IMeasurementSchemaInfo 
measurementSchemaInfo) {
-      insertTabletStatement.computeMeasurement(index, measurementSchemaInfo);
+      getInnerTreeStatement().computeMeasurement(index, measurementSchemaInfo);
     }
 
     @Override
     public boolean hasLogicalViewNeedProcess() {
-      return insertTabletStatement.hasLogicalViewNeedProcess();
+      return getInnerTreeStatement().hasLogicalViewNeedProcess();
     }
 
     @Override
     public List<LogicalViewSchema> getLogicalViewSchemaList() {
-      return insertTabletStatement.getLogicalViewSchemaList();
+      return getInnerTreeStatement().getLogicalViewSchemaList();
     }
 
     @Override
     public List<Integer> getIndexListOfLogicalViewPaths() {
-      return insertTabletStatement.getIndexListOfLogicalViewPaths();
+      return getInnerTreeStatement().getIndexListOfLogicalViewPaths();
     }
 
     @Override
     public void recordRangeOfLogicalViewSchemaListNow() {
-      insertTabletStatement.recordRangeOfLogicalViewSchemaListNow();
+      getInnerTreeStatement().recordRangeOfLogicalViewSchemaListNow();
     }
 
     @Override
     public Pair<Integer, Integer> getRangeOfLogicalViewSchemaListRecorded() {
-      return insertTabletStatement.getRangeOfLogicalViewSchemaListRecorded();
+      return getInnerTreeStatement().getRangeOfLogicalViewSchemaListRecorded();
     }
 
     @Override
-    public void computeMeasurementOfView(int index, IMeasurementSchemaInfo 
measurementSchemaInfo,
-        boolean isAligned) {
-      insertTabletStatement.computeMeasurementOfView(index, 
measurementSchemaInfo, isAligned);
+    public void computeMeasurementOfView(
+        int index, IMeasurementSchemaInfo measurementSchemaInfo, boolean 
isAligned) {
+      getInnerTreeStatement().computeMeasurementOfView(index, 
measurementSchemaInfo, isAligned);
     }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
index e57e7b55c40..7d91727f571 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
@@ -1,89 +1,49 @@
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
-import java.util.List;
-import org.apache.iotdb.commons.exception.IllegalPathException;
-import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import 
org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
-import org.apache.iotdb.db.queryengine.execution.schedule.queue.ID;
-import 
org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaComputationWithAutoCreation;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema;
 import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.IDeviceID;
-import org.apache.tsfile.file.metadata.enums.CompressionType;
-import org.apache.tsfile.file.metadata.enums.TSEncoding;
-import org.apache.tsfile.utils.Pair;
+
+import org.apache.tsfile.read.common.type.TypeFactory;
+
+import java.util.ArrayList;
+import java.util.List;
 
 public abstract class WrappedInsertStatement extends WrappedStatement {
 
-  protected InsertBaseStatement insertStatement;
+  protected TableSchema tableSchema;
 
-  public WrappedInsertStatement(
-      InsertBaseStatement innerTreeStatement,
-      MPPQueryContext context) {
+  public WrappedInsertStatement(InsertBaseStatement innerTreeStatement, 
MPPQueryContext context) {
     super(innerTreeStatement, context);
-    this.insertStatement = innerTreeStatement;
   }
 
   @Override
   public InsertBaseStatement getInnerTreeStatement() {
-    return insertStatement;
+    return ((InsertBaseStatement) super.getInnerTreeStatement());
   }
 
-  public abstract List<ISchemaComputationWithAutoCreation> 
getSchemaValidationList();
-
-  public abstract void updateAfterSchemaValidation(MPPQueryContext context) 
throws QueryProcessException;
-
-  public abstract ISchemaComputationWithAutoCreation 
getSchemaComputation(IDeviceID deviceID);
-
-  public abstract class BasicSchemaExecutions implements 
ISchemaComputationWithAutoCreation {
-    protected IDeviceID deviceID;
-
-    public BasicSchemaExecutions(IDeviceID deviceID) {
-      this.deviceID = deviceID;
-    }
-
-    @Override
-    public boolean isAligned() {
-      return true;
-    }
-
-    @Override
-    public TSDataType getDataType(int index) {
-      return insertStatement.getDataTypes()[index];
-    }
-
-    @Override
-    public TSEncoding getEncoding(int index) {
-      return null;
-    }
-
-    @Override
-    public CompressionType getCompressionType(int index) {
-      return null;
-    }
-
-    @Override
-    public PartialPath getDevicePath() {
-      //TODO-TableInsertion: use deviceId
-      try {
-        return new PartialPath(deviceID);
-      } catch (IllegalPathException e) {
-        throw new RuntimeException(e);
+  public abstract void updateAfterSchemaValidation(MPPQueryContext context)
+      throws QueryProcessException;
+
+  public TableSchema getTableSchema() {
+    if (tableSchema == null) {
+      InsertBaseStatement insertBaseStatement = getInnerTreeStatement();
+      String tableName = insertBaseStatement.getDevicePath().getFullPath();
+      List<ColumnSchema> columnSchemas =
+          new ArrayList<>(insertBaseStatement.getMeasurements().length);
+      for (int i = 0; i < insertBaseStatement.getMeasurements().length; i++) {
+        columnSchemas.add(
+            new ColumnSchema(
+                insertBaseStatement.getMeasurements()[i],
+                TypeFactory.getType(insertBaseStatement.getDataTypes()[i]),
+                false,
+                insertBaseStatement.getColumnCategories()[i]));
       }
+      tableSchema = new TableSchema(tableName, columnSchemas);
     }
 
-    @Override
-    public String[] getMeasurements() {
-      return insertStatement.getMeasurements();
-    }
-
-    @Override
-    public void computeDevice(boolean isAligned) {
-      // ignored, table device must be aligned
-    }
-
+    return tableSchema;
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
index 380388ee141..5998e07c289 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java
@@ -19,16 +19,18 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.ast;
 
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
+
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
-import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 
 public abstract class WrappedStatement extends Statement {
-  protected final org.apache.iotdb.db.queryengine.plan.statement.Statement 
innerTreeStatement;
+  protected org.apache.iotdb.db.queryengine.plan.statement.Statement 
innerTreeStatement;
   protected final MPPQueryContext context;
 
-  public 
WrappedStatement(org.apache.iotdb.db.queryengine.plan.statement.Statement 
innerTreeStatement,
+  public WrappedStatement(
+      org.apache.iotdb.db.queryengine.plan.statement.Statement 
innerTreeStatement,
       MPPQueryContext context) {
     super(null);
     this.innerTreeStatement = innerTreeStatement;
@@ -66,6 +68,11 @@ public abstract class WrappedStatement extends Statement {
     return innerTreeStatement;
   }
 
+  public void setInnerTreeStatement(
+      org.apache.iotdb.db.queryengine.plan.statement.Statement 
innerTreeStatement) {
+    this.innerTreeStatement = innerTreeStatement;
+  }
+
   public MPPQueryContext getContext() {
     return context;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
similarity index 51%
copy from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
copy to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
index 55f8dd5210c..48aaa6fef40 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ISchemaAutoCreation.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/utils/ConversionUtils.java
@@ -17,30 +17,10 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.analyze.schema;
+package org.apache.iotdb.db.queryengine.plan.relational.utils;
 
-import org.apache.iotdb.commons.path.PartialPath;
-
-import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.enums.CompressionType;
-import org.apache.tsfile.file.metadata.enums.TSEncoding;
-
-/**
- * This interface defines the required info provided for schema auto creation, 
which is executed
- * schema fetcher.
- */
-public interface ISchemaAutoCreation {
-
-  PartialPath getDevicePath();
-
-  String[] getMeasurements();
-
-  boolean isAligned();
-
-  TSDataType getDataType(int index);
-
-  //TODO: Check necessity because all implementations return null
-  TSEncoding getEncoding(int index);
-  //TODO: Check necessity because all implementations return null
-  CompressionType getCompressionType(int index);
+public class ConversionUtils {
+  private ConversionUtils() {
+    // util class
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
index bc31e71ec80..6a48221189e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.statement.crud;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.auth.entity.PrivilegeType;
 import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.schema.view.LogicalViewSchema;
 import org.apache.iotdb.db.auth.AuthorityChecker;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -68,6 +69,9 @@ public abstract class InsertBaseStatement extends Statement {
   /** index of failed measurements -> info including measurement, data type 
and value */
   protected Map<Integer, FailedMeasurementInfo> failedMeasurementIndex2Info;
 
+  protected TsTableColumnCategory[] columnCategories;
+  protected List<Integer> idColumnIndices;
+
   // region params used by analyzing logical views.
 
   /** This param records the logical view schema appeared in this statement. */
@@ -238,6 +242,24 @@ public abstract class InsertBaseStatement extends 
Statement {
     return false;
   }
 
+  public TsTableColumnCategory[] getColumnCategories() {
+    return columnCategories;
+  }
+
+  public void setColumnCategories(TsTableColumnCategory[] columnCategories) {
+    this.columnCategories = columnCategories;
+    idColumnIndices = new ArrayList<>();
+    for (int i = 0; i < columnCategories.length; i++) {
+      if (columnCategories[i].equals(TsTableColumnCategory.ID)) {
+        idColumnIndices.add(i);
+      }
+    }
+  }
+
+  public List<Integer> getIdColumnIndices() {
+    return idColumnIndices;
+  }
+
   public boolean hasFailedMeasurements() {
     return failedMeasurementIndex2Info != null && 
!failedMeasurementIndex2Info.isEmpty();
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
index 53b60b67494..fa9e8959c01 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java
@@ -29,7 +29,6 @@ import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import 
org.apache.iotdb.db.queryengine.common.schematree.IMeasurementSchemaInfo;
 import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaValidation;
-import 
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ColumnDefinition.ColumnCategory;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
@@ -38,7 +37,6 @@ import org.apache.iotdb.db.utils.CommonUtils;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.IDeviceID.Factory;
-import org.apache.tsfile.file.metadata.StringArrayDeviceID;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.utils.Binary;
@@ -66,8 +64,6 @@ public class InsertTabletStatement extends 
InsertBaseStatement implements ISchem
   private BitMap[] bitMaps;
   private Object[] columns;
 
-  private ColumnCategory[] columnCategories;
-  private List<Integer> idColumnIndices;
   private IDeviceID[] deviceIDs;
 
   private int rowCount = 0;
@@ -77,6 +73,7 @@ public class InsertTabletStatement extends 
InsertBaseStatement implements ISchem
    * views.
    */
   private boolean[] measurementIsAligned;
+
   private boolean writeToTable = false;
 
   public InsertTabletStatement() {
@@ -425,25 +422,6 @@ public class InsertTabletStatement extends 
InsertBaseStatement implements ISchem
     return super.toRelationalStatement(context);
   }
 
-  public ColumnCategory[] getColumnCategories() {
-    return columnCategories;
-  }
-
-  public void setColumnCategories(
-      ColumnCategory[] columnCategories) {
-    this.columnCategories = columnCategories;
-    idColumnIndices = new ArrayList<>();
-    for (int i = 0; i < columnCategories.length; i++) {
-      if (columnCategories[i].equals(ColumnCategory.ID)) {
-        idColumnIndices.add(i);
-      }
-    }
-  }
-
-  public List<Integer> getIdColumnIndices() {
-    return idColumnIndices;
-  }
-
   public IDeviceID getTableDeviceID(int rowIdx) {
     if (deviceIDs == null) {
       deviceIDs = new IDeviceID[rowCount];
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
index b7d6ca02dae..ca4faedffe1 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/column/TsTableColumnCategory.java
@@ -60,7 +60,7 @@ public enum TsTableColumnCategory {
     return deserialize(category);
   }
 
-  private static TsTableColumnCategory deserialize(byte category) {
+  public static TsTableColumnCategory deserialize(byte category) {
     switch (category) {
       case 0:
         return ID;

Reply via email to