From 945af954fc28cc4f274d0561b0a59c8da9d14e1d Mon Sep 17 00:00:00 2001 From: Harshit Gangal Date: Mon, 13 Jan 2025 14:41:05 +0530 Subject: [PATCH] describe statement: support global routing Signed-off-by: Harshit Gangal --- go/vt/vtgate/planbuilder/plan_test.go | 4 +- .../testdata/other_read_cases.json | 60 +++++++++++++------ go/vt/vtgate/planbuilder/vexplain.go | 24 ++++---- 3 files changed, 55 insertions(+), 33 deletions(-) diff --git a/go/vt/vtgate/planbuilder/plan_test.go b/go/vt/vtgate/planbuilder/plan_test.go index f3bed93e3c8..8a8d55279a6 100644 --- a/go/vt/vtgate/planbuilder/plan_test.go +++ b/go/vt/vtgate/planbuilder/plan_test.go @@ -577,10 +577,10 @@ func (s *planTestSuite) TestOtherPlanningFromFile() { vw, err := vschemawrapper.NewVschemaWrapper(env, vschema, TestBuilder) require.NoError(s.T(), err) + s.testFile("other_read_cases.json", vw, false) + vw.Vcursor.SetTarget("main") vw.Keyspace = &vindexes.Keyspace{Name: "main"} - - s.testFile("other_read_cases.json", vw, false) s.testFile("other_admin_cases.json", vw, false) } diff --git a/go/vt/vtgate/planbuilder/testdata/other_read_cases.json b/go/vt/vtgate/planbuilder/testdata/other_read_cases.json index 2258bcd768c..1a7c9ddac2a 100644 --- a/go/vt/vtgate/planbuilder/testdata/other_read_cases.json +++ b/go/vt/vtgate/planbuilder/testdata/other_read_cases.json @@ -8,24 +8,24 @@ "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.user" + "user.user" ] } }, { "comment": "Analyze statement", - "query": "analyze table t1", + "query": "analyze table main.t1", "plan": { "QueryType": "ANALYZE", - "Original": "analyze table t1", + "Original": "analyze table main.t1", "Instructions": { "OperatorType": "Send", "Keyspace": { @@ -42,43 +42,43 @@ }, { "comment": "Describe statement", - "query": "describe select * from t", + "query": "describe select * from user", "plan": { "QueryType": "EXPLAIN", - "Original": "describe select * from t", + "Original": "describe select * from user", "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", - "Query": "explain select * from t", + "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.t" + "user.user" ] } }, { "comment": "Desc statement", - "query": "desc select * from t", + "query": "desc select * from user", "plan": { "QueryType": "EXPLAIN", - "Original": "desc select * from t", + "Original": "desc select * from user", "Instructions": { "OperatorType": "Send", "Keyspace": { - "Name": "main", - "Sharded": false + "Name": "user", + "Sharded": true }, "TargetDestination": "AnyShard()", - "Query": "explain select * from t", + "Query": "explain select * from `user`", "SingleShardOnly": true }, "TablesUsed": [ - "main.t" + "user.user" ] } }, @@ -167,5 +167,31 @@ "main.administrable_role_authorizations" ] } + }, + { + "comment": "describe table without qualifier", + "query": "describe user", + "plan": { + "QueryType": "EXPLAIN", + "Original": "describe user", + "Instructions": { + "OperatorType": "Send", + "Keyspace": { + "Name": "user", + "Sharded": true + }, + "TargetDestination": "AnyShard()", + "Query": "explain `user`", + "SingleShardOnly": true + }, + "TablesUsed": [ + "user.user" + ] + } + }, + { + "comment": "describe table does not exists", + "query": "describe unknown_table", + "plan": "table unknown_table not found" } ] diff --git a/go/vt/vtgate/planbuilder/vexplain.go b/go/vt/vtgate/planbuilder/vexplain.go index 7aed1e48884..a12139c3068 100644 --- a/go/vt/vtgate/planbuilder/vexplain.go +++ b/go/vt/vtgate/planbuilder/vexplain.go @@ -55,7 +55,7 @@ func buildVExplainPlan( func explainTabPlan(explain *sqlparser.ExplainTab, vschema plancontext.VSchema) (*planResult, error) { var keyspace *vindexes.Keyspace - var destination key.Destination + var dest key.Destination if sqlparser.SystemSchema(explain.Table.Qualifier.String()) { var err error @@ -64,30 +64,26 @@ func explainTabPlan(explain *sqlparser.ExplainTab, vschema plancontext.VSchema) return nil, err } } else { + var tbl *vindexes.Table var err error - var ks string - _, _, ks, _, destination, err = vschema.FindTableOrVindex(explain.Table) + tbl, _, _, _, dest, err = vschema.FindTableOrVindex(explain.Table) if err != nil { return nil, err } - explain.Table.Qualifier = sqlparser.NewIdentifierCS("") - - keyspace, err = vschema.FindKeyspace(ks) - if err != nil { - return nil, err - } - if keyspace == nil { - return nil, vterrors.VT14004(ks) + if tbl == nil { + return nil, vterrors.VT05004(explain.Table.Name.String()) } + keyspace = tbl.Keyspace + explain.Table = sqlparser.NewTableName(tbl.Name.String()) } - if destination == nil { - destination = key.DestinationAnyShard{} + if dest == nil { + dest = key.DestinationAnyShard{} } return newPlanResult(&engine.Send{ Keyspace: keyspace, - TargetDestination: destination, + TargetDestination: dest, Query: sqlparser.String(explain), SingleShardOnly: true, }, singleTable(keyspace.Name, explain.Table.Name.String())), nil