code: func (t *partitionedTable) locateHashPartition(ctx sessionctx.Context, pi *model.PartitionInfo, r []types.Datum) (int, error) {
  	ret, isNull, err := t.partitionExpr.Expr.EvalInt(ctx, chunk.MutRowFromDatums(r).ToRow())
  	if err != nil {
  		return 0, err
  	}
  	if isNull {
  		return 0, nil
  	}
  	if ret < 0 {
  		ret = 0 - ret
  	}
  	return int(ret % int64(t.meta.Partition.Num)), nil
  }
docs: // TODO: supports linear hashing