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

zhihao pushed a commit to branch perf/szh/change_point_in_window
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit ad1e94f63d37301b648993f5626be84d9a803132
Author: Sh-Zh-7 <[email protected]>
AuthorDate: Tue Mar 3 15:54:29 2026 +0800

    MVN spotless apply.
---
 .../plan/planner/TableOperatorGenerator.java       |  4 +--
 .../plan/planner/plan/node/PlanNodeType.java       |  2 +-
 .../plan/planner/plan/node/PlanVisitor.java        |  2 +-
 .../distribute/TableDistributedPlanGenerator.java  |  2 +-
 .../ReplaceFilterWindowLeadWithChangePoint.java    |  7 ++--
 .../relational/planner/node/ChangePointNode.java   |  1 -
 .../operator/ChangePointOperatorTest.java          | 39 ++++++++--------------
 .../planner/ChangePointOptimizationTest.java       |  2 --
 .../planner/assertions/PlanMatchPattern.java       |  2 +-
 9 files changed, 22 insertions(+), 39 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
index cb125831cc4..3dde45c5c59 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
@@ -56,6 +56,7 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.process.MappingCollect
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.OffsetOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.PatternRecognitionOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.PreviousFillWithGroupOperator;
+import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableChangePointOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableFillOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableIntoOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableLinearFillOperator;
@@ -101,7 +102,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.process.rowpattern.exp
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.rowpattern.matcher.IrRowPatternToProgramRewriter;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.rowpattern.matcher.Matcher;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.rowpattern.matcher.Program;
-import 
org.apache.iotdb.db.queryengine.execution.operator.process.TableChangePointOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.window.RowNumberOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.window.TableWindowOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.window.TopKRankingOperator;
@@ -187,6 +187,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationN
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AssignUniqueId;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CteScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
@@ -209,7 +210,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PatternRecognitionNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PreviousFillNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.RowNumberNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.SemiJoinNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
index d56ae531580..7b81db80e0f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
@@ -119,6 +119,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalIn
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalInsertTabletNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AssignUniqueId;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.EnforceSingleRowNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExceptNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.GapFillNode;
@@ -129,7 +130,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.LinearFillNo
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.MarkDistinctNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PatternRecognitionNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PreviousFillNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.RowNumberNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.SemiJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableFunctionNode;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
index 944824f7f91..c51e263b3a1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
@@ -123,6 +123,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalIn
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalInsertTabletNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.GroupReference;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CteScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.ExceptNode;
@@ -134,7 +135,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.LinearFillNo
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.MarkDistinctNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PatternRecognitionNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PreviousFillNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.RowNumberNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.SemiJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableFunctionNode;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
index bff078a811f..253dd6b1fab 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java
@@ -58,6 +58,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationN
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AssignUniqueId;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.EnforceSingleRowNode;
@@ -76,7 +77,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OffsetNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.PatternRecognitionNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.RowNumberNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.SemiJoinNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/ReplaceFilterWindowLeadWithChangePoint.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/ReplaceFilterWindowLeadWithChangePoint.java
index abe49a626e0..3f88c588fee 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/ReplaceFilterWindowLeadWithChangePoint.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/ReplaceFilterWindowLeadWithChangePoint.java
@@ -123,9 +123,7 @@ public class ReplaceFilterWindowLeadWithChangePoint 
implements Rule<FilterNode>
       }
       Expression offsetExpr = arguments.get(1);
       if (offsetExpr instanceof Literal) {
-        Object val =
-            ((Literal) offsetExpr)
-                .getTsValue();
+        Object val = ((Literal) offsetExpr).getTsValue();
         return val instanceof Number && ((Number) val).longValue() == 1;
       }
       return false;
@@ -155,8 +153,7 @@ public class ReplaceFilterWindowLeadWithChangePoint 
implements Rule<FilterNode>
     Expression first = terms.get(0);
     Expression second = terms.get(1);
 
-    return (isNotEqualComparison(first, measurementName, nextName)
-            && isNullCheck(second, nextName))
+    return (isNotEqualComparison(first, measurementName, nextName) && 
isNullCheck(second, nextName))
         || (isNullCheck(first, nextName)
             && isNotEqualComparison(second, measurementName, nextName));
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ChangePointNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ChangePointNode.java
index 02b567c8434..18e0d406524 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ChangePointNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ChangePointNode.java
@@ -27,7 +27,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleChil
 import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
 
 import com.google.common.collect.ImmutableList;
