diff --git a/go/test/endtoend/vtgate/lookup_test.go b/go/test/endtoend/vtgate/lookup_test.go index c34ac6de527..ba7fd0f4de9 100644 --- a/go/test/endtoend/vtgate/lookup_test.go +++ b/go/test/endtoend/vtgate/lookup_test.go @@ -529,6 +529,17 @@ func TestSelectNull(t *testing.T) { exec(t, conn, "delete from t5_null_vindex") } +func TestShowColumns(t *testing.T) { + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + + expected := `[[VARCHAR("id") TEXT("bigint(20)") VARCHAR("NO") VARCHAR("PRI") NULL VARCHAR("")] [VARCHAR("idx") TEXT("varchar(50)") VARCHAR("YES") VARCHAR("") NULL VARCHAR("")]]` + assertMatches(t, conn, "show columns from `t5_null_vindex` in `ks`", expected) + assertMatches(t, conn, "SHOW COLUMNS from `t5_null_vindex` in `ks`", expected) + assertMatches(t, conn, "SHOW columns FROM `t5_null_vindex` in `ks`", expected) +} + func assertMatches(t *testing.T, conn *mysql.Conn, query, expected string) { t.Helper() qr := exec(t, conn, query) diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 278bd3f3c3d..a940d16187a 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -442,6 +442,44 @@ func TestExecutorAutocommit(t *testing.T) { } } +func TestExecutorShowColumns(t *testing.T) { + executor, sbc1, sbc2, sbclookup := createExecutorEnv() + session := NewSafeSession(&vtgatepb.Session{TargetString: ""}) + + queries := []string{ + "SHOW COLUMNS FROM `user` in `TestExecutor`", + "show columns from `user` in `TestExecutor`", + "ShOw CoLuMnS fRoM `user` iN `TestExecutor`", + "SHOW columns FROM `user` in `TestExecutor`", + } + for _, query := range queries { + t.Run(query, func(t *testing.T) { + _, err := executor.Execute(context.Background(), "TestExecute", session, query, nil) + require.NoError(t, err) + + wantQueries := []*querypb.BoundQuery{{ + Sql: "show columns from user", + BindVariables: map[string]*querypb.BindVariable{}, + }} + + assert.Equal(t, wantQueries, sbc1.Queries, "sbc1.Queries") + assert.Empty(t, sbc1.BatchQueries, "sbc1.BatchQueries") + assert.Empty(t, sbc2.Queries, "sbc2.Queries") + assert.Empty(t, sbc2.BatchQueries, "sbc2.BatchQueries") + assert.Empty(t, sbclookup.Queries, "sbclookup.Queries") + assert.Empty(t, sbclookup.BatchQueries, "sbclookup.BatchQueries") + + sbc1.Queries = nil + sbc2.Queries = nil + sbclookup.Queries = nil + sbc1.BatchQueries = nil + sbc2.BatchQueries = nil + sbclookup.BatchQueries = nil + }) + } + +} + func TestExecutorShow(t *testing.T) { executor, _, _, sbclookup := createExecutorEnv() session := NewSafeSession(&vtgatepb.Session{TargetString: "@master"})