// Execute routes a non-streaming query. func (rtr *Router) Execute(ctx context.Context, query *proto.Query) (*mproto.QueryResult, error) { if query.BindVariables == nil { query.BindVariables = make(map[string]interface{}) } vcursor := newRequestContext(ctx, query, rtr) plan := rtr.planner.GetPlan(string(query.Sql)) switch plan.ID { case planbuilder.SelectUnsharded, planbuilder.UpdateUnsharded, planbuilder.DeleteUnsharded, planbuilder.InsertUnsharded: return rtr.execUnsharded(vcursor, plan) case planbuilder.SelectEqual: return rtr.execSelectEqual(vcursor, plan) case planbuilder.InsertSharded: return rtr.execInsertSharded(vcursor, plan) default: return nil, fmt.Errorf("plan %+v unimplemented", plan) } }