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

rong pushed a commit to branch rc/1.3.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rc/1.3.3 by this push:
     new ebb885b88ab Pipe: Fix InternalCreateMultiTimeSeries plan's members may 
be altered in SchemaRegionListeningQueue & Alter timeseries for logical view is 
not parsed in snapshot transferring (#13237)
ebb885b88ab is described below

commit ebb885b88abe070ace969e82d32f73b079657dcd
Author: Caideyipi <[email protected]>
AuthorDate: Wed Aug 21 10:10:52 2024 +0800

    Pipe: Fix InternalCreateMultiTimeSeries plan's members may be altered in 
SchemaRegionListeningQueue & Alter timeseries for logical view is not parsed in 
snapshot transferring (#13237)
---
 .../visitor/PipeStatementExceptionVisitor.java     |   2 +-
 .../visitor/PipeStatementPatternParseVisitor.java  |  12 +++
 .../visitor/PipeStatementTSStatusVisitor.java      |   4 +-
 .../visitor/PipeStatementToBatchVisitor.java       |  28 +++---
 .../queryengine/plan/analyze/AnalyzeVisitor.java   |   7 +-
 .../plan/execution/config/ConfigTaskVisitor.java   |   2 +-
 .../plan/planner/LogicalPlanVisitor.java           |   4 +-
 .../plan/node/metedata/write/MeasurementGroup.java |   8 +-
 .../plan/statement/StatementVisitor.java           |   8 +-
 .../metadata/AlterTimeSeriesStatement.java         |  26 +++++-
 .../metadata/CreateMultiTimeSeriesStatement.java   |   2 +-
 .../metadata/DeleteTimeSeriesStatement.java        |   2 +-
 .../req/impl/CreateAlignedTimeSeriesPlanImpl.java  |  16 ++++
 .../PipeStatementPatternParseVisitorTest.java      |  54 ++++++++---
 .../extractor/PipePlanPatternParseVisitorTest.java | 100 ++++++++-------------
 15 files changed, 170 insertions(+), 105 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementExceptionVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementExceptionVisitor.java
index 5a65b1a5e05..bdb48a2ccbd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementExceptionVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementExceptionVisitor.java
@@ -77,7 +77,7 @@ public class PipeStatementExceptionVisitor extends 
StatementVisitor<TSStatus, Ex
   }
 
   @Override
-  public TSStatus visitCreateMultiTimeseries(
+  public TSStatus visitCreateMultiTimeSeries(
       final CreateMultiTimeSeriesStatement statement, final Exception context) 
{
     return visitGeneralCreateTimeSeries(statement, context);
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementPatternParseVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementPatternParseVisitor.java
index 0754a2fb55d..d5fe0dfe3ae 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementPatternParseVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementPatternParseVisitor.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.pipe.pattern.IoTDBPipePattern;
 import org.apache.iotdb.db.queryengine.plan.statement.Statement;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementNode;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.AlterTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateAlignedTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
@@ -103,6 +104,17 @@ public class PipeStatementPatternParseVisitor
     return Optional.of(targetCreateAlignedTimeSeriesStatement);
   }
 
+  // For logical view with tags/attributes
+  @Override
+  public Optional<Statement> visitAlterTimeSeries(
+      final AlterTimeSeriesStatement alterTimeSeriesStatement, final 
IoTDBPipePattern pattern) {
+    return pattern.matchesMeasurement(
+            alterTimeSeriesStatement.getPath().getDevice(),
+            alterTimeSeriesStatement.getPath().getMeasurement())
+        ? Optional.of(alterTimeSeriesStatement)
+        : Optional.empty();
+  }
+
   @Override
   public Optional<Statement> visitActivateTemplate(
       final ActivateTemplateStatement activateTemplateStatement, final 
IoTDBPipePattern pattern) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
index 03a917379ce..3e3992343fd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementTSStatusVisitor.java
@@ -140,7 +140,7 @@ public class PipeStatementTSStatusVisitor extends 
StatementVisitor<TSStatus, TSS
   }
 
   @Override
-  public TSStatus visitCreateMultiTimeseries(
+  public TSStatus visitCreateMultiTimeSeries(
       final CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement, 
final TSStatus context) {
     return visitGeneralCreateMultiTimeseries(createMultiTimeSeriesStatement, 
context);
   }
@@ -183,7 +183,7 @@ public class PipeStatementTSStatusVisitor extends 
StatementVisitor<TSStatus, TSS
   }
 
   @Override
-  public TSStatus visitAlterTimeseries(
+  public TSStatus visitAlterTimeSeries(
       final AlterTimeSeriesStatement alterTimeSeriesStatement, final TSStatus 
context) {
     if (context.getCode() == TSStatusCode.METADATA_ERROR.getStatusCode()) {
       if (context.getMessage().contains("already")) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementToBatchVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementToBatchVisitor.java
index f48a2bc002c..1bca479fed6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementToBatchVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeStatementToBatchVisitor.java
@@ -115,15 +115,16 @@ public class PipeStatementToBatchVisitor extends 
StatementVisitor<Optional<State
                 statement.getPath().getDevicePath(),
                 devicePath -> new Pair<>(false, new MeasurementGroup()))
             .getRight();
-    group.addMeasurement(
+    if (group.addMeasurement(
         statement.getPath().getMeasurement(),
         statement.getDataType(),
         statement.getEncoding(),
-        statement.getCompressor());
-    group.addAttributes(statement.getAttributes());
-    group.addTags(statement.getTags());
-    group.addProps(statement.getProps());
-    group.addAlias(statement.getAlias());
+        statement.getCompressor())) {
+      group.addAttributes(statement.getAttributes());
+      group.addTags(statement.getTags());
+      group.addProps(statement.getProps());
+      group.addAlias(statement.getAlias());
+    }
   }
 
   private void addAlignedTimeSeriesToBatchStatement(
@@ -136,17 +137,18 @@ public class PipeStatementToBatchVisitor extends 
StatementVisitor<Optional<State
                 statement.getDevicePath(), devicePath -> new Pair<>(true, new 
MeasurementGroup()))
             .getRight();
     for (int i = 0; i < statement.getMeasurements().size(); ++i) {
-      group.addMeasurement(
+      if (group.addMeasurement(
           statement.getMeasurements().get(i),
           statement.getDataTypes().get(i),
           statement.getEncodings().get(i),
-          statement.getCompressors().get(i));
-      group.addProps(new HashMap<>());
+          statement.getCompressors().get(i))) {
+        group.addProps(new HashMap<>());
+        // Non-null lists
+        group.addTags(statement.getTagsList().get(i));
+        group.addAttributes(statement.getAttributesList().get(i));
+        group.addAlias(statement.getAliasList().get(i));
+      }
     }
-    // Non-null lists
-    statement.getTagsList().forEach(group::addTags);
-    statement.getAttributesList().forEach(group::addAttributes);
-    statement.getAliasList().forEach(group::addAlias);
   }
 
   @Override
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 478841f55df..86f17c65331 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
@@ -2559,8 +2559,9 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
   }
 
   @Override
