From 35a6364428e6b843a3bb20b56abf1f708454c1f3 Mon Sep 17 00:00:00 2001
From: you06 <you1474600@gmail.com>
Date: Wed, 23 Aug 2023 16:39:34 +0800
Subject: [PATCH] session: set request source to type of the prepared stmt for
 execute stmt (#46348)

close pingcap/tidb#46349
---
 session/session.go | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/session/session.go b/session/session.go
index ac26339953ffd..c705acd0ce1b2 100644
--- a/session/session.go
+++ b/session/session.go
@@ -2197,7 +2197,16 @@ func (s *session) ExecuteStmt(ctx context.Context, stmtNode ast.StmtNode) (sqlex
 		}
 	})
 
-	stmtLabel := ast.GetStmtLabel(stmtNode)
+	var stmtLabel string
+	if execStmt, ok := stmtNode.(*ast.ExecuteStmt); ok {
+		prepareStmt, err := plannercore.GetPreparedStmt(execStmt, s.sessionVars)
+		if err == nil && prepareStmt.PreparedAst != nil {
+			stmtLabel = ast.GetStmtLabel(prepareStmt.PreparedAst.Stmt)
+		}
+	}
+	if stmtLabel == "" {
+		stmtLabel = ast.GetStmtLabel(stmtNode)
+	}
 	s.setRequestSource(ctx, stmtLabel, stmtNode)
 
 	// Transform abstract syntax tree to a physical plan(stored in executor.ExecStmt).