This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-c108335-hive-sql in repository https://gitbox.apache.org/repos/asf/doris.git
commit d350c8b32c51c21af7bd140dfcccc3fb8ed39210 Author: morningman <yun...@selectdb.com> AuthorDate: Sun Mar 23 10:56:29 2025 +0800 [feat](sql-convertor) support 'explain convert' to show converted sql #49354 --- .../antlr4/org/apache/doris/nereids/DorisParser.g4 | 2 +- .../org/apache/doris/analysis/ExplainOptions.java | 4 ++++ .../trees/plans/commands/ExplainCommand.java | 6 ++++++ .../java/org/apache/doris/qe/StmtExecutor.java | 22 ++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index 241e43cd46f..edcc9de6309 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -1026,7 +1026,7 @@ grantUserIdentify explain : explainCommand planType? - level=(VERBOSE | TREE | GRAPH | PLAN | DUMP)? + level=(VERBOSE | TREE | GRAPH | PLAN | DUMP | CONVERT)? PROCESS? ; diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExplainOptions.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExplainOptions.java index 0518dceb844..e0dfc964b4b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExplainOptions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExplainOptions.java @@ -53,6 +53,10 @@ public class ExplainOptions { return explainLevel == ExplainLevel.GRAPH || isGraph; } + public boolean isConversion() { + return explainLevel == ExplainLevel.CONVERT; + } + public boolean hasExplainLevel() { return explainLevel != null; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExplainCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExplainCommand.java index ea805f6cb0c..d70ef5aedce 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExplainCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/ExplainCommand.java @@ -45,6 +45,7 @@ public class ExplainCommand extends Command implements NoForward { VERBOSE(false), TREE(false), GRAPH(false), + CONVERT(false), PARSED_PLAN(true), ANALYZED_PLAN(true), REWRITTEN_PLAN(true), @@ -92,6 +93,11 @@ public class ExplainCommand extends Command implements NoForward { if (ctx.getSessionVariable().isEnableMaterializedViewRewrite()) { ctx.getStatementContext().addPlannerHook(InitMaterializationContextHook.INSTANCE); } + if (explainOptions.isConversion()) { + executor.handleShowConvertedStmt(); + return; + } + planner.plan(logicalPlanAdapter, ctx.getSessionVariable().toThrift()); executor.setPlanner(planner); executor.checkBlockRules(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 8be945ff6cb..45d246ade7e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -3767,4 +3767,26 @@ public class StmtExecutor { public String getPrepareStmtName() { return this.prepareStmtName; } + + /* + * Only return the converted statement + */ + public void handleShowConvertedStmt() throws IOException { + ShowResultSetMetaData metaData = ShowResultSetMetaData.builder() + .addColumn(new Column("ConvertedStatement", ScalarType.STRING)) + .build(); + if (context.getConnectType() == ConnectType.MYSQL) { + sendMetaData(metaData); + // Send result set. + serializer.reset(); + serializer.writeLenEncodedString(originStmt.originStmt); + context.getMysqlChannel().sendOnePacket(serializer.toByteBuffer()); + } else if (context.getConnectType() == ConnectType.ARROW_FLIGHT_SQL) { + context.getFlightSqlChannel() + .addResult(DebugUtil.printId(context.queryId()), context.getRunningQuery(), metaData, + originStmt.originStmt); + context.setReturnResultFromLocal(true); + } + context.getState().setEof(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org