This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch template-fix
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/template-fix by this push:
new 3b27deaec22 fix
3b27deaec22 is described below
commit 3b27deaec229368a0b39d21c2c142be88cdc57aa
Author: Caideyipi <[email protected]>
AuthorDate: Wed Feb 4 11:04:09 2026 +0800
fix
---
.../iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java | 8 ++++----
.../iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java | 6 +++---
.../plan/node/metadata/read/SeriesSchemaFetchScanNode.java | 4 ++--
.../schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java | 11 +++++++++++
.../java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java | 2 ++
5 files changed, 22 insertions(+), 9 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 0aaecc3f13d..cc194c36aa7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -1094,21 +1094,21 @@ public class LogicalPlanBuilder {
boolean withAttributes,
boolean withTemplate,
boolean withAliasForce) {
- PartialPath storageGroupPath;
+ PartialPath databasePath;
for (String storageGroup : storageGroupList) {
try {
- storageGroupPath = new PartialPath(storageGroup);
+ databasePath = new PartialPath(storageGroup);
PathPatternTree overlappedPatternTree = new PathPatternTree();
for (PartialPath pathPattern :
patternTree.getOverlappedPathPatterns(
- storageGroupPath.concatNode(MULTI_LEVEL_PATH_WILDCARD))) {
+ databasePath.concatNode(MULTI_LEVEL_PATH_WILDCARD))) {
// pathPattern has been deduplicated, no need to deduplicate again
overlappedPatternTree.appendFullPath(pathPattern);
}
this.root.addChild(
new SeriesSchemaFetchScanNode(
context.getQueryId().genPlanNodeId(),
- storageGroupPath,
+ databasePath,
overlappedPatternTree,
templateMap,
withTags,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
index ea7be0c2c33..8a73227dfad 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanVisitor.java
@@ -844,12 +844,12 @@ public class LogicalPlanVisitor extends
StatementVisitor<PlanNode, MPPQueryConte
public PlanNode visitSeriesSchemaFetch(
SeriesSchemaFetchStatement seriesSchemaFetchStatement, MPPQueryContext
context) {
LogicalPlanBuilder planBuilder = new LogicalPlanBuilder(analysis, context);
- List<String> storageGroupList =
+ List<String> databaseList =
new
ArrayList<>(analysis.getSchemaPartitionInfo().getSchemaPartitionMap().keySet());
return planBuilder
- .planSchemaFetchMerge(storageGroupList)
+ .planSchemaFetchMerge(databaseList)
.planSeriesSchemaFetchSource(
- storageGroupList,
+ databaseList,
seriesSchemaFetchStatement.getPatternTree(),
seriesSchemaFetchStatement.getTemplateMap(),
seriesSchemaFetchStatement.isWithTags(),
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
index df922904a99..931fe356b6f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metadata/read/SeriesSchemaFetchScanNode.java
@@ -48,14 +48,14 @@ public class SeriesSchemaFetchScanNode extends
SchemaFetchScanNode {
public SeriesSchemaFetchScanNode(
PlanNodeId id,
- PartialPath storageGroup,
+ PartialPath database,
PathPatternTree patternTree,
Map<Integer, Template> templateMap,
boolean withTags,
boolean withAttributes,
boolean withTemplate,
boolean withAliasForce) {
- super(id, storageGroup, patternTree);
+ super(id, database, patternTree);
this.templateMap = templateMap;
this.withTags = withTags;
this.withAttributes = withAttributes;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
index 9aec147ace1..9cb3270cd82 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
@@ -73,6 +73,7 @@ import
org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.Schem
import
org.apache.iotdb.db.schemaengine.schemaregion.read.resp.reader.impl.TimeseriesReaderWithViewFetch;
import org.apache.iotdb.db.schemaengine.schemaregion.utils.MetaFormatUtils;
import
org.apache.iotdb.db.schemaengine.schemaregion.utils.filter.DeviceFilterVisitor;
+import org.apache.iotdb.db.schemaengine.template.ClusterTemplateManager;
import
org.apache.iotdb.db.storageengine.rescon.quotas.DataNodeSpaceQuotaManager;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -114,6 +115,7 @@ import java.util.function.IntConsumer;
import java.util.function.IntSupplier;
import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_SEPARATOR;
+import static org.apache.iotdb.commons.schema.SchemaConstant.NON_TEMPLATE;
/**
* The hierarchical struct of the Metadata Tree is implemented in this class.
@@ -809,6 +811,15 @@ public class MTreeBelowSGMemoryImpl {
for (int i = levelOfSG + 1; i < nodeNames.length; i++) {
child = cur.getChild(nodeNames[i]);
if (child == null) {
+ if (cur.isDevice()
+ && cur.getAsDeviceMNode().getSchemaTemplateId() != NON_TEMPLATE
+ && ClusterTemplateManager.getInstance()
+ .getTemplate(cur.getAsDeviceMNode().getSchemaTemplateId())
+ .getSchema(nodeNames[i])
+ != null) {
+ throw new PathAlreadyExistException(
+ new PartialPath(Arrays.copyOf(deviceId.getNodes(), i +
1)).getFullPath());
+ }
child =
store.addChild(cur, nodeNames[i],
nodeFactory.createInternalMNode(cur, nodeNames[i]));
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index ded717f5a49..b70d51cca95 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -115,6 +115,8 @@ public class ErrorHandlingUtils {
|| status.getCode() ==
TSStatusCode.CANNOT_FETCH_FI_STATE.getStatusCode()
|| status.getCode() ==
TSStatusCode.QUERY_EXECUTION_MEMORY_NOT_ENOUGH.getStatusCode()
|| status.getCode() ==
TSStatusCode.EXECUTE_UDF_ERROR.getStatusCode()
+ || status.getCode() ==
TSStatusCode.TEMPLATE_INCOMPATIBLE.getStatusCode()
+ || status.getCode() ==
TSStatusCode.PATH_ALREADY_EXIST.getStatusCode()
|| status.getCode() == TSStatusCode.QUERY_TIMEOUT.getStatusCode())
{
LOGGER.info(message);
} else {