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

justinchen pushed a commit to branch UserDefineTime-TsFile
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/UserDefineTime-TsFile by this 
push:
     new 7c86a31fe43 partial
7c86a31fe43 is described below

commit 7c86a31fe437926ee26e67487f17542ccef8535c
Author: Caideyipi <[email protected]>
AuthorDate: Wed Jan 21 17:09:54 2026 +0800

    partial
---
 .../analyze/load/LoadTsFileTableSchemaCache.java     | 10 +++++++++-
 .../planner/plan/node/load/LoadSingleTsFileNode.java |  4 ++++
 .../plan/relational/metadata/Metadata.java           | 20 +++++++++++---------
 .../plan/relational/metadata/TableMetadataImpl.java  |  4 ++--
 .../metadata/fetcher/TableHeaderSchemaValidator.java | 15 ++++++---------
 .../plan/relational/analyzer/AnalyzerTest.java       |  4 ++--
 .../plan/relational/analyzer/TSBSMetadata.java       |  4 ++--
 .../plan/relational/analyzer/TestMetadata.java       |  4 ++--
 .../plan/statement/InsertStatementTest.java          |  6 +++---
 .../apache/iotdb/commons/schema/table/TsTable.java   |  2 +-
 10 files changed, 42 insertions(+), 31 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
