code: func (e *ShowExec) bucketsToRows(dbName, tblName, partitionName, colName string, numOfCols int, hist statistics.Histogram) error {
  	isIndex := 0
  	if numOfCols > 0 {
  		isIndex = 1
  	}
  	for i := 0; i < hist.Len(); i++ {
  		lowerBoundStr, err := statistics.ValueToString(hist.GetLower(i), numOfCols)
  		if err != nil {
  			return errors.Trace(err)
  		}
  		upperBoundStr, err := statistics.ValueToString(hist.GetUpper(i), numOfCols)
  		if err != nil {
  			return errors.Trace(err)
  		}
  		e.appendRow([]interface{}{
  			dbName,
  			tblName,
  			partitionName,
  			colName,
  			isIndex,
  			i,
  			hist.Buckets[i].Count,
  			hist.Buckets[i].Repeat,
  			lowerBoundStr,
  			upperBoundStr,
  		})
  	}
  	return nil
  }
docs: // bucketsToRows converts histogram buckets to rows. If the histogram is built from index, then numOfCols equals to number
  // of index columns, else numOfCols is 0.