func (e *NewXSelectTableExec) doRequest() error { txn, err := e.ctx.GetTxn(false) if err != nil { return errors.Trace(err) } selReq := new(tipb.SelectRequest) startTs := txn.StartTS() selReq.StartTs = &startTs selReq.Where = e.where selReq.Ranges = tableRangesToPBRanges(e.ranges) columns := e.Columns selReq.TableInfo = &tipb.TableInfo{ TableId: proto.Int64(e.tableInfo.ID), } if e.supportDesc && e.desc { selReq.OrderBy = append(selReq.OrderBy, &tipb.ByItem{Desc: &e.desc}) } selReq.Limit = e.limitCount selReq.TableInfo.Columns = xapi.ColumnsToProto(columns, e.tableInfo.PKIsHandle) // Aggregate Info selReq.Aggregates = e.aggFuncs selReq.GroupBy = e.byItems e.result, err = xapi.Select(txn.GetClient(), selReq, defaultConcurrency) 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) } return nil }
func (e *NewXSelectIndexExec) doTableRequest(handles []int64) (*xapi.SelectResult, error) { txn, err := e.ctx.GetTxn(false) if err != nil { return nil, errors.Trace(err) } // The handles are not in original index order, so we can't push limit here. selTableReq := new(tipb.SelectRequest) startTs := txn.StartTS() selTableReq.StartTs = &startTs selTableReq.TableInfo = &tipb.TableInfo{ TableId: proto.Int64(e.table.Meta().ID), } selTableReq.TableInfo.Columns = xapi.ColumnsToProto(e.indexPlan.Columns, e.table.Meta().PKIsHandle) for _, h := range handles { if h == math.MaxInt64 { // We can't convert MaxInt64 into an left closed, right open range. continue } pbRange := new(tipb.KeyRange) pbRange.Low = codec.EncodeInt(nil, h) pbRange.High = kv.Key(pbRange.Low).PrefixNext() selTableReq.Ranges = append(selTableReq.Ranges, pbRange) } selTableReq.Where = e.where // Aggregate Info resp, err := xapi.Select(txn.GetClient(), selTableReq, defaultConcurrency) if err != nil { return nil, errors.Trace(err) } return resp, nil }
func (e *XSelectTableExec) doRequest() error { var err error selReq := new(tipb.SelectRequest) selReq.StartTs = e.txn.StartTS() selReq.Where = e.where columns := e.Columns selReq.TableInfo = &tipb.TableInfo{ TableId: e.tableInfo.ID, } if e.supportDesc && e.desc { selReq.OrderBy = append(selReq.OrderBy, &tipb.ByItem{Desc: e.desc}) } selReq.Limit = e.limitCount selReq.TableInfo.Columns = xapi.ColumnsToProto(columns, e.tableInfo.PKIsHandle) // Aggregate Info selReq.Aggregates = e.aggFuncs selReq.GroupBy = e.byItems kvRanges := tableRangesToKVRanges(e.table.Meta().ID, e.ranges) e.result, err = xapi.Select(e.txn.GetClient(), selReq, kvRanges, defaultConcurrency, 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 }
func (e *XSelectIndexExec) doTableRequest(handles []int64) (xapi.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.txn.StartTS() selTableReq.TableInfo = &tipb.TableInfo{ TableId: e.table.Meta().ID, } selTableReq.TableInfo.Columns = xapi.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) resp, err := xapi.Select(e.txn.GetClient(), selTableReq, keyRanges, defaultConcurrency, 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 }
func (e *NewXSelectIndexExec) doTableRequest(handles []int64) (xapi.SelectResult, error) { // The handles are not in original index order, so we can't push limit here. selTableReq := new(tipb.SelectRequest) selTableReq.StartTs = e.txn.StartTS() selTableReq.TableInfo = &tipb.TableInfo{ TableId: e.table.Meta().ID, } selTableReq.TableInfo.Columns = xapi.ColumnsToProto(e.indexPlan.Columns, e.table.Meta().PKIsHandle) for _, h := range handles { if h == math.MaxInt64 { // We can't convert MaxInt64 into an left closed, right open range. continue } pbRange := new(tipb.KeyRange) pbRange.Low = codec.EncodeInt(nil, h) pbRange.High = kv.Key(pbRange.Low).PrefixNext() selTableReq.Ranges = append(selTableReq.Ranges, pbRange) } selTableReq.Where = e.where // Aggregate Info selTableReq.Aggregates = e.aggFuncs selTableReq.GroupBy = e.byItems // Aggregate Info resp, err := xapi.Select(e.txn.GetClient(), selTableReq, defaultConcurrency, 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 }
func (e *XSelectIndexExec) doTableRequest(handles []int64) (*xapi.SelectResult, error) { txn, err := e.ctx.GetTxn(false) if err != nil { return nil, errors.Trace(err) } // The handles are not in original index order, so we can't push limit here. selTableReq := new(tipb.SelectRequest) startTs := txn.StartTS() selTableReq.StartTs = &startTs columns := make([]*model.ColumnInfo, 0, len(e.indexPlan.Fields())) for _, v := range e.indexPlan.Fields() { if v.Referenced { columns = append(columns, v.Column) } } selTableReq.TableInfo = &tipb.TableInfo{ TableId: proto.Int64(e.table.Meta().ID), } selTableReq.TableInfo.Columns = xapi.ColumnsToProto(columns, e.table.Meta().PKIsHandle) selTableReq.Fields = resultFieldsToPBExpression(e.indexPlan.Fields()) for _, h := range handles { if h == math.MaxInt64 { // We can't convert MaxInt64 into an left closed, right open range. continue } pbRange := new(tipb.KeyRange) pbRange.Low = codec.EncodeInt(nil, h) pbRange.High = kv.Key(pbRange.Low).PrefixNext() selTableReq.Ranges = append(selTableReq.Ranges, pbRange) } selTableReq.Where = e.where // Aggregate Info selTableReq.Aggregates = e.aggFuncs selTableReq.GroupBy = e.byItems resp, err := xapi.Select(txn.GetClient(), selTableReq, defaultConcurrency) if err != nil { return nil, errors.Trace(err) } if e.aggregate { // The returned rows should be aggregate partial result. resp.SetFields(e.aggFields) } return resp, nil }
func (e *XSelectTableExec) doRequest() error { txn, err := e.ctx.GetTxn(false) if err != nil { return errors.Trace(err) } selReq := new(tipb.SelectRequest) startTs := txn.StartTS() selReq.StartTs = &startTs selReq.Fields = resultFieldsToPBExpression(e.tablePlan.Fields()) selReq.Where = e.where selReq.Ranges = tableRangesToPBRanges(e.tablePlan.Ranges) if e.supportDesc { if e.tablePlan.Desc { selReq.OrderBy = append(selReq.OrderBy, &tipb.ByItem{Desc: &e.tablePlan.Desc}) } // Limit can be pushed only if desc is supported. if e.allFiltersPushed { selReq.Limit = e.tablePlan.LimitCount } } columns := make([]*model.ColumnInfo, 0, len(e.tablePlan.Fields())) for _, v := range e.tablePlan.Fields() { if v.Referenced { columns = append(columns, v.Column) } } selReq.TableInfo = &tipb.TableInfo{ TableId: proto.Int64(e.table.Meta().ID), } selReq.TableInfo.Columns = xapi.ColumnsToProto(columns, e.table.Meta().PKIsHandle) // Aggregate Info selReq.Aggregates = e.aggFuncs selReq.GroupBy = e.byItems e.result, err = xapi.Select(txn.GetClient(), selReq, defaultConcurrency) if err != nil { return errors.Trace(err) } if len(selReq.Aggregates) > 0 || len(selReq.GroupBy) > 0 { // The returned rows should be aggregate partial result. e.result.SetFields(e.aggFields) } return nil }
func (e *NewTableScanExec) doRequest() error { txn, err := e.ctx.GetTxn(false) if err != nil { return errors.Trace(err) } selReq := new(tipb.SelectRequest) startTs := txn.StartTS() selReq.StartTs = &startTs selReq.Where = e.where selReq.Ranges = tableRangesToPBRanges(e.ranges) columns := e.Columns selReq.TableInfo = &tipb.TableInfo{ TableId: proto.Int64(e.tableInfo.ID), } selReq.TableInfo.Columns = xapi.ColumnsToProto(columns, e.tableInfo.PKIsHandle) e.result, err = xapi.Select(txn.GetClient(), selReq, defaultConcurrency) if err != nil { return errors.Trace(err) } return nil }