func boundShardQueriesToScatterBatchRequest(boundQueries []*vtgatepb.BoundShardQuery) (*scatterBatchRequest, error) { requests := &scatterBatchRequest{ Length: len(boundQueries), Requests: make(map[string]*shardBatchRequest), } for i, boundQuery := range boundQueries { for shard := range unique(boundQuery.Shards) { key := boundQuery.Keyspace + ":" + shard request := requests.Requests[key] if request == nil { request = &shardBatchRequest{ Keyspace: boundQuery.Keyspace, Shard: shard, } requests.Requests[key] = request } bq, err := querytypes.Proto3ToBoundQuery(boundQuery.Query) if err != nil { return nil, err } request.Queries = append(request.Queries, *bq) request.ResultIndexes = append(request.ResultIndexes, i) } } return requests, nil }
// SplitQuery is part of the queryservice.QueryServer interface func (q *query) SplitQuery(ctx context.Context, request *querypb.SplitQueryRequest) (response *querypb.SplitQueryResponse, err error) { defer q.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.EffectiveCallerId, request.ImmediateCallerId, ) bq, err := querytypes.Proto3ToBoundQuery(request.Query) if err != nil { return nil, vterrors.ToGRPCError(err) } splits := []querytypes.QuerySplit{} splits, err = queryservice.CallCorrectSplitQuery( q.server, request.UseSplitQueryV2, ctx, request.Target, bq.Sql, bq.BindVariables, request.SplitColumn, request.SplitCount, request.NumRowsPerQueryPart, request.Algorithm) if err != nil { return nil, vterrors.ToGRPCError(err) } qs, err := querytypes.QuerySplitsToProto3(splits) if err != nil { return nil, vterrors.ToGRPCError(err) } return &querypb.SplitQueryResponse{Queries: qs}, nil }
// SplitQuery is part of the queryservice.QueryServer interface func (q *query) SplitQuery(ctx context.Context, request *querypb.SplitQueryRequest) (response *querypb.SplitQueryResponse, err error) { defer q.server.HandlePanic(&err) ctx = callerid.NewContext(callinfo.GRPCCallInfo(ctx), request.EffectiveCallerId, request.ImmediateCallerId, ) bq, err := querytypes.Proto3ToBoundQuery(request.Query) if err != nil { return nil, tabletserver.ToGRPCError(err) } splits, err := q.server.SplitQuery(ctx, request.Target, bq.Sql, bq.BindVariables, request.SplitColumn, request.SplitCount, request.SessionId) if err != nil { return nil, tabletserver.ToGRPCError(err) } qs, err := querytypes.QuerySplitsToProto3(splits) if err != nil { return nil, tabletserver.ToGRPCError(err) } return &querypb.SplitQueryResponse{Queries: qs}, nil }