// StreamExecute is part of the queryservice.QueryServer interface func (q *query) StreamExecute(request *pb.StreamExecuteRequest, stream pbs.Query_StreamExecuteServer) (err error) { defer q.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.GetEffectiveCallerId(), request.GetImmediateCallerId(), ) seErr := q.server.StreamExecute(ctx, &proto.Query{ Sql: string(request.Query.Sql), BindVariables: proto.Proto3ToBindVariables(request.Query.BindVariables), SessionId: request.SessionId, }, func(reply *mproto.QueryResult) error { return stream.Send(&pb.StreamExecuteResponse{ Result: mproto.QueryResultToProto3(reply), }) }) if seErr != nil { response := &pb.StreamExecuteResponse{ Error: tabletserver.TabletErrorToRPCError(seErr), } if err := stream.Send(response); err != nil { return err } } return nil }
// ExecuteKeyspaceIds is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) ExecuteKeyspaceIds(ctx context.Context, request *pb.ExecuteKeyspaceIdsRequest) (response *pb.ExecuteKeyspaceIdsResponse, err error) { defer vtg.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.CallerId, callerid.NewImmediateCallerID("grpc client")) reply := new(proto.QueryResult) executeErr := vtg.server.ExecuteKeyspaceIds(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.Keyspace, key.ProtoToKeyspaceIds(request.KeyspaceIds), request.TabletType, proto.ProtoToSession(request.Session), request.NotInTransaction, reply) response = &pb.ExecuteKeyspaceIdsResponse{ Error: vtgate.VtGateErrorToVtRPCError(executeErr, reply.Error), } if executeErr == nil { response.Result = mproto.QueryResultToProto3(reply.Result) response.Session = proto.SessionToProto(reply.Session) return response, nil } if *vtgate.RPCErrorOnlyInReply { return response, nil } return nil, executeErr }
// ExecuteKeyspaceIds is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) ExecuteKeyspaceIds(ctx context.Context, request *pb.ExecuteKeyspaceIdsRequest) (response *pb.ExecuteKeyspaceIdsResponse, err error) { defer vtg.server.HandlePanic(&err) query := &proto.KeyspaceIdQuery{ Sql: string(request.Query.Sql), BindVariables: tproto.Proto3ToBindVariables(request.Query.BindVariables), Keyspace: request.Keyspace, KeyspaceIds: key.ProtoToKeyspaceIds(request.KeyspaceIds), TabletType: topo.ProtoToTabletType(request.TabletType), Session: proto.ProtoToSession(request.Session), NotInTransaction: request.NotInTransaction, } reply := new(proto.QueryResult) executeErr := vtg.server.ExecuteKeyspaceIds(ctx, query, reply) response = &pb.ExecuteKeyspaceIdsResponse{ Error: vtgate.VtGateErrorToVtRPCError(executeErr, reply.Error), } if executeErr == nil { response.Result = mproto.QueryResultToProto3(reply.Result) response.Session = proto.SessionToProto(reply.Session) return response, nil } if *vtgate.RPCErrorOnlyInReply { return response, nil } return nil, executeErr }
// ExecuteEntityIds is the RPC version of vtgateservice.VTGateService method func (vtg *VTGateP3) ExecuteEntityIds(ctx context.Context, request *pb.ExecuteEntityIdsRequest, response *pb.ExecuteEntityIdsResponse) (err error) { defer vtg.server.HandlePanic(&err) ctx, cancel := context.WithDeadline(ctx, time.Now().Add(*rpcTimeout)) defer cancel() ctx = callerid.NewContext(ctx, request.CallerId, callerid.NewImmediateCallerID("bsonp3 client")) reply := new(proto.QueryResult) executeErr := vtg.server.ExecuteEntityIds(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.Keyspace, request.EntityColumnName, request.EntityKeyspaceIds, request.TabletType, proto.ProtoToSession(request.Session), request.NotInTransaction, reply) if executeErr == nil { response.Error = vtgate.RPCErrorToVtRPCError(reply.Err) response.Result = mproto.QueryResultToProto3(reply.Result) response.Session = proto.SessionToProto(reply.Session) } return vterrors.ToJSONError(executeErr) }
// StreamExecute is part of the queryservice.QueryServer interface func (q *query) StreamExecute(request *pb.StreamExecuteRequest, stream pbs.Query_StreamExecuteServer) (err error) { defer q.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.EffectiveCallerId, request.ImmediateCallerId, ) bv, err := proto.Proto3ToBindVariables(request.Query.BindVariables) if err != nil { return tabletserver.ToGRPCError(err) } if err := q.server.StreamExecute(ctx, request.Target, &proto.Query{ Sql: request.Query.Sql, BindVariables: bv, SessionId: request.SessionId, }, func(reply *mproto.QueryResult) error { result, err := mproto.QueryResultToProto3(reply) if err != nil { return err } return stream.Send(&pb.StreamExecuteResponse{Result: result}) }); err != nil { return tabletserver.ToGRPCError(err) } return nil }
// StreamExecuteKeyRanges2 is the RPC version of // vtgateservice.VTGateService method func (vtg *VTGateP3) StreamExecuteKeyRanges2(ctx context.Context, request *pb.StreamExecuteKeyRangesRequest, sendReply func(interface{}) error) (err error) { defer vtg.server.HandlePanic(&err) ctx = callerid.NewContext(ctx, request.CallerId, callerid.NewImmediateCallerID("gorpc client")) vtgErr := vtg.server.StreamExecuteKeyRanges(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.Keyspace, request.KeyRanges, request.TabletType, func(reply *proto.QueryResult) error { return sendReply(&pb.StreamExecuteKeyRangesResponse{ Error: vtgate.VtGateErrorToVtRPCError(nil, reply.Error), Result: mproto.QueryResultToProto3(reply.Result), }) }) if vtgErr == nil { return nil } if *vtgate.RPCErrorOnlyInReply { // If there was an app error, send a QueryResult back with it. // Sending back errors this way is not backwards compatible. If a (new) server sends an additional // QueryResult with an error, and the (old) client doesn't know how to read it, it will cause // problems where the client will get out of sync with the number of QueryResults sent. // That's why this the error is only sent this way when the --rpc_errors_only_in_reply flag is set // (signalling that all clients are able to handle new-style errors). return sendReply(&pb.StreamExecuteKeyRangesResponse{ Error: vtgate.VtGateErrorToVtRPCError(vtgErr, ""), }) } return vtgErr }
// ExecuteKeyspaceIds is the RPC version of vtgateservice.VTGateService method func (vtg *VTGateP3) ExecuteKeyspaceIds(ctx context.Context, request *pb.ExecuteKeyspaceIdsRequest, response *pb.ExecuteKeyspaceIdsResponse) (err error) { defer vtg.server.HandlePanic(&err) ctx, cancel := context.WithDeadline(ctx, time.Now().Add(*rpcTimeout)) defer cancel() ctx = callerid.NewContext(ctx, request.CallerId, callerid.NewImmediateCallerID("gorpc client")) reply := &proto.QueryResult{} vtgErr := vtg.server.ExecuteKeyspaceIds(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.Keyspace, request.KeyspaceIds, request.TabletType, proto.ProtoToSession(request.Session), request.NotInTransaction, reply) response.Error = vtgate.VtGateErrorToVtRPCError(vtgErr, reply.Error) response.Result = mproto.QueryResultToProto3(reply.Result) response.Session = proto.SessionToProto(reply.Session) if *vtgate.RPCErrorOnlyInReply { return nil } return vtgErr }
// ExecuteKeyspaceIds is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) ExecuteKeyspaceIds(ctx context.Context, request *pb.ExecuteKeyspaceIdsRequest) (response *pb.ExecuteKeyspaceIdsResponse, err error) { defer vtg.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.CallerId, callerid.NewImmediateCallerID("grpc client")) reply := new(proto.QueryResult) bv, err := tproto.Proto3ToBindVariables(request.Query.BindVariables) if err != nil { return nil, vterrors.ToGRPCError(err) } executeErr := vtg.server.ExecuteKeyspaceIds(ctx, string(request.Query.Sql), bv, request.Keyspace, request.KeyspaceIds, request.TabletType, request.Session, request.NotInTransaction, reply) response = &pb.ExecuteKeyspaceIdsResponse{ Error: vtgate.RPCErrorToVtRPCError(reply.Err), } if executeErr == nil { response.Result, executeErr = mproto.QueryResultToProto3(reply.Result) if executeErr == nil { response.Session = reply.Session return response, nil } } return nil, vterrors.ToGRPCError(executeErr) }
// Execute is part of the queryservice.QueryServer interface func (q *query) Execute(ctx context.Context, request *pb.ExecuteRequest) (response *pb.ExecuteResponse, err error) { defer q.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.EffectiveCallerId, request.ImmediateCallerId, ) reply := new(mproto.QueryResult) bv, err := proto.Proto3ToBindVariables(request.Query.BindVariables) if err != nil { return nil, tabletserver.ToGRPCError(err) } if err := q.server.Execute(ctx, request.Target, &proto.Query{ Sql: request.Query.Sql, BindVariables: bv, SessionId: request.SessionId, TransactionId: request.TransactionId, }, reply); err != nil { return nil, tabletserver.ToGRPCError(err) } result, err := mproto.QueryResultToProto3(reply) if err != nil { return nil, tabletserver.ToGRPCError(err) } return &pb.ExecuteResponse{Result: result}, nil }
// QueryResultListToProto3 changes the internal array of QueryResult to the proto3 version func QueryResultListToProto3(results []mproto.QueryResult) []*pb.QueryResult { if len(results) == 0 { return nil } result := make([]*pb.QueryResult, len(results)) for i := range results { result[i] = mproto.QueryResultToProto3(&results[i]) } return result }
func (s *server) ExecuteFetchAsApp(ctx context.Context, request *pb.ExecuteFetchAsAppRequest) (*pb.ExecuteFetchAsAppResponse, error) { ctx = callinfo.GRPCCallInfo(ctx) response := &pb.ExecuteFetchAsAppResponse{} return response, s.agent.RPCWrap(ctx, actionnode.TabletActionExecuteFetchAsApp, request, response, func() error { qr, err := s.agent.ExecuteFetchAsApp(ctx, request.Query, int(request.MaxRows), request.WantFields) if err == nil { response.Result = mproto.QueryResultToProto3(qr) } return err }) }
func (s *server) ExecuteFetchAsDba(ctx context.Context, request *pb.ExecuteFetchAsDbaRequest) (*pb.ExecuteFetchAsDbaResponse, error) { ctx = callinfo.GRPCCallInfo(ctx) response := &pb.ExecuteFetchAsDbaResponse{} return response, s.agent.RPCWrap(ctx, actionnode.TabletActionExecuteFetchAsDba, request, response, func() error { qr, err := s.agent.ExecuteFetchAsDba(ctx, request.Query, request.DbName, int(request.MaxRows), request.WantFields, request.DisableBinlogs, request.ReloadSchema) if err != nil { return err } response.Result, err = mproto.QueryResultToProto3(qr) return err }) }
// StreamExecute is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) StreamExecute(request *pb.StreamExecuteRequest, stream pbs.Vitess_StreamExecuteServer) (err error) { defer vtg.server.HandlePanic(&err) query := &proto.Query{ Sql: string(request.Query.Sql), BindVariables: tproto.Proto3ToBindVariables(request.Query.BindVariables), TabletType: topo.ProtoToTabletType(request.TabletType), } return vtg.server.StreamExecute(stream.Context(), query, func(value *proto.QueryResult) error { return stream.Send(&pb.StreamExecuteResponse{ Result: mproto.QueryResultToProto3(value.Result), }) }) }
// QueryResultListToProto3 changes the internal array of QueryResult to the proto3 version func QueryResultListToProto3(results []mproto.QueryResult) ([]*pb.QueryResult, error) { if len(results) == 0 { return nil, nil } result := make([]*pb.QueryResult, len(results)) var err error for i := range results { result[i], err = mproto.QueryResultToProto3(&results[i]) if err != nil { return nil, err } } return result, nil }
// StreamExecute is the RPC version of vtgateservice.VTGateService method func (vtg *VTGate) StreamExecute(request *pb.StreamExecuteRequest, stream pbs.Vitess_StreamExecuteServer) (err error) { defer vtg.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.CallerId, callerid.NewImmediateCallerID("grpc client")) return vtg.server.StreamExecute(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.TabletType, func(value *proto.QueryResult) error { return stream.Send(&pb.StreamExecuteResponse{ Result: mproto.QueryResultToProto3(value.Result), }) }) }
// StreamExecute is part of the queryservice.QueryServer interface func (q *query) StreamExecute(request *pb.StreamExecuteRequest, stream pbs.Query_StreamExecuteServer) (err error) { defer q.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.EffectiveCallerId, request.ImmediateCallerId, ) return q.server.StreamExecute(ctx, request.Target, &proto.Query{ Sql: string(request.Query.Sql), BindVariables: proto.Proto3ToBindVariables(request.Query.BindVariables), SessionId: request.SessionId, }, func(reply *mproto.QueryResult) error { return stream.Send(&pb.StreamExecuteResponse{ Result: mproto.QueryResultToProto3(reply), }) }) }
// StreamExecute is the RPC version of vtgateservice.VTGateService method func (vtg *VTGateP3) StreamExecute(ctx context.Context, request *pb.StreamExecuteRequest, sendReply func(interface{}) error) (err error) { defer vtg.server.HandlePanic(&err) ctx = callerid.NewContext(ctx, request.CallerId, callerid.NewImmediateCallerID("bsonp3 client")) vtgErr := vtg.server.StreamExecute(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.TabletType, func(reply *proto.QueryResult) error { return sendReply(&pb.StreamExecuteResponse{ Result: mproto.QueryResultToProto3(reply.Result), }) }) return vterrors.ToJSONError(vtgErr) }
// StreamExecuteKeyRanges is the RPC version of // vtgateservice.VTGateService method func (vtg *VTGateP3) StreamExecuteKeyRanges(ctx context.Context, request *pb.StreamExecuteKeyRangesRequest, sendReply func(interface{}) error) (err error) { defer vtg.server.HandlePanic(&err) ctx = callerid.NewContext(ctx, request.CallerId, callerid.NewImmediateCallerID("gorpc client")) return vtg.server.StreamExecuteKeyRanges(ctx, string(request.Query.Sql), tproto.Proto3ToBindVariables(request.Query.BindVariables), request.Keyspace, key.ProtoToKeyRanges(request.KeyRanges), request.TabletType, func(reply *proto.QueryResult) error { return sendReply(&pb.StreamExecuteKeyRangesResponse{ Error: vtgate.VtGateErrorToVtRPCError(nil, reply.Error), Result: mproto.QueryResultToProto3(reply.Result), }) }) }
// StreamExecuteKeyspaceIds is the RPC version of // vtgateservice.VTGateService method func (vtg *VTGate) StreamExecuteKeyspaceIds(request *pb.StreamExecuteKeyspaceIdsRequest, stream pbs.Vitess_StreamExecuteKeyspaceIdsServer) (err error) { defer vtg.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.CallerId, callerid.NewImmediateCallerID("grpc client")) query := &proto.KeyspaceIdQuery{ Sql: string(request.Query.Sql), BindVariables: tproto.Proto3ToBindVariables(request.Query.BindVariables), Keyspace: request.Keyspace, KeyspaceIds: key.ProtoToKeyspaceIds(request.KeyspaceIds), TabletType: topo.ProtoToTabletType(request.TabletType), } return vtg.server.StreamExecuteKeyspaceIds(ctx, query, func(value *proto.QueryResult) error { return stream.Send(&pb.StreamExecuteKeyspaceIdsResponse{ Result: mproto.QueryResultToProto3(value.Result), }) }) }
// Execute is part of the queryservice.QueryServer interface func (q *query) Execute(ctx context.Context, request *pb.ExecuteRequest) (response *pb.ExecuteResponse, err error) { defer q.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.EffectiveCallerId, request.ImmediateCallerId, ) reply := new(mproto.QueryResult) if err := q.server.Execute(ctx, request.Target, &proto.Query{ Sql: string(request.Query.Sql), BindVariables: proto.Proto3ToBindVariables(request.Query.BindVariables), SessionId: request.SessionId, TransactionId: request.TransactionId, }, reply); err != nil { return nil, grpc.Errorf(codes.Internal, "%v", err) } return &pb.ExecuteResponse{ Result: mproto.QueryResultToProto3(reply), }, nil }
// Execute is part of the queryservice.QueryServer interface func (q *query) Execute(ctx context.Context, request *pb.ExecuteRequest) (response *pb.ExecuteResponse, err error) { defer q.server.HandlePanic(&err) ctx = callinfo.GRPCCallInfo(ctx) reply := new(mproto.QueryResult) execErr := q.server.Execute(ctx, &proto.Query{ Sql: string(request.Query.Sql), BindVariables: proto.Proto3ToBindVariables(request.Query.BindVariables), SessionId: request.SessionId, TransactionId: request.TransactionId, }, reply) if execErr != nil { return &pb.ExecuteResponse{ Error: tabletserver.TabletErrorToRPCError(execErr), }, nil } return &pb.ExecuteResponse{ Result: mproto.QueryResultToProto3(reply), }, nil }
// StreamExecuteKeyRanges is the RPC version of // vtgateservice.VTGateService method func (vtg *VTGate) StreamExecuteKeyRanges(request *pb.StreamExecuteKeyRangesRequest, stream pbs.Vitess_StreamExecuteKeyRangesServer) (err error) { defer vtg.server.HandlePanic(&err) ctx := callerid.NewContext(callinfo.GRPCCallInfo(stream.Context()), request.CallerId, callerid.NewImmediateCallerID("grpc client")) bv, err := tproto.Proto3ToBindVariables(request.Query.BindVariables) if err != nil { return vterrors.ToGRPCError(err) } vtgErr := vtg.server.StreamExecuteKeyRanges(ctx, string(request.Query.Sql), bv, request.Keyspace, request.KeyRanges, request.TabletType, func(value *proto.QueryResult) error { return stream.Send(&pb.StreamExecuteKeyRangesResponse{ Result: mproto.QueryResultToProto3(value.Result), }) }) return vterrors.ToGRPCError(vtgErr) }