func (e *XSelectIndexExec) doTableRequest(handles []int64) (distsql.SelectResult, error) { // The handles are not in original index order, so we can't push limit here. selTableReq := new(tipb.SelectRequest) if e.indexPlan.OutOfOrder { selTableReq.Limit = e.indexPlan.LimitCount } selTableReq.StartTs = e.startTS selTableReq.TimeZoneOffset = proto.Int64(timeZoneOffset()) selTableReq.TableInfo = &tipb.TableInfo{ TableId: e.table.Meta().ID, } selTableReq.TableInfo.Columns = distsql.ColumnsToProto(e.indexPlan.Columns, e.table.Meta().PKIsHandle) selTableReq.Where = e.where // Aggregate Info selTableReq.Aggregates = e.aggFuncs selTableReq.GroupBy = e.byItems keyRanges := tableHandlesToKVRanges(e.table.Meta().ID, handles) concurrency, err := getScanConcurrency(e.ctx) if err != nil { return nil, errors.Trace(err) } resp, err := distsql.Select(e.ctx.GetClient(), selTableReq, keyRanges, concurrency, false) if err != nil { return nil, errors.Trace(err) } if e.aggregate { // The returned rows should be aggregate partial result. resp.SetFields(e.aggFields) } resp.Fetch() return resp, nil }
// doRequest sends a *tipb.SelectRequest via kv.Client and gets the distsql.SelectResult. func (e *XSelectTableExec) doRequest() error { var err error selReq := new(tipb.SelectRequest) selReq.StartTs = e.startTS selReq.TimeZoneOffset = timeZoneOffset() selReq.Flags = statementContextToFlags(e.ctx.GetSessionVars().StmtCtx) selReq.Where = e.where selReq.TableInfo = &tipb.TableInfo{ TableId: e.tableInfo.ID, Columns: distsql.ColumnsToProto(e.Columns, e.tableInfo.PKIsHandle), } if len(e.orderByList) > 0 { selReq.OrderBy = e.orderByList } else if e.supportDesc && e.desc { selReq.OrderBy = []*tipb.ByItem{{Desc: e.desc}} } selReq.Limit = e.limitCount // Aggregate Info selReq.Aggregates = e.aggFuncs selReq.GroupBy = e.byItems kvRanges := tableRangesToKVRanges(e.table.Meta().ID, e.ranges) concurrency := e.scanConcurrency e.result, err = distsql.Select(e.ctx.GetClient(), selReq, kvRanges, concurrency, e.keepOrder) if err != nil { return errors.Trace(err) } //if len(selReq.Aggregates) > 0 || len(selReq.GroupBy) > 0 { if e.aggregate { // The returned rows should be aggregate partial result. e.result.SetFields(e.aggFields) } e.result.Fetch() return nil }