code: func (p *requiredProperty) getHashKey() ([]byte, error) {
  	datums := make([]types.Datum, 0, len(p.props)*3+1)
  	datums = append(datums, types.NewDatum(p.sortKeyLen))
  	for _, c := range p.props {
  		datums = append(datums, types.NewDatum(c.desc), types.NewDatum(c.col.FromID), types.NewDatum(c.col.Index))
  	}
  	bytes, err := codec.EncodeValue(nil, datums...)
  	return bytes, errors.Trace(err)
  }
docs: // getHashKey encodes a requiredProperty to a unique hash code.