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

Reply via email to