Merge pull request '表达式计算函数注释' (#14) from Rorre/openGauss-server:master into master

This commit is contained in:
xiangxinyong 2022-10-30 14:18:22 +08:00
commit defd901624
1 changed files with 24 additions and 0 deletions

View File

@ -1901,6 +1901,13 @@ static void set_result_for_plpgsql_language_function_with_outparam(FuncExprState
* @bool has_cursor_return - need store out-args cursor info.
* @bool has_refcursor - need store in-args cursor info.
* @bool isSetReturnFunc - indicate function returns a set.
*The execution process of the ExecMakeFunctionResult function is as follows.
* (1) Check whether funcResultStore exists, if so, get the result and return it
(2) The calculated parameter values are stored in fcinfo.
(3) Pass the parameter into the expression function to calculate the expression,
first determine whether the parameter args exists null, and then determine the return mode of the function that returns the set,
SFRM_ValuePerCall mode is to return a value each time the call, The SFRM_Materialize schema is the result set instantiated in Tuplestore.
(4) Calculate and return results according to different modes.
*/
template <bool has_refcursor, bool has_cursor_return, bool isSetReturnFunc>
static Datum ExecMakeFunctionResult(FuncExprState* fcache, ExprContext* econtext, bool* isNull, ExprDoneCond* isDone)
@ -3082,6 +3089,10 @@ no_function_result:
/* ----------------------------------------------------------------
* ExecEvalFunc
* ----------------------------------------------------------------
*The execution process of the ExecEvalFunc function is as follows.
(1) Initialize the FuncExprState node by init_fcache function, including initialization parameters, memory management, etc.
(2) Judge whether the returned result is of set type according to the data in the FuncExprState function,
and call the corresponding function to calculate the result.
*/
static Datum ExecEvalFunc(FuncExprState* fcache, ExprContext* econtext, bool* isNull, ExprDoneCond* isDone)
{
@ -3526,6 +3537,10 @@ static Datum ExecEvalNot(BoolExprState* notclause, ExprContext* econtext, bool*
/* ----------------------------------------------------------------
* ExecEvalOr
* ----------------------------------------------------------------
*The main execution process of ExecEvalOr function is as follows.
(1) Traverse child expression clauses.
(2) Use the function ExecEvalExpr to call the expression calculation function in clause and calculate the result.
(3) To judge the results, if there is a result in the or expression that meets the conditions, it will jump out of the loop and return directly.
*/
static Datum ExecEvalOr(BoolExprState* orExpr, ExprContext* econtext, bool* isNull, ExprDoneCond* isDone)
{
@ -5164,6 +5179,11 @@ Datum ExecEvalExprSwitchContext(ExprState* expression, ExprContext* econtext, bo
* 'parent' may be NULL if we are preparing an expression that is not
* associated with a plan tree. (If so, it can't have aggs or subplans.)
* This case should usually come through ExecPrepareExpr, not directly here.
*The execution process of the ExecInitExpr function is as follows.
(1) Determine whether the input node is empty. If it is empty,return NULL directly, indicating that there is no restriction for expression.
(2) According to the type of node input,Initialize variable evalfunc which is the execution function corresponding to node,
If the node has parameters or expressions, the function ExecInitExpr will be recursively called and ExprState tree will be generated.
(3) Return ExprState tree, and execute the expression recursively according to ExprState tree.
*/
ExprState* ExecInitExpr(Expr* node, PlanState* parent)
{
@ -6123,6 +6143,10 @@ Datum fetch_lob_value_from_tuple(varatt_lob_pointer* lob_pointer, Oid update_oid
* of *isDone = ExprMultipleResult signifies a set element, and a return
* of *isDone = ExprEndResult signifies end of the set of tuple.
* We assume that *isDone has been initialized to ExprSingleResult by caller.
* The execution process of the ExecTargetList function is as follows.
(1) Iterate over the expressions in targetlist.
(2) Calculation of expression results.
(3) Judge the itemIsDone[resind] parameter in the results and generate the final tuple.
*/
static bool ExecTargetList(List* targetlist, ExprContext* econtext, Datum* values, bool* isnull,
ExprDoneCond* itemIsDone, ExprDoneCond* isDone)