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

shuwenwei pushed a commit to branch table_disk_usage_statistics
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit ccfb4ece63b6ff86b317db0c78b345636cd240d0
Merge: 098392ddd24 a7f1527d04c
Author: shuwenwei <[email protected]>
AuthorDate: Mon Nov 17 12:15:10 2025 +0800

    Merge branch 'iotdb_master' into table_disk_usage_statistics

 .github/workflows/cluster-it-1c1d1a.yml            |   2 +-
 integration-test/pom.xml                           |   1 +
 integration-test/src/assembly/mpp-test.xml         |   2 +-
 .../it/env/cluster/config/MppCommonConfig.java     |   4 +-
 .../env/cluster/config/MppSharedCommonConfig.java  |   6 +-
 .../iotdb/it/env/cluster/node/AINodeWrapper.java   |  25 +-
 .../apache/iotdb/itbase/constant/TestConstant.java |  14 +-
 .../org/apache/iotdb/itbase/env/CommonConfig.java  |   2 +-
 .../ainode/it/AINodeConcurrentInferenceIT.java     |  62 +--
 .../confignode/it/IoTDBConfigNodeSnapshotIT.java   |  31 +-
 .../it/database/IoTDBDatabaseSetAndDeleteIT.java   |  66 +--
 .../it/load/IoTDBConfigNodeSwitchLeaderIT.java     |   2 +-
 .../partition/IoTDBAutoRegionGroupExtensionIT.java |   8 +-
 .../IoTDBCustomRegionGroupExtensionIT.java         |   2 +-
 .../it/partition/IoTDBPartitionCreationIT.java     |   4 +-
 .../it/partition/IoTDBPartitionDurableIT.java      |   4 +-
 .../it/partition/IoTDBPartitionGetterIT.java       |  41 +-
 .../commit/IoTDBRegionReconstructForIoTV1IT.java   |   1 +
 .../confignode/it/utils/ConfigNodeTestUtils.java   |  16 +-
 .../org/apache/iotdb/db/it/IoTDBDeletionIT.java    |  21 +
 .../org/apache/iotdb/db/it/IoTDBExampleIT.java     |   4 +-
 .../java/org/apache/iotdb/db/it/IoTDBFilterIT.java |  14 +
 .../org/apache/iotdb/db/it/IoTDBFlushQueryIT.java  |   5 +-
 .../iotdb/db/it/IoTDBLoadTsFileWithModIT.java      |  60 +-
 .../org/apache/iotdb/db/it/IoTDBRestServiceIT.java |   8 +-
 .../iotdb/db/it/IoTDBSetConfigurationIT.java       |   2 +-
 .../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java |   2 +-
 .../db/it/IoTDBSyntaxConventionIdentifierIT.java   |   2 +-
 .../iotdb/db/it/auth/IoTDBSystemPermissionIT.java  |   3 +-
 .../it/auth/IoTDBSystemPermissionRelationalIT.java |   3 +-
 .../apache/iotdb/db/it/path/IoTDBQuotedPathIT.java |   4 +-
 .../it/schema/IoTDBAlterEncodingCompressorIT.java  | 209 +++++++
 .../db/it/schema/IoTDBAutoCreateSchemaIT.java      |  14 +-
 .../db/it/schema/IoTDBDeactivateTemplateIT.java    |   2 +-
 .../db/it/schema/IoTDBDeleteTimeSeriesIT.java      |   2 +-
 .../iotdb/db/it/schema/IoTDBMetadataFetchIT.java   |   2 +-
 .../org/apache/iotdb/db/it/schema/IoTDBTagIT.java  |   2 +-
 .../auto/basic/IoTDBTreePatternFormatIT.java       | 616 ++++++++++++---------
 .../treemodel/manual/IoTDBPipeInclusionIT.java     |  89 ++-
 .../IoTDBPipeTsFileDecompositionWithModsIT.java    |  14 +-
 .../relational/it/db/it/IoTDBDeletionTableIT.java  | 374 +++++++++++++
 .../it/query/old/IoTDBSimpleQueryTableIT.java      |   2 +-
 .../it/query/recent/IoTDBIntersectTableIT.java     | 153 +++++
 .../it/query/recent/IoTDBMaintainAuthIT.java       |   8 +-
 .../it/query/recent/IoTDBTableAggregationIT.java   |  24 +
 .../iotdb/session/it/IoTDBSessionSimpleIT.java     |  22 +-
 .../session/it/IoTDBSessionSyntaxConventionIT.java |   6 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |  19 +-
 .../src/main/java/org/apache/iotdb/cli/Cli.java    |   6 +-
 .../org/apache/iotdb/tool/common/Constants.java    |  12 +
 .../org/apache/iotdb/tool/common/OptionsUtil.java  |  30 +
 .../apache/iotdb/tool/data/AbstractDataTool.java   |  41 +-
 .../apache/iotdb/tool/data/ExportDataTable.java    |  10 +-
 .../org/apache/iotdb/tool/data/ExportDataTree.java |  29 +-
 .../apache/iotdb/tool/data/ImportDataTable.java    |  10 +-
 .../org/apache/iotdb/tool/data/ImportDataTree.java |  10 +-
 .../iotdb/tool/schema/AbstractSchemaTool.java      |  43 +-
 .../iotdb/tool/schema/ExportSchemaTable.java       |  10 +-
 .../apache/iotdb/tool/schema/ExportSchemaTree.java |  12 +-
 .../iotdb/tool/schema/ImportSchemaTable.java       |  10 +-
 .../apache/iotdb/tool/schema/ImportSchemaTree.java |  10 +-
 .../apache/iotdb/jdbc/IoTDBPreparedStatement.java  |  17 +-
 .../iotdb/jdbc/IoTDBPreparedStatementTest.java     | 154 +++++-
 .../iotdb/rpc/NettyTNonblockingTransport.java      |   9 +-
 .../rpc/TCompressedElasticFramedTransport.java     |   8 +-
 .../apache/iotdb/rpc/TElasticFramedTransport.java  | 126 +++--
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |   1 +
 iotdb-core/ainode/.gitignore                       |   6 +-
 iotdb-core/ainode/ainode.spec                      | 199 +++++++
 iotdb-core/ainode/ainode.xml                       |  17 +-
 iotdb-core/ainode/build_binary.py                  | 596 ++++++++++++++++++++
 iotdb-core/ainode/iotdb/ainode/core/ai_node.py     |  10 +-
 iotdb-core/ainode/iotdb/ainode/core/config.py      |  28 +-
 iotdb-core/ainode/iotdb/ainode/core/constant.py    |  18 +-
 .../iotdb/ainode/core/inference/pool_controller.py |  49 +-
 .../pool_scheduler/basic_pool_scheduler.py         |   7 +-
 iotdb-core/ainode/iotdb/ainode/core/log.py         |   4 +-
 .../iotdb/ainode/core/manager/inference_manager.py |   4 +-
 iotdb-core/ainode/iotdb/ainode/core/rpc/handler.py |   2 +-
 iotdb-core/ainode/iotdb/ainode/core/rpc/service.py |   1 +
 iotdb-core/ainode/iotdb/ainode/core/script.py      |  80 +--
 iotdb-core/ainode/poetry.lock                      | 111 +++-
 iotdb-core/ainode/pom.xml                          |  92 +--
 iotdb-core/ainode/pyproject.toml                   |  29 +-
 .../ainode/resources/syncPythonVersion.groovy      |  33 --
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |   6 +-
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |   8 +
 .../client/async/CnToDnAsyncRequestType.java       |   2 +
 .../CnToDnInternalServiceAsyncRequestManager.java  |   6 +
 .../rpc/DataNodeAsyncRequestRPCHandler.java        |   1 +
 .../confignode/conf/SystemPropertiesUtils.java     |   2 +
 .../consensus/request/ConfigPhysicalPlan.java      |   4 +
 .../consensus/request/ConfigPhysicalPlanType.java  |   1 +
 .../request/ConfigPhysicalPlanVisitor.java         |   8 +
 .../write/database/PreDeleteDatabasePlan.java      |  22 +-
 .../payload/PipeAlterEncodingCompressorPlan.java   | 130 +++++
 .../iotdb/confignode/manager/ConfigManager.java    |  46 +-
 .../apache/iotdb/confignode/manager/IManager.java  |  19 +-
 .../iotdb/confignode/manager/ProcedureManager.java |  68 +++
 .../iotdb/confignode/manager/load/LoadManager.java |   2 +-
 .../manager/load/balancer/RegionBalancer.java      |   2 +-
 .../receiver/protocol/IoTDBConfigNodeReceiver.java |  69 ++-
 .../PipeConfigPhysicalPlanTSStatusVisitor.java     |  11 +
 .../client/IoTDBConfigNodeSyncClientManager.java   |   6 +-
 .../sink/protocol/IoTDBConfigRegionAirGapSink.java |   2 +
 .../pipe/sink/protocol/IoTDBConfigRegionSink.java  |   6 +-
 .../pipe/source/ConfigRegionListeningFilter.java   |   3 +
 .../pipe/source/IoTDBConfigRegionSource.java       |   6 +-
 ...eConfigPhysicalPlanTreePatternParseVisitor.java |  69 ++-
 .../manager/schema/ClusterSchemaManager.java       |  26 +-
 .../confignode/persistence/auth/AuthorInfo.java    |  83 ++-
 .../persistence/auth/AuthorPlanExecutor.java       |   7 +-
 .../persistence/executor/ConfigPlanExecutor.java   |   1 +
 .../persistence/partition/PartitionInfo.java       |   2 +-
 .../schema/AlterEncodingCompressorProcedure.java   | 337 +++++++++++
 .../impl/schema/DataNodeTSStatusTaskExecutor.java  |  74 +++
 .../impl/schema/DeactivateTemplateProcedure.java   |  26 +-
 .../impl/schema/DeleteDatabaseProcedure.java       |  28 +-
 .../impl/schema/DeleteLogicalViewProcedure.java    |  26 +-
 .../impl/schema/DeleteTimeSeriesProcedure.java     |  53 +-
 .../table/AbstractAlterOrDropTableProcedure.java   |  29 +-
 ...tate.java => AlterEncodingCompressorState.java} |   9 +-
 ...ageGroupState.java => DeleteDatabaseState.java} |   2 +-
 .../procedure/store/ProcedureFactory.java          |   9 +
 .../confignode/procedure/store/ProcedureType.java  |   2 +
 .../thrift/ConfigNodeRPCServiceProcessor.java      |   6 +
 ...figPhysicalPlanTreePatternParseVisitorTest.java |   7 +-
 .../pipe/receiver/PipeEnrichedProcedureTest.java   |  28 +
 .../AlterEncodingCompressorProcedureTest.java      |  62 +++
 .../iotdb/consensus/ratis/RatisConsensus.java      |   1 +
 .../assembly/resources/conf/logback-datanode.xml   |  15 -
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  25 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  17 +-
 .../org/apache/iotdb/db/conf/IoTDBStartCheck.java  |   4 +
 .../schemaregion/SchemaExecutionVisitor.java       |  15 +
 .../db/pipe/agent/task/PipeDataNodeTaskAgent.java  |   4 +-
 .../agent/task/connection/PipeEventCollector.java  |   4 +-
 .../tsfile/parser/TsFileInsertionEventParser.java  |  68 ++-
 .../parser/TsFileInsertionEventParserProvider.java |   6 +-
 .../query/TsFileInsertionEventQueryParser.java     |  14 +-
 .../scan/TsFileInsertionEventScanParser.java       |  12 +-
 .../table/TsFileInsertionEventTableParser.java     |  15 +-
 .../overview/PipeTsFileToTabletsMetrics.java       |  67 +++
 .../protocol/thrift/IoTDBDataNodeReceiver.java     |  27 +-
 .../visitor/PipeStatementTSStatusVisitor.java      |  42 +-
 .../PipeStatementTreePatternParseVisitor.java      |  22 +-
 .../client/IoTDBDataNodeAsyncClientManager.java    |   9 +-
 .../client/IoTDBDataNodeSyncClientManager.java     |   6 +-
 .../protocol/airgap/IoTDBDataNodeAirGapSink.java   |   2 +
 .../thrift/async/IoTDBDataRegionAsyncSink.java     |  24 +-
 .../thrift/sync/IoTDBDataNodeSyncSink.java         |   6 +-
 .../source/dataregion/IoTDBDataRegionSource.java   |   6 +-
 ...istoricalDataRegionTsFileAndDeletionSource.java |  18 +-
 .../realtime/assigner/DisruptorQueue.java          |   4 +-
 .../PipePlanTreePatternParseVisitor.java           |  41 +-
 .../iotdb/db/protocol/client/ConfigNodeClient.java |   7 +
 .../impl/DataNodeInternalRPCServiceImpl.java       |  95 +++-
 .../execution/executor/RegionReadExecutor.java     |  10 +-
 .../execution/operator/source/SeriesScanUtil.java  |   5 +
 .../queryengine/plan/analyze/AnalyzeVisitor.java   |   2 +-
 .../queryengine/plan/analyze/PredicateUtils.java   |  16 +-
 .../schema/dualkeycache/impl/DualKeyCacheImpl.java |   6 +-
 .../plan/analyze/load/LoadTsFileAnalyzer.java      |  13 +-
 .../plan/execution/config/ConfigExecution.java     |  16 +-
 .../execution/config/TableConfigTaskVisitor.java   |   1 -
 .../execution/config/TreeConfigTaskVisitor.java    |  17 +-
 .../config/executor/ClusterConfigTaskExecutor.java |  62 +++
 .../config/executor/IConfigTaskExecutor.java       |   4 +
 .../metadata/AlterEncodingCompressorTask.java      |  47 ++
 .../db/queryengine/plan/parser/ASTVisitor.java     | 101 +++-
 .../plan/planner/plan/node/PlanGraphPrinter.java   |  10 +
 .../plan/planner/plan/node/PlanNodeType.java       |  14 +-
 .../plan/planner/plan/node/PlanVisitor.java        |  10 +
 .../write/AlterEncodingCompressorNode.java         | 146 +++++
 .../metadata/fetcher/TableDeviceSchemaFetcher.java |   6 +-
 .../plan/relational/planner/RelationPlanner.java   |  24 +-
 .../distribute/TableDistributedPlanGenerator.java  |   2 +-
 .../iterative/rule/ImplementIntersectAll.java      |  95 ++++
 .../rule/ImplementIntersectDistinctAsUnion.java    |  88 +++
 .../planner/iterative/rule/MergeUnion.java         |  48 ++
 .../iterative/rule/PruneDistinctAggregation.java   |   9 +
 .../rule/PushDownOffsetIntoTableScan.java          |  25 +-
 .../iterative/rule/PushLimitThroughUnion.java      | 107 ++++
 .../iterative/rule/PushProjectionThroughUnion.java | 111 ++++
 .../iterative/rule/PushTopKThroughUnion.java       | 102 ++++
 .../iterative/rule/RemoveEmptyUnionBranches.java   | 113 ++++
 .../planner/iterative/rule/SetOperationMerge.java  | 144 +++++
 .../iterative/rule/SetOperationNodeTranslator.java | 355 ++++++++++++
 .../planner/node/AggregationTableScanNode.java     |  10 +
 .../relational/planner/node/IntersectNode.java     |  98 ++++
 .../plan/relational/planner/node/Patterns.java     |  22 +-
 .../optimizations/LogicalOptimizeFactory.java      |  52 +-
 .../PushLimitOffsetIntoTableScan.java              |   2 +-
 .../optimizations/UnaliasSymbolReferences.java     |  31 ++
 .../security/TreeAccessCheckVisitor.java           |  63 ++-
 .../db/queryengine/plan/statement/Statement.java   |   4 +
 .../queryengine/plan/statement/StatementType.java  |   1 +
 .../plan/statement/StatementVisitor.java           |  12 +-
 .../crud/InsertMultiTabletsStatement.java          |   8 +
 .../plan/statement/crud/InsertRowStatement.java    |  24 +
 .../plan/statement/crud/InsertRowsStatement.java   |   5 +
 .../plan/statement/crud/InsertTabletStatement.java |  17 +
 .../plan/statement/crud/LoadTsFileStatement.java   |  16 +-
 .../metadata/AlterEncodingCompressorStatement.java | 126 +++++
 .../statement/metadata/CountDatabaseStatement.java |   2 +-
 .../metadata/DeleteDatabaseStatement.java          |   2 +-
 .../statement/metadata/ShowDatabaseStatement.java  |   2 +-
 .../dag/input/QueryDataSetInputLayer.java          |  10 +-
 .../schemaengine/schemaregion/ISchemaRegion.java   |   8 +-
 .../schemaregion/SchemaRegionPlanType.java         |   2 +
 .../schemaregion/SchemaRegionPlanVisitor.java      |   6 +
 .../update/DeviceAttributeCacheUpdater.java        |   8 +-
 .../schemaregion/impl/SchemaRegionMemoryImpl.java  |  43 +-
 .../schemaregion/impl/SchemaRegionPBTreeImpl.java  |  14 +-
 .../visitor/SchemaRegionPlanDeserializer.java      |   7 +
 .../visitor/SchemaRegionPlanSerializer.java        |   8 +
 .../mtree/impl/mem/MTreeBelowSGMemoryImpl.java     | 111 ++--
 .../schemaengine/schemaregion/utils/MetaUtils.java |   6 +-
 .../write/req/SchemaRegionWritePlanFactory.java    |   3 +
 .../db/schemaengine/table/DataNodeTableCache.java  |  17 +
 .../java/org/apache/iotdb/db/service/DataNode.java |   4 +
 .../db/storageengine/dataregion/DataRegion.java    | 121 +++-
 .../execute/task/AbstractCompactionTask.java       |   3 +-
 .../execute/task/InnerSpaceCompactionTask.java     |  14 +-
 .../dataregion/read/QueryDataSource.java           |   5 +
 .../load/active/ActiveLoadDirScanner.java          |  26 +-
 .../load/active/ActiveLoadPathHelper.java          | 282 ++++++++++
 .../load/active/ActiveLoadPendingQueue.java        |  17 +-
 .../load/active/ActiveLoadTsFileLoader.java        |  36 +-
 .../storageengine/load/active/ActiveLoadUtil.java  |  39 +-
 .../load/config/LoadTsFileConfigurator.java        |  18 +
 .../db/pipe/pattern/TreePatternCoverageTest.java   | 133 +++++
 .../PipeStatementTreePatternParseVisitorTest.java  | 202 ++++---
 .../PipePlanTreePatternParseVisitorTest.java       |   7 +-
 .../execution/operator/TransformOperatorTest.java  | 142 +++++
 .../plan/relational/analyzer/IntersectTest.java    | 121 ++++
 .../relational/analyzer/UnionOptimizeTest.java     | 158 ++++++
 .../compaction/utils/CompactionTestFileWriter.java |   6 +-
 .../conf/iotdb-system.properties.template          |   4 +-
 .../apache/iotdb/commons/client/ThriftClient.java  |   3 +-
 .../apache/iotdb/commons/conf/CommonConfig.java    | 127 +++--
 .../iotdb/commons/conf/ConfigurationFileUtils.java |  75 ++-
 .../apache/iotdb/commons/conf/IoTDBConstant.java   |   1 -
 .../iotdb/commons/exception/MetadataException.java |   2 +-
 .../pipe/PipeRuntimeSinkCriticalException.java     |   2 +-
 ...RuntimeSinkRetryTimesConfigurableException.java |   6 +
 .../commons/file/SystemPropertiesHandler.java      |   2 +
 .../apache/iotdb/commons/path/PathPatternNode.java |   7 +
 .../apache/iotdb/commons/path/PathPatternTree.java |  13 +-
 .../task/progress/interval/PipeCommitInterval.java |   4 +-
 .../iotdb/commons/pipe/config/PipeConfig.java      |  51 +-
 .../iotdb/commons/pipe/config/PipeDescriptor.java  |  31 +-
 .../pipe/config/constant/PipeSourceConstant.java   |   5 +
 .../datastructure/pattern/IoTDBTreePattern.java    |  68 ++-
 .../pattern/IoTDBTreePatternOperations.java        |  52 ++
 .../datastructure/pattern/PrefixTreePattern.java   |  70 ++-
 .../datastructure/pattern/SingleTreePattern.java   |  59 --
 .../pipe/datastructure/pattern/TreePattern.java    | 369 ++++++++++--
 .../pattern/UnionIoTDBTreePattern.java             | 115 ++--
 .../datastructure/pattern/UnionTreePattern.java    |  17 +-
 .../pattern/WithExclusionIoTDBTreePattern.java     | 213 +++++++
 .../pattern/WithExclusionTreePattern.java          | 119 ++++
 .../commons/pipe/receiver/IoTDBFileReceiver.java   |   6 +
 .../pipe/receiver/PipeReceiverStatusHandler.java   | 152 ++---
 .../pipe/sink/client/IoTDBClientManager.java       |   5 +-
 .../pipe/sink/client/IoTDBSyncClientManager.java   |   9 +-
 .../common/PipeTransferHandshakeConstant.java      |   1 +
 .../commons/pipe/sink/protocol/IoTDBSink.java      |   3 +-
 .../pipe/sink/protocol/IoTDBSslSyncSink.java       |   6 +-
 .../pipe/source/IoTDBNonDataRegionSource.java      |  14 +-
 .../schema/table/NonCommittableTsTable.java}       |  31 +-
 .../apache/iotdb/commons/schema/table/TsTable.java |  24 +-
 .../service/AbstractThriftServiceThread.java       |  15 +-
 .../iotdb/commons/service/metric/enums/Metric.java |   3 +
 .../apache/iotdb/commons/utils/SerializeUtils.java |  18 +
 .../pipe/datastructure/PipeCommitQueueTest.java    |   2 +
 .../db/relational/grammar/sql/RelationalSql.g4     |   5 +-
 .../src/main/thrift/confignode.thrift              |  12 +
 .../src/main/thrift/datanode.thrift                |  14 +
 library-udf/pom.xml                                |   2 -
 pom.xml                                            |  15 +-
 scripts/conf/ainode-env.sh                         | 138 -----
 scripts/conf/windows/ainode-env.bat                | 129 -----
 scripts/sbin/start-ainode.sh                       |  56 +-
 scripts/sbin/windows/start-ainode.bat              |  62 +--
 285 files changed, 9292 insertions(+), 2333 deletions(-)

diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
index 6b5382b9836,1100793ca88..bdb4c4fcd6c
--- 
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
@@@ -263,8 -263,7 +265,9 @@@ public enum PlanNodeType 
    CONTINUOUS_SAME_SEARCH_INDEX_SEPARATOR((short) 97),
  
    LAST_QUERY_SCAN((short) 98),
-   SHOW_DISK_USAGE((short) 99),
-   TREE_COLLECT((short) 100),
+   ALTER_ENCODING_COMPRESSOR((short) 99),
++  SHOW_DISK_USAGE((short) 100),
++  TREE_COLLECT((short) 101),
  
    CREATE_OR_UPDATE_TABLE_DEVICE((short) 902),
    TABLE_DEVICE_QUERY_SCAN((short) 903),
@@@ -592,9 -592,7 +596,11 @@@
        case 98:
          return LastQueryScanNode.deserialize(buffer);
        case 99:
-         return ShowDiskUsageNode.deserialize(buffer);
+         return AlterEncodingCompressorNode.deserialize(buffer);
 +      case 100:
++        return ShowDiskUsageNode.deserialize(buffer);
++      case 101:
 +        return CollectNode.deserialize(buffer);
        case 902:
          return CreateOrUpdateTableDeviceNode.deserialize(buffer);
        case 903:
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PushDownOffsetIntoTableScan.java
index 03bdc9d94ba,77143f90374..67b50ab31df
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PushDownOffsetIntoTableScan.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PushDownOffsetIntoTableScan.java
@@@ -20,7 -20,8 +20,9 @@@
  package 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule;
  
  import org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.Rule;
+ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.AggregationTableScanNode;
  import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.DeviceTableScanNode;
++import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.InformationSchemaTableScanNode;
  import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OffsetNode;
  import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
  import org.apache.iotdb.db.queryengine.plan.relational.utils.matching.Capture;
@@@ -53,16 -54,18 +55,19 @@@ public class PushDownOffsetIntoTableSca
    @Override
    public Result apply(OffsetNode parent, Captures captures, Context context) {
      TableScanNode tableScanNode = captures.get(CHILD);
-     if (tableScanNode instanceof DeviceTableScanNode
-         && ((DeviceTableScanNode) tableScanNode).isPushLimitToEachDevice()) {
-       return Result.empty();
 -    if ((tableScanNode instanceof DeviceTableScanNode
 -            && !(tableScanNode instanceof AggregationTableScanNode))
 -        && !((DeviceTableScanNode) tableScanNode).isPushLimitToEachDevice()) {
++    if (tableScanNode instanceof InformationSchemaTableScanNode
++        || ((tableScanNode instanceof DeviceTableScanNode
++                && !(tableScanNode instanceof AggregationTableScanNode))
++            && !((DeviceTableScanNode) 
tableScanNode).isPushLimitToEachDevice())) {
+       tableScanNode.setPushDownOffset(parent.getCount());
+       // consider case that there is no limit
+       tableScanNode.setPushDownLimit(
+           tableScanNode.getPushDownLimit() == 0
+               ? 0
+               : tableScanNode.getPushDownLimit() - parent.getCount());
+       return Result.ofPlanNode(tableScanNode);
      }
-     tableScanNode.setPushDownOffset(parent.getCount());
-     // consider case that there is no limit
-     tableScanNode.setPushDownLimit(
-         tableScanNode.getPushDownLimit() == 0
-             ? 0
-             : tableScanNode.getPushDownLimit() - parent.getCount());
-     return Result.ofPlanNode(tableScanNode);
+ 
+     return Result.empty();
    }
  }
diff --cc 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
index 70daf444bf2,2bd9b778aec..927b05775b2
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
@@@ -52,9 -50,9 +52,9 @@@ import java.util.Set
  import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushPredicateIntoTableScan.containsDiffFunction;
  
  /**
-  * <b>Optimization phase:</b> Distributed plan planning.
+  * <b>Optimization phase:</b> Logical plan planning.
   *
 - * <p>The LIMIT OFFSET condition can be pushed down to the 
DeviceTableScanNode, when the following
 + * <p>The LIMIT OFFSET condition can be pushed down to the TableScanNode, 
when the following
   * conditions are met:
   * <li>Time series query (not aggregation query).
   * <li>The query expressions are all scalar expression.

Reply via email to