Skip to content

Commit

Permalink
fix query result for explain anaylyze (#16265)
Browse files Browse the repository at this point in the history
问题原因:
explain 与 explain analyze走得不同的逻辑。
提取explain anaylze column defs 的逻辑不对。

修改方案:
为explain anaylze设置正确的column defs。

Approved by: @qingxinhome
  • Loading branch information
daviszhen committed May 20, 2024
1 parent 58bb3fd commit 4f51535
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
8 changes: 5 additions & 3 deletions pkg/frontend/mysql_cmd_executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -1823,7 +1823,7 @@ func handleEmptyStmt(ses FeSession, execCtx *ExecCtx, stmt *tree.EmptyStmt) erro
return err
}

func GetExplainColumns(ctx context.Context, explainColName string) ([]interface{}, error) {
func GetExplainColumns(ctx context.Context, explainColName string) ([]*plan2.ColDef, []interface{}, error) {
cols := []*plan2.ColDef{
{Typ: plan2.Type{Id: int32(types.T_varchar)}, Name: explainColName},
}
Expand All @@ -1834,11 +1834,11 @@ func GetExplainColumns(ctx context.Context, explainColName string) ([]interface{
c.SetName(col.Name)
err = convertEngineTypeToMysqlType(ctx, types.T(col.Typ.Id), c)
if err != nil {
return nil, err
return nil, nil, err
}
columns[i] = c
}
return columns, err
return cols, columns, err
}

func getExplainOption(reqCtx context.Context, options []tree.OptionElem) (*explain.ExplainOptions, error) {
Expand Down Expand Up @@ -2836,6 +2836,8 @@ func doComQuery(ses *Session, execCtx *ExecCtx, input *UserInput) (retErr error)

defer func() {
ses.SetMysqlResultSet(nil)
ses.rs = nil
ses.p = nil
}()

canCache := true
Expand Down
5 changes: 4 additions & 1 deletion pkg/frontend/result_row_stmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
// executeResultRowStmt run the statemet that responses result rows
func executeResultRowStmt(ses *Session, execCtx *ExecCtx) (err error) {
var columns []interface{}
var colDefs []*plan2.ColDef
ses.EnterFPrint(63)
defer ses.ExitFPrint(63)
switch statement := execCtx.stmt.(type) {
Expand Down Expand Up @@ -73,14 +74,16 @@ func executeResultRowStmt(ses *Session, execCtx *ExecCtx) (err error) {

case *tree.ExplainAnalyze:
explainColName := "QUERY PLAN"
columns, err = GetExplainColumns(execCtx.reqCtx, explainColName)
colDefs, columns, err = GetExplainColumns(execCtx.reqCtx, explainColName)
if err != nil {
ses.Error(execCtx.reqCtx,
"Failed to get columns from ExplainColumns handler",
zap.Error(err))
return
}

ses.rs = &plan.ResultColDef{ResultCols: colDefs}

ses.EnterFPrint(66)
defer ses.ExitFPrint(66)
err = respColumnDefsWithoutFlush(ses, execCtx, columns)
Expand Down

0 comments on commit 4f51535

Please sign in to comment.