-import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/ChangePointOperatorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/ChangePointOperatorTest.java
index a81fa60cc8a..abb61b245dc 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/ChangePointOperatorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/ChangePointOperatorTest.java
@@ -230,8 +230,8 @@ public class ChangePointOperatorTest {
   }
 
   /**
-   * Alternating pattern: each point differs from the previous one (1, 2, 1, 
2, ...). All points
-   * are change points.
+   * Alternating pattern: each point differs from the previous one (1, 2, 1, 
2, ...). All points are
+   * change points.
    */
   @Test
   public void testAlternatingValues() throws Exception {
@@ -252,9 +252,7 @@ public class ChangePointOperatorTest {
     operator.close();
   }
 
-  /**
-   * A single data point. The operator should emit exactly one change point.
-   */
+  /** A single data point. The operator should emit exactly one change point. 
*/
   @Test
   public void testSinglePoint() throws Exception {
     prepareSeqFile(0, new int[] {99});
@@ -326,8 +324,8 @@ public class ChangePointOperatorTest {
   }
 
   /**
-   * Tests that statistics and non-statistics paths yield identical results 
for mixed data where some
-   * pages are uniform and others are not.
+   * Tests that statistics and non-statistics paths yield identical results 
for mixed data where
+   * some pages are uniform and others are not.
    *
    * <p>Page 0 (0-19): all 5 (uniform), Page 1 (20-39): values 5,6,5,6,... 
(non-uniform), Page 2
    * (40-59): all 6 (uniform)
@@ -375,9 +373,7 @@ public class ChangePointOperatorTest {
           resultNoStats.get(i)[0],
           resultWithStats.get(i)[0]);
       assertEquals(
-          "Mismatch at index " + i + " value",
-          resultNoStats.get(i)[1],
-          resultWithStats.get(i)[1]);
+          "Mismatch at index " + i + " value", resultNoStats.get(i)[1], 
resultWithStats.get(i)[1]);
     }
   }
 
@@ -437,9 +433,7 @@ public class ChangePointOperatorTest {
     assertEquals(10, result.get(0)[1]);
   }
 
-  /**
-   * Verifies isFinished() returns true after all data is consumed.
-   */
+  /** Verifies isFinished() returns true after all data is consumed. */
   @Test
   public void testIsFinished() throws Exception {
     prepareSeqFile(0, new int[] {1, 1, 2, 2, 3});
@@ -472,8 +466,7 @@ public class ChangePointOperatorTest {
         createFragmentInstanceContext(instanceId, stateMachine);
     DriverContext driverContext = new DriverContext(fragmentInstanceContext, 
0);
     PlanNodeId planNodeId = new PlanNodeId("1");
-    driverContext.addOperatorContext(
-        1, planNodeId, ChangePointOperator.class.getSimpleName());
+    driverContext.addOperatorContext(1, planNodeId, 
ChangePointOperator.class.getSimpleName());
 
     SeriesScanOptions.Builder scanOptionsBuilder = new 
SeriesScanOptions.Builder();
     scanOptionsBuilder.withAllSensors(allSensors);
@@ -487,16 +480,13 @@ public class ChangePointOperatorTest {
             scanOptionsBuilder.build(),
             canUseStatistics);
 
-    operator.initQueryDataSource(
-        new QueryDataSource(seqResources, unSeqResources));
+    operator.initQueryDataSource(new QueryDataSource(seqResources, 
unSeqResources));
     operator.getOperatorContext().setMaxRunTime(new Duration(500, 
TimeUnit.MILLISECONDS));
 
     return operator;
   }
 
-  /**
-   * Collects all (timestamp, int_value) pairs from the operator output.
-   */
+  /** Collects all (timestamp, int_value) pairs from the operator output. */
   private List<long[]> collectResults(ChangePointOperator operator) throws 
Exception {
     List<long[]> results = new ArrayList<>();
     while (operator.hasNext()) {
@@ -528,7 +518,8 @@ public class ChangePointOperatorTest {
     resource.setVersion(fileIndex);
 
     IMeasurementSchema schema =
-        new MeasurementSchema(MEASUREMENT, TSDataType.INT32, TSEncoding.PLAIN, 
CompressionType.UNCOMPRESSED);
+        new MeasurementSchema(
+            MEASUREMENT, TSDataType.INT32, TSEncoding.PLAIN, 
CompressionType.UNCOMPRESSED);
 
     if (!file.getParentFile().exists()) {
       Assert.assertTrue(file.getParentFile().mkdirs());
@@ -545,10 +536,8 @@ public class ChangePointOperatorTest {
       record.addTuple(new IntDataPoint(MEASUREMENT, values[i]));
       writer.writeRecord(record);
 
-      resource.updateStartTime(
-          IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_ID), timestamp);
-      resource.updateEndTime(
-          IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_ID), timestamp);
+      
resource.updateStartTime(IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_ID), 
timestamp);
+      
resource.updateEndTime(IDeviceID.Factory.DEFAULT_FACTORY.create(DEVICE_ID), 
timestamp);
 
       if ((i + 1) % FLUSH_INTERVAL == 0) {
         writer.flush();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ChangePointOptimizationTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ChangePointOptimizationTest.java
index 66312bb6a19..b52790bdfd5 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ChangePointOptimizationTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ChangePointOptimizationTest.java
@@ -31,8 +31,6 @@ import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.filter;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.group;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.output;
-import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.project;
-import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.sort;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.tableScan;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.assertions.PlanMatchPattern.window;
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/PlanMatchPattern.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/PlanMatchPattern.java
index e30f1967cf9..c37f227f7ef 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/PlanMatchPattern.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/assertions/PlanMatchPattern.java
@@ -30,6 +30,7 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationN
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTreeDeviceViewScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AssignUniqueId;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CteScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
@@ -46,7 +47,6 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.MergeSortNod
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OffsetNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ChangePointNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.RowNumberNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.SemiJoinNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;

Reply via email to