Re: Evaluate arguments of correlated SubPlans in the referencing ExprState - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Evaluate arguments of correlated SubPlans in the referencing ExprState
Date
Msg-id 2129737.1677785615@sss.pgh.pa.us
Whole thread Raw
In response to Evaluate arguments of correlated SubPlans in the referencing ExprState  (Andres Freund <andres@anarazel.de>)
Responses Re: Evaluate arguments of correlated SubPlans in the referencing ExprState  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
Andres Freund <andres@anarazel.de> writes:
> Around
> https://www.postgresql.org/message-id/20230224015417.75yimxbksejpffh3%40awork3.anarazel.de
> I suggested that we should evaluate the arguments of correlated SubPlans as
> part of the expression referencing the subplan.

> Here's a patch for that.

I looked through this, and there is one point that is making me really
uncomfortable.  This bit is assuming that we can bind the address of
the es_param_exec_vals array right into the compiled expression:

+        ParamExecData *prm = &estate->es_param_exec_vals[paramid];
+
+        ExecInitExprRec(lfirst(pvar), state, &prm->value, &prm->isnull);

Even if that works today, it'd kill the ability to use the compiled
expression across more than one executor instance, which seems like
a pretty high price.  Also, I think it probably fails already in
EvalPlanQual contexts, because EvalPlanQualStart allocates a separate
es_param_exec_vals array for EPQ execution.

I think we'd be better off inventing an EEOP_SET_PARAM_EXEC step type
that is essentially the inverse of EEOP_PARAM_EXEC/ExecEvalParamExec,
and then evaluating each parameter value into the expression's
scratch Datum/isnull fields and emitting SET_PARAM_EXEC to copy those
to the correct ParamExecData slot.

            regards, tom lane



pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: Memory leak from ExecutorState context?
Next
From: Tom Lane
Date:
Subject: Re: Operation log for major operations