diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index f9446b21093..536adbcf662 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -115,26 +115,40 @@ func buildVariablePlan(show *sqlparser.ShowBasic, vschema ContextVSchema) (engin func buildShowTblPlan(show *sqlparser.ShowBasic, vschema ContextVSchema) (engine.Primitive, error) { if show.DbName != "" { show.Tbl.Qualifier = sqlparser.NewTableIdent(show.DbName) + // Remove Database Name from the query. + show.DbName = "" } - table, _, _, _, destination, err := vschema.FindTableOrVindex(show.Tbl) - if err != nil { - return nil, err - } - if table == nil { - return nil, vterrors.NewErrorf(vtrpcpb.Code_NOT_FOUND, vterrors.UnknownTable, "Table '%s' doesn't exist", show.Tbl.Name.String()) - } - if destination == nil { - destination = key.DestinationAnyShard{} - } - // Remove Database Name from the query. - show.DbName = "" - show.Tbl.Qualifier = sqlparser.NewTableIdent("") - show.Tbl.Name = table.Name + dest := key.Destination(key.DestinationAnyShard{}) + var ks *vindexes.Keyspace + var err error + + if !show.Tbl.Qualifier.IsEmpty() && sqlparser.SystemSchema(show.Tbl.Qualifier.String()) { + ks, err = vschema.AnyKeyspace() + if err != nil { + return nil, err + } + } else { + table, _, _, _, destination, err := vschema.FindTableOrVindex(show.Tbl) + if err != nil { + return nil, err + } + if table == nil { + return nil, vterrors.NewErrorf(vtrpcpb.Code_NOT_FOUND, vterrors.UnknownTable, "Table '%s' doesn't exist", show.Tbl.Name.String()) + } + // Update the table. + show.Tbl.Qualifier = sqlparser.NewTableIdent("") + show.Tbl.Name = table.Name + + if destination != nil { + dest = destination + } + ks = table.Keyspace + } return &engine.Send{ - Keyspace: table.Keyspace, - TargetDestination: destination, + Keyspace: ks, + TargetDestination: dest, Query: sqlparser.String(show), IsDML: false, SingleShardOnly: true, diff --git a/go/vt/vtgate/planbuilder/testdata/show_cases_no_default_keyspace.txt b/go/vt/vtgate/planbuilder/testdata/show_cases_no_default_keyspace.txt index df2253e38bb..43395759844 100644 --- a/go/vt/vtgate/planbuilder/testdata/show_cases_no_default_keyspace.txt +++ b/go/vt/vtgate/planbuilder/testdata/show_cases_no_default_keyspace.txt @@ -56,3 +56,39 @@ ] } } + +# show full columns from system schema +"show full columns from sys.sys_config" +{ + "QueryType": "SHOW", + "Original": "show full columns from sys.sys_config", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from sys.sys_config", + "SingleShardOnly": true + } +} + +# show full columns from system schema replacing qualifier +"show full columns from x.sys_config from sys" +{ + "QueryType": "SHOW", + "Original": "show full columns from x.sys_config from sys", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "main", + "Sharded": false + }, + "TargetDestination": "AnyShard()", + "IsDML": false, + "Query": "show full columns from sys.sys_config", + "SingleShardOnly": true + } +}