You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by we...@apache.org on 2026/02/05 07:51:26 UTC
(iotdb) 01/01: FE
This is an automated email from the ASF dual-hosted git repository.
weihao pushed a commit to branch addQueryDebug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 134696c0bdfef7d39a7d0af5609e166d22bdbc07
Author: Weihao Li <18...@163.com>
AuthorDate: Thu Feb 5 15:51:12 2026 +0800
FE
Signed-off-by: Weihao Li <18...@163.com>
---
.../legacy/IoTDBLegacyPipeReceiverAgent.java | 1 +
.../protocol/legacy/loader/DeletionLoader.java | 3 +-
.../protocol/legacy/loader/TsFileLoader.java | 3 +-
.../protocol/thrift/IoTDBDataNodeReceiver.java | 6 ++--
.../sink/protocol/writeback/WriteBackSink.java | 3 +-
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 40 +++++++++++++++-------
.../impl/DataNodeInternalRPCServiceImpl.java | 1 +
.../db/queryengine/common/MPPQueryContext.java | 10 ++++++
.../iotdb/db/queryengine/plan/Coordinator.java | 25 +++++++++++---
.../load/TreeSchemaAutoCreatorAndVerifier.java | 1 +
.../analyze/schema/AutoCreateSchemaExecutor.java | 1 +
.../analyze/schema/ClusterSchemaFetchExecutor.java | 1 +
.../config/executor/ClusterConfigTaskExecutor.java | 1 +
.../metadata/fetcher/TableDeviceSchemaFetcher.java | 2 ++
.../fetcher/TableDeviceSchemaValidator.java | 1 +
.../plan/relational/planner/CteMaterializer.java | 1 +
...ithUncorrelatedScalarSubqueryReconstructor.java | 3 +-
.../plan/relational/sql/ast/Statement.java | 9 +++++
.../plan/relational/sql/parser/AstBuilder.java | 4 ++-
.../load/active/ActiveLoadTsFileLoader.java | 3 +-
.../converter/LoadTsFileDataTypeConverter.java | 1 +
.../db/relational/grammar/sql/RelationalSql.g4 | 2 +-
22 files changed, 96 insertions(+), 26 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/IoTDBLegacyPipeReceiverAgent.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/IoTDBLegacyPipeReceiverAgent.java
index 2c45c42a455..ea7baae7927 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/IoTDBLegacyPipeReceiverAgent.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/IoTDBLegacyPipeReceiverAgent.java
@@ -165,6 +165,7 @@ public class IoTDBLegacyPipeReceiverAgent {
partitionFetcher,
schemaFetcher,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false);
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& result.status.code != TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
index 244ec579206..56875a840ed 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
@@ -76,7 +76,8 @@ public class DeletionLoader implements ILoader {
PARTITION_FETCHER,
SCHEMA_FETCHER,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false);
+ false,
+ statement.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error("Delete {} error, statement: {}.", deletion, statement);
LOGGER.error("Delete result status : {}.", result.status);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
index d3698e97d07..e4a1c079a21 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
@@ -79,7 +79,8 @@ public class TsFileLoader implements ILoader {
PARTITION_FETCHER,
SCHEMA_FETCHER,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false);
+ false,
+ statement.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error("Load TsFile {} error, statement: {}.", tsFile.getPath(), statement);
LOGGER.error("Load TsFile result status : {}.", result.status);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index f0796a3b1a0..4670d7eac2a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -1050,7 +1050,8 @@ public class IoTDBDataNodeReceiver extends IoTDBFileReceiver {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
}
@@ -1075,7 +1076,8 @@ public class IoTDBDataNodeReceiver extends IoTDBFileReceiver {
"",
LocalExecutionPlanner.getInstance().metadata,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
// Delete data & Update device attribute is itself idempotent
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
index c47e00ff92e..9d476c54294 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/sink/protocol/writeback/WriteBackSink.java
@@ -512,7 +512,8 @@ public class WriteBackSink implements PipeConnector {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
} catch (final IoTDBRuntimeException e) {
if (e.getErrorCode() == TSStatusCode.NO_PERMISSION.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 167a1fa914f..45eb4f027a7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -343,7 +343,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
statement,
LocalExecutionPlanner.getInstance().metadata,
config.getQueryTimeoutThreshold(),
- false);
+ false,
+ s.isDebug());
} else {
// permission check
TSStatus status =
@@ -387,7 +388,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ false);
}
}
} else {
@@ -434,7 +436,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
statement,
metadata,
req.getTimeout(),
- true);
+ true,
+ false);
}
}
@@ -583,7 +586,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -678,7 +682,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -775,7 +780,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -1234,7 +1240,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -1863,7 +1870,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
statement,
LocalExecutionPlanner.getInstance().metadata,
config.getQueryTimeoutThreshold(),
- false);
+ false,
+ s.isDebug());
} else {
// permission check
TSStatus status =
@@ -1908,7 +1916,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
config.getQueryTimeoutThreshold(),
- false);
+ false,
+ s.isDebug());
}
}
} else {
@@ -1954,7 +1963,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
statement,
metadata,
config.getQueryTimeoutThreshold(),
- false);
+ false,
+ s.isDebug());
}
}
@@ -2876,7 +2886,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
config.getQueryTimeoutThreshold(),
- true);
+ true,
+ statement.isDebug());
if (executionResult.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& executionResult.status.code != TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
@@ -3286,6 +3297,7 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
ExecutionResult result = null;
final List<? extends Statement> subStatements = statement.getSubStatements();
final int totalSubStatements = subStatements.size();
+ boolean debug = statement.isDebug();
LOGGER.info(
"Start batch executing {} sub-statement(s) in tree model, queryId: {}",
@@ -3310,7 +3322,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
timeoutMs,
- userQuery);
+ userQuery,
+ debug);
// Exit early if any sub-statement execution fails
if (result != null
@@ -3400,7 +3413,8 @@ public class ClientRPCServiceImpl implements IClientRPCServiceWithHandler {
statementStr,
metadata,
timeoutMs,
- userQuery);
+ userQuery,
+ statement.isDebug());
// Exit early if any sub-statement execution fails
if (result != null
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 46d377be0a1..24a2ff7e9e7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1683,6 +1683,7 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface
partitionFetcher,
schemaFetcher,
req.getTimeout(),
+ false,
false);
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index fac3afff8b0..3bd1f28e6ba 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -125,6 +125,8 @@ public class MPPQueryContext implements IAuditEntity {
private boolean userQuery = false;
+ private boolean debug = false;
+
private Map<NodeRef<Table>, Query> cteQueries = new HashMap<>();
// Stores the EXPLAIN/EXPLAIN ANALYZE results for Common Table Expressions (CTEs)
@@ -503,6 +505,14 @@ public class MPPQueryContext implements IAuditEntity {
this.userQuery = userQuery;
}
+ public boolean isDebug() {
+ return debug;
+ }
+
+ public void setDebug(boolean debug) {
+ this.debug = debug;
+ }
+
public boolean isInnerTriggeredQuery() {
return innerTriggeredQuery;
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 0007f5dc797..af5f208d331 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -297,6 +297,7 @@ public class Coordinator {
SessionInfo session,
String sql,
boolean userQuery,
+ boolean debug,
BiFunction<MPPQueryContext, Long, IQueryExecution> iQueryExecutionFactory) {
long startTime = System.currentTimeMillis();
QueryId globalQueryId = queryIdGenerator.createNextQueryId();
@@ -314,6 +315,7 @@ public class Coordinator {
DataNodeEndPoints.LOCAL_HOST_DATA_BLOCK_ENDPOINT,
DataNodeEndPoints.LOCAL_HOST_INTERNAL_ENDPOINT);
queryContext.setUserQuery(userQuery);
+ queryContext.setDebug(debug);
IQueryExecution execution = iQueryExecutionFactory.apply(queryContext, startTime);
if (execution.isQuery()) {
queryExecutionMap.put(queryId, execution);
@@ -345,7 +347,15 @@ public class Coordinator {
IPartitionFetcher partitionFetcher,
ISchemaFetcher schemaFetcher) {
return executeForTreeModel(
- statement, queryId, session, sql, partitionFetcher, schemaFetcher, Long.MAX_VALUE, false);
+ statement,
+ queryId,
+ session,
+ sql,
+ partitionFetcher,
+ schemaFetcher,
+ Long.MAX_VALUE,
+ false,
+ false);
}
public ExecutionResult executeForTreeModel(
@@ -356,12 +366,14 @@ public class Coordinator {
IPartitionFetcher partitionFetcher,
ISchemaFetcher schemaFetcher,
long timeOut,
- boolean userQuery) {
+ boolean userQuery,
+ boolean debug) {
return execution(
queryId,
session,
sql,
userQuery,
+ debug,
((queryContext, startTime) ->
createQueryExecutionForTreeModel(
statement,
@@ -425,12 +437,14 @@ public class Coordinator {
Map<NodeRef<Table>, Query> cteQueries,
ExplainType explainType,
long timeOut,
- boolean userQuery) {
+ boolean userQuery,
+ boolean debug) {
return execution(
queryId,
session,
sql,
userQuery,
+ debug,
((queryContext, startTime) -> {
queryContext.setInnerTriggeredQuery(true);
queryContext.setCteQueries(cteQueries);
@@ -455,12 +469,14 @@ public class Coordinator {
String sql,
Metadata metadata,
long timeOut,
- boolean userQuery) {
+ boolean userQuery,
+ boolean debug) {
return execution(
queryId,
session,
sql,
userQuery,
+ debug,
((queryContext, startTime) ->
createQueryExecutionForTableModel(
statement,
@@ -486,6 +502,7 @@ public class Coordinator {
session,
sql,
false,
+ false,
((queryContext, startTime) ->
createQueryExecutionForTableModel(
statement,
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/TreeSchemaAutoCreatorAndVerifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/TreeSchemaAutoCreatorAndVerifier.java
index 29d4f1be07b..cf2aedc6c19 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/TreeSchemaAutoCreatorAndVerifier.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/TreeSchemaAutoCreatorAndVerifier.java
@@ -373,6 +373,7 @@ public class TreeSchemaAutoCreatorAndVerifier {
loadTsFileAnalyzer.partitionFetcher,
loadTsFileAnalyzer.schemaFetcher,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false);
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& result.status.code != TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index ef0ad80306a..2c6ed30cd75 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -93,6 +93,7 @@ class AutoCreateSchemaExecutor {
schemaFetcher,
// Never timeout for write statement
Long.MAX_VALUE,
+ false,
false);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
index d6f5fd74fa9..5d6d36d4609 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
@@ -98,6 +98,7 @@ class ClusterSchemaFetchExecutor {
ClusterPartitionFetcher.getInstance(),
schemaFetcher,
timeout,
+ false,
false);
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 3627e3f82af..0fa52744816 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -3039,6 +3039,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false);
if (executionResult.status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.setException(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
index 049db7dec93..b9b59636b09 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
@@ -135,6 +135,7 @@ public class TableDeviceSchemaFetcher {
LocalExecutionPlanner.getInstance().metadata,
// Never timeout for insert
Long.MAX_VALUE,
+ false,
false);
if (executionResult.status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
@@ -502,6 +503,7 @@ public class TableDeviceSchemaFetcher {
LocalExecutionPlanner.getInstance().metadata,
mppQueryContext.getTimeOut()
- (System.currentTimeMillis() - mppQueryContext.getStartTime()),
+ false,
false);
if (executionResult.status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaValidator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaValidator.java
index 122d352d332..2331d0e4ffc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaValidator.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaValidator.java
@@ -242,6 +242,7 @@ public class TableDeviceSchemaValidator {
LocalExecutionPlanner.getInstance().metadata,
// Never timeout for write statement
Long.MAX_VALUE,
+ false,
false);
if (executionResult.status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
throw new IoTDBRuntimeException(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
index a6ac7a42246..db030146a04 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/CteMaterializer.java
@@ -142,6 +142,7 @@ public class CteMaterializer {
context.getCteQueries(),
context.getExplainType(),
context.getTimeOut(),
+ false,
false);
if (executionResult.status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return null;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/PredicateWithUncorrelatedScalarSubqueryReconstructor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/PredicateWithUncorrelatedScalarSubqueryReconstructor.java
index 56c4671fd73..0d023b85ce1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/PredicateWithUncorrelatedScalarSubqueryReconstructor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/ir/PredicateWithUncorrelatedScalarSubqueryReconstructor.java
@@ -153,7 +153,8 @@ public class PredicateWithUncorrelatedScalarSubqueryReconstructor {
context.getCteQueries(),
ExplainType.NONE,
context.getTimeOut(),
- false);
+ false,
+ q.isDebug());
// This may occur when the subquery cannot be executed in advance (for example, with
// correlated scalar subqueries).
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
index 7ba19b972a2..6548748f7c1 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Statement.java
@@ -25,6 +25,7 @@ import java.util.Collections;
import java.util.List;
public abstract class Statement extends Node {
+ private boolean debug;
protected Statement(final @Nullable NodeLocation location) {
super(location);
@@ -56,4 +57,12 @@ public abstract class Statement extends Node {
public List<? extends Statement> getSubStatements() {
return Collections.emptyList();
}
+
+ public void setDebug(boolean debug) {
+ this.debug = debug;
+ }
+
+ public boolean isDebug() {
+ return debug;
+ }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
index 83105468a02..f46b356423d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java
@@ -354,7 +354,9 @@ public class AstBuilder extends RelationalSqlBaseVisitor<Node> {
@Override
public Node visitSingleStatement(RelationalSqlParser.SingleStatementContext ctx) {
- return visit(ctx.statement());
+ Statement statement = (Statement) visit(ctx.statement());
+ statement.setDebug(ctx.DEBUG() != null);
+ return statement;
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
index 0e565afd70c..d0be2ead5cb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
@@ -257,7 +257,8 @@ public class ActiveLoadTsFileLoader {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IOTDB_CONFIG.getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
} finally {
SESSION_MANAGER.removeCurrSession();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
index b45c05a3f30..383ac4a3064 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
@@ -178,6 +178,7 @@ public class LoadTsFileDataTypeConverter {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false)
.status;
} finally {
diff --git a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
index 07186fd4222..2982e506ea9 100644
--- a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
+++ b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4
@@ -26,7 +26,7 @@ tokens {
}
singleStatement
- : statement EOF
+ : DEBUG? statement EOF
;