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<>();