-  public Analysis visitCreateMultiTimeseries(
-      CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement, 
MPPQueryContext context) {
+  public Analysis visitCreateMultiTimeSeries(
+      final CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement,
+      final MPPQueryContext context) {
     context.setQueryType(QueryType.WRITE);
     Analysis analysis = new Analysis();
     analysis.setStatement(createMultiTimeSeriesStatement);
@@ -2589,7 +2590,7 @@ public class AnalyzeVisitor extends 
StatementVisitor<Analysis, MPPQueryContext>
   }
 
   @Override
-  public Analysis visitAlterTimeseries(
+  public Analysis visitAlterTimeSeries(
       AlterTimeSeriesStatement alterTimeSeriesStatement, MPPQueryContext 
context) {
     context.setQueryType(QueryType.WRITE);
     Analysis analysis = new Analysis();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
index e9b36c80c91..6a04b32c0ae 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskVisitor.java
@@ -491,7 +491,7 @@ public class ConfigTaskVisitor extends 
StatementVisitor<IConfigTask, MPPQueryCon
   }
 
   @Override
-  public IConfigTask visitDeleteTimeseries(
+  public IConfigTask visitDeleteTimeSeries(
       DeleteTimeSeriesStatement deleteTimeSeriesStatement, MPPQueryContext 
context) {
     return new DeleteTimeSeriesTask(context.getQueryId().getId(), 
deleteTimeSeriesStatement);
   }
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 f3c3c26561e..c179db10703 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
@@ -411,7 +411,7 @@ public class LogicalPlanVisitor extends 
StatementVisitor<PlanNode, MPPQueryConte
   }
 
   @Override
-  public PlanNode visitCreateMultiTimeseries(
+  public PlanNode visitCreateMultiTimeSeries(
       CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement, 
MPPQueryContext context) {
     return new CreateMultiTimeSeriesNode(
         context.getQueryId().genPlanNodeId(),
@@ -435,7 +435,7 @@ public class LogicalPlanVisitor extends 
StatementVisitor<PlanNode, MPPQueryConte
   }
 
   @Override
-  public PlanNode visitAlterTimeseries(
+  public PlanNode visitAlterTimeSeries(
       AlterTimeSeriesStatement alterTimeSeriesStatement, MPPQueryContext 
context) {
     return new AlterTimeSeriesNode(
         context.getQueryId().genPlanNodeId(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
index 2089e34c7e0..9557e9c3279 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/metedata/write/MeasurementGroup.java
@@ -84,10 +84,10 @@ public class MeasurementGroup {
   }
 
   public boolean addMeasurement(
-      String measurement,
-      TSDataType dataType,
-      TSEncoding encoding,
-      CompressionType compressionType) {
+      final String measurement,
+      final TSDataType dataType,
+      final TSEncoding encoding,
+      final CompressionType compressionType) {
     if (measurementSet.contains(measurement)) {
       return false;
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
index 1fd8e8a58c2..e7b7e3ffa66 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java
@@ -165,17 +165,17 @@ public abstract class StatementVisitor<R, C> {
   }
 
   // Create Multi Timeseries
-  public R visitCreateMultiTimeseries(
+  public R visitCreateMultiTimeSeries(
       CreateMultiTimeSeriesStatement createMultiTimeSeriesStatement, C 
context) {
     return visitStatement(createMultiTimeSeriesStatement, context);
   }
 
-  // Alter Timeseries
-  public R visitAlterTimeseries(AlterTimeSeriesStatement 
alterTimeSeriesStatement, C context) {
+  // Alter TimeSeries
+  public R visitAlterTimeSeries(AlterTimeSeriesStatement 
alterTimeSeriesStatement, C context) {
     return visitStatement(alterTimeSeriesStatement, context);
   }
 
-  public R visitDeleteTimeseries(DeleteTimeSeriesStatement 
deleteTimeSeriesStatement, C context) {
+  public R visitDeleteTimeSeries(DeleteTimeSeriesStatement 
deleteTimeSeriesStatement, C context) {
     return visitStatement(deleteTimeSeriesStatement, context);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
index 7d90cfb2e70..16d296ad42a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/AlterTimeSeriesStatement.java
@@ -31,6 +31,7 @@ import org.apache.iotdb.rpc.TSStatusCode;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * ALTER TIMESERIES statement.
@@ -145,7 +146,30 @@ public class AlterTimeSeriesStatement extends Statement {
 
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
-    return visitor.visitAlterTimeseries(this, context);
+    return visitor.visitAlterTimeSeries(this, context);
+  }
+
+  @Override
+  public boolean equals(final Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null || getClass() != obj.getClass()) {
+      return false;
+    }
+    final AlterTimeSeriesStatement that = (AlterTimeSeriesStatement) obj;
+    return Objects.equals(this.path, that.path)
+        && Objects.equals(this.alterType, that.alterType)
+        && Objects.equals(this.alterMap, that.alterMap)
+        && Objects.equals(this.alias, that.alias)
+        && Objects.equals(this.tagsMap, that.tagsMap)
+        && Objects.equals(this.attributesMap, that.attributesMap)
+        && Objects.equals(this.isAlterView, that.isAlterView);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(path, alterType, alterMap, alias, tagsMap, 
attributesMap, isAlterView);
   }
 
   public enum AlterType {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
index c536b598cdb..e58b0ccf5a9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CreateMultiTimeSeriesStatement.java
@@ -137,7 +137,7 @@ public class CreateMultiTimeSeriesStatement extends 
Statement {
 
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
-    return visitor.visitCreateMultiTimeseries(this, context);
+    return visitor.visitCreateMultiTimeSeries(this, context);
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
index 0a89335ffdf..02cad6e003e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/DeleteTimeSeriesStatement.java
@@ -74,7 +74,7 @@ public class DeleteTimeSeriesStatement extends Statement 
implements IConfigState
 
   @Override
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
-    return visitor.visitDeleteTimeseries(this, context);
+    return visitor.visitDeleteTimeSeries(this, context);
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/write/req/impl/CreateAlignedTimeSeriesPlanImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/write/req/impl/CreateAlignedTimeSeriesPlanImpl.java
index f02aa52f4c0..4ffa8aca5b2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/write/req/impl/CreateAlignedTimeSeriesPlanImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/write/req/impl/CreateAlignedTimeSeriesPlanImpl.java
@@ -31,6 +31,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 public class CreateAlignedTimeSeriesPlanImpl implements 
ICreateAlignedTimeSeriesPlan {
 
@@ -177,5 +178,20 @@ public class CreateAlignedTimeSeriesPlanImpl implements 
ICreateAlignedTimeSeries
 
   public void setWithMerge(final boolean withMerge) {
     this.withMerge = withMerge;
+    // Deep copy if with merge because when upsert option is set
+    // The original set may be altered to help distinguish between creation 
plan
+    // and update plan
+    // Here we deeply copy to avoid damaging the original plan node for pipe 
schema region listening
+    // queue
+    if (withMerge) {
+      measurements = new ArrayList<>(measurements);
+      dataTypes = new ArrayList<>(dataTypes);
+      encodings = new ArrayList<>(encodings);
+      compressors = new ArrayList<>(compressors);
+      aliasList = Objects.nonNull(aliasList) ? new ArrayList<>(aliasList) : 
null;
+      tagsList = Objects.nonNull(tagsList) ? new ArrayList<>(tagsList) : null;
+      attributesList = Objects.nonNull(attributesList) ? new 
ArrayList<>(attributesList) : null;
+      tagOffsets = Objects.nonNull(tagOffsets) ? new ArrayList<>(tagOffsets) : 
null;
+    }
   }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/PipeStatementPatternParseVisitorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/PipeStatementPatternParseVisitorTest.java
index b11e9a0e3e6..42e4e31c45c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/PipeStatementPatternParseVisitorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/connector/PipeStatementPatternParseVisitorTest.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.pipe.pattern.IoTDBPipePattern;
 import 
org.apache.iotdb.commons.schema.view.viewExpression.leaf.TimeSeriesViewOperand;
 import 
org.apache.iotdb.db.pipe.receiver.visitor.PipeStatementPatternParseVisitor;
+import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.AlterTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateAlignedTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.CreateTimeSeriesStatement;
 import 
org.apache.iotdb.db.queryengine.plan.statement.metadata.template.ActivateTemplateStatement;
@@ -37,7 +38,7 @@ import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.Map;
 
 public class PipeStatementPatternParseVisitorTest {
 
@@ -51,9 +52,9 @@ public class PipeStatementPatternParseVisitorTest {
     createTimeSeriesStatement.setDataType(TSDataType.FLOAT);
     createTimeSeriesStatement.setEncoding(TSEncoding.RLE);
     createTimeSeriesStatement.setCompressor(CompressionType.SNAPPY);
-    createTimeSeriesStatement.setProps(new HashMap<>());
-    createTimeSeriesStatement.setTags(new HashMap<>());
-    createTimeSeriesStatement.setAttributes(new HashMap<>());
+    createTimeSeriesStatement.setProps(Collections.emptyMap());
+    createTimeSeriesStatement.setTags(Collections.emptyMap());
+    createTimeSeriesStatement.setAttributes(Collections.emptyMap());
     createTimeSeriesStatement.setAlias("a1");
 
     final CreateTimeSeriesStatement createTimeSeriesStatementToFilter =
@@ -62,9 +63,9 @@ public class PipeStatementPatternParseVisitorTest {
     createTimeSeriesStatementToFilter.setDataType(TSDataType.FLOAT);
     createTimeSeriesStatementToFilter.setEncoding(TSEncoding.RLE);
     createTimeSeriesStatementToFilter.setCompressor(CompressionType.SNAPPY);
-    createTimeSeriesStatementToFilter.setProps(new HashMap<>());
-    createTimeSeriesStatementToFilter.setTags(new HashMap<>());
-    createTimeSeriesStatementToFilter.setAttributes(new HashMap<>());
+    createTimeSeriesStatementToFilter.setProps(Collections.emptyMap());
+    createTimeSeriesStatementToFilter.setTags(Collections.emptyMap());
+    createTimeSeriesStatementToFilter.setAttributes(Collections.emptyMap());
     createTimeSeriesStatementToFilter.setAlias("a2");
 
     Assert.assertEquals(
@@ -91,9 +92,9 @@ public class PipeStatementPatternParseVisitorTest {
     expectedCreateAlignedTimeSeriesStatement.setCompressors(
         Collections.singletonList(CompressionType.SNAPPY));
     expectedCreateAlignedTimeSeriesStatement.setTagsList(
-        Collections.singletonList(new HashMap<>()));
+        Collections.singletonList(Collections.emptyMap()));
     expectedCreateAlignedTimeSeriesStatement.setAttributesList(
-        Collections.singletonList(new HashMap<>()));
+        Collections.singletonList(Collections.emptyMap()));
     
expectedCreateAlignedTimeSeriesStatement.setAliasList(Collections.singletonList("a1"));
 
     final CreateAlignedTimeSeriesStatement 
originalCreateAlignedTimeSeriesStatement =
@@ -107,9 +108,9 @@ public class PipeStatementPatternParseVisitorTest {
     originalCreateAlignedTimeSeriesStatement.setCompressors(
         Arrays.asList(CompressionType.SNAPPY, CompressionType.SNAPPY));
     originalCreateAlignedTimeSeriesStatement.setTagsList(
-        Arrays.asList(new HashMap<>(), new HashMap<>()));
+        Arrays.asList(Collections.emptyMap(), Collections.emptyMap()));
     originalCreateAlignedTimeSeriesStatement.setAttributesList(
-        Arrays.asList(new HashMap<>(), new HashMap<>()));
+        Arrays.asList(Collections.emptyMap(), Collections.emptyMap()));
     originalCreateAlignedTimeSeriesStatement.setAliasList(Arrays.asList("a1", 
"a2"));
 
     Assert.assertEquals(
@@ -119,6 +120,37 @@ public class PipeStatementPatternParseVisitorTest {
             .orElseThrow(AssertionError::new));
   }
 
+  @Test
+  public void testAlterTimeSeries() throws IllegalPathException {
+    final AlterTimeSeriesStatement alterTimeSeriesStatement = new 
AlterTimeSeriesStatement(true);
+
+    final Map<String, String> attributeMap = Collections.singletonMap("k1", 
"v1");
+    alterTimeSeriesStatement.setPath(new PartialPath("root.db.device.s1"));
+    alterTimeSeriesStatement.setAlterMap(attributeMap);
+    alterTimeSeriesStatement.setTagsMap(Collections.emptyMap());
+    alterTimeSeriesStatement.setAttributesMap(attributeMap);
+    alterTimeSeriesStatement.setAlias("");
+
+    final AlterTimeSeriesStatement alterTimeSeriesStatementToFilter =
+        new AlterTimeSeriesStatement(true);
+
+    alterTimeSeriesStatementToFilter.setPath(new 
PartialPath("root.db1.device.s1"));
+    alterTimeSeriesStatementToFilter.setAlterMap(attributeMap);
+    alterTimeSeriesStatementToFilter.setTagsMap(Collections.emptyMap());
+    alterTimeSeriesStatementToFilter.setAttributesMap(attributeMap);
+    alterTimeSeriesStatementToFilter.setAlias("");
+
+    Assert.assertEquals(
+        alterTimeSeriesStatement,
+        new PipeStatementPatternParseVisitor()
+            .visitAlterTimeSeries(alterTimeSeriesStatement, fullPathPattern)
+            .orElseThrow(AssertionError::new));
+    Assert.assertFalse(
+        new PipeStatementPatternParseVisitor()
+            .visitAlterTimeSeries(alterTimeSeriesStatementToFilter, 
prefixPathPattern)
+            .isPresent());
+  }
+
   @Test
   public void testActivateTemplate() throws IllegalPathException {
     final ActivateTemplateStatement activateTemplateStatement =
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/PipePlanPatternParseVisitorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/PipePlanPatternParseVisitorTest.java
index 2cd3e02822d..c36e29b6449 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/PipePlanPatternParseVisitorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/extractor/PipePlanPatternParseVisitorTest.java
@@ -67,9 +67,9 @@ public class PipePlanPatternParseVisitorTest {
             TSDataType.FLOAT,
             TSEncoding.RLE,
             CompressionType.SNAPPY,
-            new HashMap<>(),
-            new HashMap<>(),
-            new HashMap<>(),
+            Collections.emptyMap(),
+            Collections.emptyMap(),
+            Collections.emptyMap(),
             "a1");
     final CreateTimeSeriesNode createTimeSeriesNodeToFilter =
         new CreateTimeSeriesNode(
@@ -78,9 +78,9 @@ public class PipePlanPatternParseVisitorTest {
             TSDataType.FLOAT,
             TSEncoding.RLE,
             CompressionType.SNAPPY,
-            new HashMap<>(),
-            new HashMap<>(),
-            new HashMap<>(),
+            Collections.emptyMap(),
+            Collections.emptyMap(),
+            Collections.emptyMap(),
             "a1");
 
     Assert.assertEquals(
@@ -105,8 +105,8 @@ public class PipePlanPatternParseVisitorTest {
             Collections.singletonList(TSEncoding.RLE),
             Collections.singletonList(CompressionType.SNAPPY),
             Collections.singletonList("a1"),
-            Collections.singletonList(new HashMap<>()),
-            Collections.singletonList(new HashMap<>())),
+            Collections.singletonList(Collections.emptyMap()),
+            Collections.singletonList(Collections.emptyMap())),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitCreateAlignedTimeSeries(
                 new CreateAlignedTimeSeriesNode(
@@ -117,8 +117,8 @@ public class PipePlanPatternParseVisitorTest {
                     Arrays.asList(TSEncoding.RLE, TSEncoding.PLAIN),
                     Arrays.asList(CompressionType.SNAPPY, 
CompressionType.SNAPPY),
                     Arrays.asList("a1", "a2"),
-                    Arrays.asList(new HashMap<>(), new HashMap<>()),
-                    Arrays.asList(new HashMap<>(), new HashMap<>())),
+                    Arrays.asList(Collections.emptyMap(), 
Collections.emptyMap()),
+                    Arrays.asList(Collections.emptyMap(), 
Collections.emptyMap())),
                 fullPathPattern)
             .orElseThrow(AssertionError::new));
   }
@@ -132,10 +132,10 @@ public class PipePlanPatternParseVisitorTest {
             Collections.singletonList(TSDataType.FLOAT),
             Collections.singletonList(TSEncoding.RLE),
             Collections.singletonList(CompressionType.SNAPPY),
-            Collections.singletonList(new HashMap<>()),
+            Collections.singletonList(Collections.emptyMap()),
             Collections.singletonList("a1"),
-            Collections.singletonList(new HashMap<>()),
-            Collections.singletonList(new HashMap<>())),
+            Collections.singletonList(Collections.emptyMap()),
+            Collections.singletonList(Collections.emptyMap())),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitCreateMultiTimeSeries(
                 new CreateMultiTimeSeriesNode(
@@ -146,22 +146,17 @@ public class PipePlanPatternParseVisitorTest {
                     Arrays.asList(TSDataType.FLOAT, TSDataType.BOOLEAN),
                     Arrays.asList(TSEncoding.RLE, TSEncoding.PLAIN),
                     Arrays.asList(CompressionType.SNAPPY, 
CompressionType.SNAPPY),
-                    Arrays.asList(new HashMap<>(), new HashMap<>()),
+                    Arrays.asList(Collections.emptyMap(), 
Collections.emptyMap()),
                     Arrays.asList("a1", "a2"),
-                    Arrays.asList(new HashMap<>(), new HashMap<>()),
-                    Arrays.asList(new HashMap<>(), new HashMap<>())),
+                    Arrays.asList(Collections.emptyMap(), 
Collections.emptyMap()),
+                    Arrays.asList(Collections.emptyMap(), 
Collections.emptyMap())),
                 fullPathPattern)
             .orElseThrow(AssertionError::new));
   }
 
   @Test
   public void testAlterTimeSeries() throws IllegalPathException {
-    final Map<String, String> attributesMap =
-        new HashMap<String, String>() {
-          {
-            put("k1", "v1");
-          }
-        };
+    final Map<String, String> attributesMap = Collections.singletonMap("k1", 
"v1");
     final AlterTimeSeriesNode alterTimeSeriesNode =
         new AlterTimeSeriesNode(
             new PlanNodeId("2024-04-30-1"),
@@ -169,7 +164,7 @@ public class PipePlanPatternParseVisitorTest {
             AlterTimeSeriesStatement.AlterType.ADD_ATTRIBUTES,
             attributesMap,
             "",
-            new HashMap<>(),
+            Collections.emptyMap(),
             attributesMap,
             false);
     final AlterTimeSeriesNode alterTimeSeriesNodeToFilter =
@@ -179,7 +174,7 @@ public class PipePlanPatternParseVisitorTest {
             AlterTimeSeriesStatement.AlterType.ADD_ATTRIBUTES,
             attributesMap,
             "",
-            new HashMap<>(),
+            Collections.emptyMap(),
             attributesMap,
             false);
 
@@ -199,10 +194,10 @@ public class PipePlanPatternParseVisitorTest {
     final MeasurementGroup expectedMeasurementGroup = new MeasurementGroup();
     expectedMeasurementGroup.addMeasurement(
         "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
-    expectedMeasurementGroup.addProps(new HashMap<>());
+    expectedMeasurementGroup.addProps(Collections.emptyMap());
     expectedMeasurementGroup.addAlias("a1");
-    expectedMeasurementGroup.addTags(new HashMap<>());
-    expectedMeasurementGroup.addAttributes(new HashMap<>());
+    expectedMeasurementGroup.addTags(Collections.emptyMap());
+    expectedMeasurementGroup.addAttributes(Collections.emptyMap());
 
     final ByteBuffer byteBuffer = ByteBuffer.allocate(1000);
     expectedMeasurementGroup.serialize(byteBuffer);
@@ -212,10 +207,10 @@ public class PipePlanPatternParseVisitorTest {
 
     originalMeasurementGroup.addMeasurement(
         "s2", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
-    originalMeasurementGroup.addProps(new HashMap<>());
+    originalMeasurementGroup.addProps(Collections.emptyMap());
     originalMeasurementGroup.addAlias("a2");
-    originalMeasurementGroup.addTags(new HashMap<>());
-    originalMeasurementGroup.addAttributes(new HashMap<>());
+    originalMeasurementGroup.addTags(Collections.emptyMap());
+    originalMeasurementGroup.addAttributes(Collections.emptyMap());
 
     Assert.assertEquals(
         new InternalCreateTimeSeriesNode(
@@ -258,11 +253,7 @@ public class PipePlanPatternParseVisitorTest {
     Assert.assertEquals(
         new InternalBatchActivateTemplateNode(
             new PlanNodeId("2024-04-30-1"),
-            new HashMap<PartialPath, Pair<Integer, Integer>>() {
-              {
-                put(new PartialPath("root.db.device"), new Pair<>(1, 1));
-              }
-            }),
+            Collections.singletonMap(new PartialPath("root.db.device"), new 
Pair<>(1, 1))),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitInternalBatchActivateTemplate(
                 new InternalBatchActivateTemplateNode(
@@ -282,10 +273,10 @@ public class PipePlanPatternParseVisitorTest {
     final MeasurementGroup expectedMeasurementGroup = new MeasurementGroup();
     expectedMeasurementGroup.addMeasurement(
         "s1", TSDataType.FLOAT, TSEncoding.RLE, CompressionType.SNAPPY);
-    expectedMeasurementGroup.addProps(new HashMap<>());
+    expectedMeasurementGroup.addProps(Collections.emptyMap());
     expectedMeasurementGroup.addAlias("a1");
-    expectedMeasurementGroup.addTags(new HashMap<>());
-    expectedMeasurementGroup.addAttributes(new HashMap<>());
+    expectedMeasurementGroup.addTags(Collections.emptyMap());
+    expectedMeasurementGroup.addAttributes(Collections.emptyMap());
 
     final ByteBuffer byteBuffer = ByteBuffer.allocate(1000);
     expectedMeasurementGroup.serialize(byteBuffer);
@@ -295,19 +286,16 @@ public class PipePlanPatternParseVisitorTest {
 
     originalMeasurementGroup.addMeasurement(
         "s2", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY);
-    originalMeasurementGroup.addProps(new HashMap<>());
+    originalMeasurementGroup.addProps(Collections.emptyMap());
     originalMeasurementGroup.addAlias("a2");
-    originalMeasurementGroup.addTags(new HashMap<>());
-    originalMeasurementGroup.addAttributes(new HashMap<>());
+    originalMeasurementGroup.addTags(Collections.emptyMap());
+    originalMeasurementGroup.addAttributes(Collections.emptyMap());
 
     Assert.assertEquals(
         new InternalCreateMultiTimeSeriesNode(
             new PlanNodeId("2024-04-30-1"),
-            new HashMap<PartialPath, Pair<Boolean, MeasurementGroup>>() {
-              {
-                put(new PartialPath("root.db.device"), new Pair<>(false, 
expectedMeasurementGroup));
-              }
-            }),
+            Collections.singletonMap(
+                new PartialPath("root.db.device"), new Pair<>(false, 
expectedMeasurementGroup))),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitInternalCreateMultiTimeSeries(
                 new InternalCreateMultiTimeSeriesNode(
@@ -331,11 +319,7 @@ public class PipePlanPatternParseVisitorTest {
     Assert.assertEquals(
         new BatchActivateTemplateNode(
             new PlanNodeId("2024-04-30-1"),
-            new HashMap<PartialPath, Pair<Integer, Integer>>() {
-              {
-                put(new PartialPath("root.db.device"), new Pair<>(1, 1));
-              }
-            }),
+            Collections.singletonMap(new PartialPath("root.db.device"), new 
Pair<>(1, 1))),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitBatchActivateTemplate(
                 new BatchActivateTemplateNode(
@@ -355,11 +339,8 @@ public class PipePlanPatternParseVisitorTest {
     Assert.assertEquals(
         new CreateLogicalViewNode(
             new PlanNodeId("2024-04-30-1"),
-            new HashMap<PartialPath, ViewExpression>() {
-              {
-                put(new PartialPath("root.db.device.a1"), new 
TimeSeriesViewOperand("root.sg1.d1"));
-              }
-            }),
+            Collections.singletonMap(
+                new PartialPath("root.db.device.a1"), new 
TimeSeriesViewOperand("root.sg1.d1"))),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitCreateLogicalView(
                 new CreateLogicalViewNode(
@@ -383,11 +364,8 @@ public class PipePlanPatternParseVisitorTest {
     Assert.assertEquals(
         new AlterLogicalViewNode(
             new PlanNodeId("2024-04-30-1"),
-            new HashMap<PartialPath, ViewExpression>() {
-              {
-                put(new PartialPath("root.db.device.a1"), new 
TimeSeriesViewOperand("root.sg1.d1"));
-              }
-            }),
+            Collections.singletonMap(
+                new PartialPath("root.db.device.a1"), new 
TimeSeriesViewOperand("root.sg1.d1"))),
         IoTDBSchemaRegionExtractor.PATTERN_PARSE_VISITOR
             .visitAlterLogicalView(
                 new AlterLogicalViewNode(


Reply via email to