index 690a18dbd46..84dec4eca01 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
@@ -111,6 +111,7 @@ public class LoadTsFileTableSchemaCache {
   private long currentTimeIndexMemoryUsageSizeInBytes = 0;
 
   private int currentBatchDevicesCount = 0;
+  private boolean needDecode4DifferentTimeColumn;
 
   public LoadTsFileTableSchemaCache(
       final Metadata metadata, final MPPQueryContext context, final boolean 
needToCreateDatabase)
@@ -298,7 +299,9 @@ public class LoadTsFileTableSchemaCache {
         
org.apache.iotdb.db.queryengine.plan.relational.metadata.TableSchema.fromTsFileTableSchema(
             tableName, schema);
     final TableSchema realSchema =
-        metadata.validateTableHeaderSchema(database, fileSchema, context, 
true, true).orElse(null);
+        metadata
+            .validateTableHeaderSchema4TsFile(database, fileSchema, context, 
true, true)
+            .orElse(null);
     if (Objects.isNull(realSchema)) {
       throw new LoadAnalyzeException(
           String.format(
@@ -308,6 +311,10 @@ public class LoadTsFileTableSchemaCache {
     verifyTableDataTypeAndGenerateTagColumnMapper(fileSchema, realSchema);
   }
 
+  public boolean isNeedDecode4DifferentTimeColumn() {
+    return needDecode4DifferentTimeColumn;
+  }
+
   private void autoCreateTableDatabaseIfAbsent(final String database) throws 
LoadAnalyzeException {
     validateDatabaseName(database);
     if (DataNodeTableCache.getInstance().isDatabaseExist(database)) {
@@ -449,6 +456,7 @@ public class LoadTsFileTableSchemaCache {
 
     currentBatchTable2Devices = null;
     tableTagColumnMapper = null;
+    needDecode4DifferentTimeColumn = false;
   }
 
   private void clearDevices() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadSingleTsFileNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadSingleTsFileNode.java
index 604fda6e1e8..79db4f10785 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadSingleTsFileNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/load/LoadSingleTsFileNode.java
@@ -89,6 +89,10 @@ public class LoadSingleTsFileNode extends WritePlanNode {
   public boolean needDecodeTsFile(
       Function<List<Pair<IDeviceID, TTimePartitionSlot>>, 
List<TRegionReplicaSet>>
           partitionFetcher) {
+    if (needDecodeTsFile) {
+      return true;
+    }
+
     List<Pair<IDeviceID, TTimePartitionSlot>> slotList = new ArrayList<>();
     resource
         .getDevices()
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 db706d4980c..7c0b6aae877 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
@@ -102,28 +102,30 @@ public interface Metadata {
    * <p>When table or column is missing, this method will execute auto 
creation if the user have
    * corresponding authority.
    *
-   * <p>When using SQL, the columnSchemaList could be null and there won't be 
any validation.
+   * <p>When using SQL, the columnSchemaList could be {@code null} and there 
won't be any
+   * validation.
    *
-   * <p>When the input dataType or category of one column is null, the column 
won't be auto created.
+   * <p>When the input dataType or category of one column is {@code null}, the 
column won't be auto
+   * created.
    *
    * <p>The caller need to recheck the dataType of measurement columns to 
decide whether to do
    * partial insert
    *
-   * @param isStrictIdColumn if true, when the table already exists, the id 
columns in the existing
-   *     table should be the prefix of those in the input tableSchema, or 
input id columns be the
-   *     prefix of existing id columns.
+   * @param isStrictTagColumn if {@code true}, when the table already exists, 
the tag columns in the
+   *     existing table should be the prefix of those in the input 
tableSchema, or input tag columns
+   *     be the prefix of existing tag columns.
    * @return If table doesn't exist and the user have no authority to create 
table, Optional.empty()
    *     will be returned. The returned table may not include all the columns
    *     in @param{tableSchema}, if the user have no authority to alter table.
-   * @throws SemanticException if column category mismatch or data types of id 
or attribute column
-   *     are not STRING or Category, Type of any missing ColumnSchema is null
+   * @throws SemanticException if column category mismatch or data types of 
tag or attribute column
+   *     are not STRING or Category, Type of any missing ColumnSchema is 
{@code null}
    */
-  Optional<TableSchema> validateTableHeaderSchema(
+  Optional<TableSchema> validateTableHeaderSchema4TsFile(
       final String database,
       final TableSchema tableSchema,
       final MPPQueryContext context,
       final boolean allowCreateTable,
-      final boolean isStrictIdColumn)
+      final boolean isStrictTagColumn)
       throws LoadAnalyzeTableColumnDisorderException;
 
   void validateInsertNodeMeasurements(
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 5df442d4d32..3e8bbf12890 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
@@ -1396,7 +1396,7 @@ public class TableMetadataImpl implements Metadata {
   }
 
   @Override
-  public Optional<TableSchema> validateTableHeaderSchema(
+  public Optional<TableSchema> validateTableHeaderSchema4TsFile(
       String database,
       TableSchema tableSchema,
       MPPQueryContext context,
@@ -1404,7 +1404,7 @@ public class TableMetadataImpl implements Metadata {
       boolean isStrictTagColumn)
       throws LoadAnalyzeTableColumnDisorderException {
     return TableHeaderSchemaValidator.getInstance()
-        .validateTableHeaderSchema(
+        .validateTableHeaderSchema4TsFile(
             database, tableSchema, context, allowCreateTable, 
isStrictTagColumn);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
index 5bdf6aec2a0..846dceeca2d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
@@ -93,7 +93,7 @@ public class TableHeaderSchemaValidator {
     return TableHeaderSchemaValidatorHolder.INSTANCE;
   }
 
-  public Optional<TableSchema> validateTableHeaderSchema(
+  public Optional<TableSchema> validateTableHeaderSchema4TsFile(
       final String database,
       final TableSchema tableSchema,
       final MPPQueryContext context,
@@ -136,8 +136,7 @@ public class TableHeaderSchemaValidator {
     } else {
       DataNodeTreeViewSchemaUtils.checkTableInWrite(database, table);
       // If table with this name already exists and isStrictTagColumn is true, 
make sure the
-      // existing
-      // id columns are the prefix of the incoming tag columns, or vice versa
+      // existing tag columns are a prefix of the incoming tag columns, or 
vice versa
       if (isStrictTagColumn) {
         final List<TsTableColumnSchema> realTagColumns = 
table.getTagColumnSchemaList();
         final List<ColumnSchema> incomingTagColumns = 
tableSchema.getTagColumns();
@@ -572,12 +571,10 @@ public class TableHeaderSchemaValidator {
       final ListenableFuture<ConfigTaskResult> future = 
task.execute(configTaskExecutor);
       final ConfigTaskResult result = future.get();
       if (result.getStatusCode().getStatusCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
-        throw new RuntimeException(
-            new IoTDBException(
-                String.format(
-                    "Auto add table column failed: %s.%s",
-                    database, measurementInfo.getTableName()),
-                result.getStatusCode().getStatusCode()));
+        throw new IoTDBRuntimeException(
+            String.format(
+                "Auto add table column failed: %s.%s", database, 
measurementInfo.getTableName()),
+            result.getStatusCode().getStatusCode());
       }
       DataNodeSchemaLockManager.getInstance()
           .takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION_TABLE);
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 6666c180c5e..c789490bb10 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
@@ -1058,12 +1058,12 @@ public class AnalyzerTest {
     DataNodeTableCache.getInstance().commitUpdateTable(database, table, null);
     return new TestMetadata() {
       @Override
-      public Optional<TableSchema> validateTableHeaderSchema(
+      public Optional<TableSchema> validateTableHeaderSchema4TsFile(
           String database,
           TableSchema schema,
           MPPQueryContext context,
           boolean allowCreateTable,
-          boolean isStrictIdColumn) {
+          boolean isStrictTagColumn) {
         TableSchema tableSchema = StatementTestUtils.genTableSchema();
         assertEquals(tableSchema, schema);
         return Optional.of(tableSchema);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
index 79c03156097..48dd9409d63 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TSBSMetadata.java
@@ -342,12 +342,12 @@ public class TSBSMetadata implements Metadata {
   }
 
   @Override
-  public Optional<TableSchema> validateTableHeaderSchema(
+  public Optional<TableSchema> validateTableHeaderSchema4TsFile(
       String database,
       TableSchema tableSchema,
       MPPQueryContext context,
       boolean allowCreateTable,
-      boolean isStrictIdColumn) {
+      boolean isStrictTagColumn) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
index 4b1d18944b7..551dbc5a961 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/TestMetadata.java
@@ -481,12 +481,12 @@ public class TestMetadata implements Metadata {
   }
 
   @Override
-  public Optional<TableSchema> validateTableHeaderSchema(
+  public Optional<TableSchema> validateTableHeaderSchema4TsFile(
       final String database,
       final TableSchema tableSchema,
       final MPPQueryContext context,
       final boolean allowCreateTable,
-      final boolean isStrictIdColumn) {
+      final boolean isStrictTagColumn) {
     throw new UnsupportedOperationException();
   }
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/InsertStatementTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/InsertStatementTest.java
index 81a9d88d3d3..cb23ee0ec04 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/InsertStatementTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/statement/InsertStatementTest.java
@@ -100,7 +100,7 @@ public class InsertStatementTest {
     DataNodeTableCache.getInstance().preUpdateTable("test", tsTable, null);
     DataNodeTableCache.getInstance().commitUpdateTable("test", "table1", null);
 
-    when(metadata.validateTableHeaderSchema(
+    when(metadata.validateTableHeaderSchema4TsFile(
             any(String.class),
             any(TableSchema.class),
             any(MPPQueryContext.class),
@@ -252,7 +252,7 @@ public class InsertStatementTest {
     DataNodeTableCache.getInstance().preUpdateTable("test", tsTable, null);
     DataNodeTableCache.getInstance().commitUpdateTable("test", "table1", null);
 
-    when(metadata.validateTableHeaderSchema(
+    when(metadata.validateTableHeaderSchema4TsFile(
             any(String.class),
             any(TableSchema.class),
             any(MPPQueryContext.class),
@@ -287,7 +287,7 @@ public class InsertStatementTest {
     DataNodeTableCache.getInstance().preUpdateTable("test", tsTable, null);
     DataNodeTableCache.getInstance().commitUpdateTable("test", "table1", null);
 
-    when(metadata.validateTableHeaderSchema(
+    when(metadata.validateTableHeaderSchema4TsFile(
             any(String.class),
             any(TableSchema.class),
             any(MPPQueryContext.class),
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java
index 61b00d060bd..df3bbc045e5 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java
@@ -69,7 +69,7 @@ public class TsTable {
       "When there are object fields, the %s %s shall not be '.', '..' or 
contain './', '.\\'.";
   protected String tableName;
 
-  private Map<String, TsTableColumnSchema> columnSchemaMap = new 
LinkedHashMap<>();
+  private final Map<String, TsTableColumnSchema> columnSchemaMap = new 
LinkedHashMap<>();
   private final Map<String, Integer> tagColumnIndexMap = new HashMap<>();
   private final Map<String, Integer> idColumnIndexMap = new HashMap<>();
 

Reply via email to