This is an automated email from the ASF dual-hosted git repository. jiangtian pushed a commit to branch force_ci/support_schema_evolution in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 67bc84578aefef56db6abac881170f27bad53bc3 Author: Tian Jiang <[email protected]> AuthorDate: Wed Dec 24 18:57:40 2025 +0800 add EvolvedSchema.toSchemaEvolutions --- .../dataregion/tsfile/evolution/ColumnRename.java | 1 + .../dataregion/tsfile/evolution/EvolvedSchema.java | 19 +++++++++++++++++++ .../tsfile/evolution/EvolvedSchemaTest.java | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/ColumnRename.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/ColumnRename.java index 80ff4b0f3ba..9d13ce4f7e6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/ColumnRename.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/ColumnRename.java @@ -34,6 +34,7 @@ public class ColumnRename implements SchemaEvolution { private String tableName; private String nameBefore; private String nameAfter; + // to judge if the Object directories should be renamed private TSDataType dataType; // for deserialization diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchema.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchema.java index 8913d795eb3..9a8d2cda88a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchema.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchema.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.storageengine.dataregion.tsfile.evolution; +import java.util.ArrayList; +import java.util.List; import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.file.metadata.IDeviceID.Factory; @@ -103,6 +105,23 @@ public class EvolvedSchema { + '}'; } + public List<SchemaEvolution> toSchemaEvolutions() { + List<SchemaEvolution> schemaEvolutions = new ArrayList<>(); + originalTableNames.forEach((finalTableName, originalTableName) -> { + if (!originalTableName.isEmpty()) { + schemaEvolutions.add(new TableRename(originalTableName, finalTableName)); + } + }); + originalColumnNames.forEach((finalTableName, originalColumnNameMap) -> { + originalColumnNameMap.forEach((finalColumnName, originalColumnName) -> { + if (!originalColumnName.isEmpty()) { + schemaEvolutions.add(new ColumnRename(finalTableName, originalColumnName, finalColumnName, null)); + } + }); + }); + return schemaEvolutions; + } + public IDeviceID rewriteDeviceId(IDeviceID deviceID) { String tableName = deviceID.getTableName(); String originalTableName = getOriginalTableName(tableName); diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchemaTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchemaTest.java index 5f4f7e8280d..488971cc8c9 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchemaTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/evolution/EvolvedSchemaTest.java @@ -56,4 +56,22 @@ public class EvolvedSchemaTest { assertEquals(allSchema, mergedShema); } + + @Test + public void testCovert() { + // t1 -> t2, t2.s1 -> t2.s2, t3 -> t1 + List<SchemaEvolution> schemaEvolutionList = + Arrays.asList( + new TableRename("t1", "t2"), + new ColumnRename("t2", "s1", "s2", TSDataType.INT32), + new TableRename("t3", "t1")); + EvolvedSchema oldSchema = new EvolvedSchema(); + schemaEvolutionList.forEach(schemaEvolution -> schemaEvolution.applyTo(oldSchema)); + + List<SchemaEvolution> convertedSchemaEvolutions = oldSchema.toSchemaEvolutions(); + EvolvedSchema newSchema = new EvolvedSchema(); + convertedSchemaEvolutions.forEach(schemaEvolution -> schemaEvolution.applyTo(newSchema)); + + assertEquals(oldSchema, newSchema); + } }
