code: func CutRowNew(data []byte, colIDs map[int64]int) ([][]byte, error) {
  	if data == nil {
  		return nil, nil
  	}
  	if len(data) == 1 && data[0] == codec.NilFlag {
  		return nil, nil
  	}
  
  	var (
  		cnt int
  		b   []byte
  		err error
  		cid int64
  	)
  	row := make([][]byte, len(colIDs))
  	for len(data) > 0 && cnt < len(colIDs) {
  		// Get col id.
  		data, cid, err = codec.CutColumnID(data)
  		if err != nil {
  			return nil, errors.Trace(err)
  		}
  
  		// Get col value.
  		b, data, err = codec.CutOne(data)
  		if err != nil {
  			return nil, errors.Trace(err)
  		}
  
  		offset, ok := colIDs[cid]
  		if ok {
  			row[offset] = b
  			cnt++
  		}
  	}
  	return row, nil
  }
docs: // CutRowNew cuts encoded row into byte slices and return columns' byte slice.
  // Row layout: colID1, value1, colID2, value2, .....