mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
Track in the plan the types associated with PARAM_EXEC parameters.
Up until now, we only tracked the number of parameters, which was sufficient to allocate an array of Datums of the appropriate size, but not sufficient to, for example, know how to serialize a Datum stored in one of those slots. An upcoming patch wants to do that, so add this tracking to make it possible. Patch by me, reviewed by Tom Lane and Amit Kapila. Discussion: http://postgr.es/m/CA+TgmoYqpxDKn8koHdW8BEKk8FMUL0=e8m2Qe=M+r0UBjr3tuQ@mail.gmail.com
This commit is contained in:
@ -195,9 +195,14 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags)
|
||||
*/
|
||||
estate->es_param_list_info = queryDesc->params;
|
||||
|
||||
if (queryDesc->plannedstmt->nParamExec > 0)
|
||||
if (queryDesc->plannedstmt->paramExecTypes != NIL)
|
||||
{
|
||||
int nParamExec;
|
||||
|
||||
nParamExec = list_length(queryDesc->plannedstmt->paramExecTypes);
|
||||
estate->es_param_exec_vals = (ParamExecData *)
|
||||
palloc0(queryDesc->plannedstmt->nParamExec * sizeof(ParamExecData));
|
||||
palloc0(nParamExec * sizeof(ParamExecData));
|
||||
}
|
||||
|
||||
estate->es_sourceText = queryDesc->sourceText;
|
||||
|
||||
@ -3032,9 +3037,11 @@ EvalPlanQualBegin(EPQState *epqstate, EState *parentestate)
|
||||
MemSet(estate->es_epqScanDone, 0, rtsize * sizeof(bool));
|
||||
|
||||
/* Recopy current values of parent parameters */
|
||||
if (parentestate->es_plannedstmt->nParamExec > 0)
|
||||
if (parentestate->es_plannedstmt->paramExecTypes != NIL)
|
||||
{
|
||||
int i = parentestate->es_plannedstmt->nParamExec;
|
||||
int i;
|
||||
|
||||
i = list_length(parentestate->es_plannedstmt->paramExecTypes);
|
||||
|
||||
while (--i >= 0)
|
||||
{
|
||||
@ -3122,10 +3129,11 @@ EvalPlanQualStart(EPQState *epqstate, EState *parentestate, Plan *planTree)
|
||||
* already set from other parts of the parent's plan tree.
|
||||
*/
|
||||
estate->es_param_list_info = parentestate->es_param_list_info;
|
||||
if (parentestate->es_plannedstmt->nParamExec > 0)
|
||||
if (parentestate->es_plannedstmt->paramExecTypes != NIL)
|
||||
{
|
||||
int i = parentestate->es_plannedstmt->nParamExec;
|
||||
int i;
|
||||
|
||||
i = list_length(parentestate->es_plannedstmt->paramExecTypes);
|
||||
estate->es_param_exec_vals = (ParamExecData *)
|
||||
palloc0(i * sizeof(ParamExecData));
|
||||
while (--i >= 0)
|
||||
|
Reference in New Issue
Block a user