On 02.08.2011 12:54, Ashutosh Bapat wrote:
> Hi All,
> I am looking at usage of bound parameters.
>
> In functions SPI_cursor_open_with_args() and SPI_cursor_open_with_args()
> parameters are flagged as constants and passed to the planner in following
> manner,
> paramLI = _SPI_convert_params(nargs, argtypes,
> Values, Nulls,
> PARAM_FLAG_CONST);
>
> _SPI_prepare_plan(src,&plan, paramLI);
>
> The bound params "paramLI" are then passed to the planner as boundParams.
> Before actually planning the query, these parameters are evaluated duing
> constant evaluation (eval_const_expressions_mutator()), and the Param nodes
> are replaced with Constant nodes.
> Further, while executing such queries we pass the paramLI structure to the
> execution routine e.g. _SPI_execute_plan(). These parameter values are
> stored in "EState" structure. But, since these parameters are already folded
> into queries, it looks like parameter values stored in EState are never
> used.
>
> Is this correct? Or somewhere we use those parameter values?
That is correct, at the moment. PARAM_FLAG_CONST means that the planner
is free evaluate the params during planning, but it doesn't have to. You
still need to pass the params in _SPI_execute_plan() in case the planner
decided to not convert some params to Consts, even though as the code
stands today it always will.
-- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com