code: func GetParamExpression(ctx sessionctx.Context, v *driver.ParamMarkerExpr) (Expression, error) {
  	useCache := ctx.GetSessionVars().StmtCtx.UseCache
  	tp := types.NewFieldType(mysql.TypeUnspecified)
  	types.DefaultParamTypeForValue(v.GetValue(), tp)
  	value := &Constant{Value: v.Datum, RetType: tp}
  	if useCache {
  		f, err := NewFunctionBase(ctx, ast.GetParam, &v.Type,
  			DatumToConstant(types.NewIntDatum(int64(v.Order)), mysql.TypeLonglong))
  		if err != nil {
  			return nil, err
  		}
  		f.GetType().Tp = v.Type.Tp
  		value.DeferredExpr = f
  	}
  	return value, nil
  }
docs: // GetParamExpression generate a getparam function expression.