diff --git a/go/test/endtoend/vtgate/misc_test.go b/go/test/endtoend/vtgate/misc_test.go index aec30cd7b6f..6a28bf191ec 100644 --- a/go/test/endtoend/vtgate/misc_test.go +++ b/go/test/endtoend/vtgate/misc_test.go @@ -424,6 +424,19 @@ func TestSavepointAdditionalCase(t *testing.T) { assertMatches(t, conn, "select id1 from t1 order by id1", `[]`) } +func TestExplainPassthrough(t *testing.T) { + defer cluster.PanicHandler(t) + ctx := context.Background() + conn, err := mysql.Connect(ctx, &vtParams) + require.Nil(t, err) + defer conn.Close() + + result := exec(t, conn, "explain select * from t1") + got := fmt.Sprintf("%v", result.Rows) + require.Contains(t, got, "SIMPLE") // there is a lot more coming from mysql, + // but we are trying to make the test less fragile +} + func assertMatches(t *testing.T, conn *mysql.Conn, query, expected string) { t.Helper() qr := exec(t, conn, query) diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index 694ec49ae0e..8f1285a97df 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -180,9 +180,7 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, isRes // DDLs and other statements below don't get fully parsed. // We have to use the original query at the time of execution. plan = &Plan{PlanID: PlanDDL} - case *sqlparser.Show: - plan, err = &Plan{PlanID: PlanOtherRead}, nil - case *sqlparser.OtherRead: + case *sqlparser.Show, *sqlparser.OtherRead, *sqlparser.Explain: plan, err = &Plan{PlanID: PlanOtherRead}, nil case *sqlparser.OtherAdmin: plan, err = &Plan{PlanID: PlanOtherAdmin}, nil