68 Datum *resv,
bool *resnull);
70 Oid funcid,
Oid inputcollid,
81 Datum *resv,
bool *resnull);
85 Datum *resv,
bool *resnull);
89 int transno,
int setno,
int setoff,
bool ishash,
92 Datum *resv,
bool *resnull,
96 Datum *resv,
bool *resnull);
146 state->parent = parent;
147 state->ext_params = NULL;
183 state->parent = NULL;
184 state->ext_params = ext_params;
234 state->parent = parent;
235 state->ext_params = NULL;
267 state->steps_len - 1);
377 state->parent = parent;
378 state->ext_params = NULL;
380 state->resultslot = slot;
386 foreach(lc, targetList)
391 bool isSafeVar =
false;
401 if (tle->
expr != NULL &&
403 ((
Var *) tle->
expr)->varattno > 0)
409 if (inputDesc == NULL)
411 else if (attnum <= inputDesc->natts)
420 if (!attr->attisdropped &&
variable->vartype == attr->atttypid)
548 state->parent = parent;
549 state->ext_params = NULL;
551 state->resultslot = slot;
559 foreach(lc, targetList)
568 elog(
ERROR,
"subplan target list is out of order");
575 elog(
ERROR,
"targetColnos does not match subplan target list");
583 foreach(lc, targetColnos)
599 if (attr->attisdropped)
627 forboth(lc, targetList, lc2, targetColnos)
638 if (targetattnum <= 0 || targetattnum > relDesc->
natts)
640 (
errcode(ERRCODE_DATATYPE_MISMATCH),
641 errmsg(
"table row type and query-specified row type do not match"),
642 errdetail(
"Query has too many columns.")));
645 if (attr->attisdropped)
647 (
errcode(ERRCODE_DATATYPE_MISMATCH),
648 errmsg(
"table row type and query-specified row type do not match"),
649 errdetail(
"Query provides a value for a dropped column at ordinal position %d.",
653 (
errcode(ERRCODE_DATATYPE_MISMATCH),
654 errmsg(
"table row type and query-specified row type do not match"),
655 errdetail(
"Table has type %s at ordinal position %d, but query expects %s.",
695 if (attr->attisdropped)
894 Datum *resv,
bool *resnull)
902 Assert(resv != NULL && resnull != NULL);
970 scratch.
d.
constval.value = con->constvalue;
971 scratch.
d.
constval.isnull = con->constisnull;
998 if (
state->ext_params)
999 params =
state->ext_params;
1000 else if (
state->parent &&
1001 state->parent->state)
1002 params =
state->parent->state->es_param_list_info;
1019 elog(
ERROR,
"unrecognized paramkind: %d",
1031 scratch.
d.
aggref.aggno = aggref->aggno;
1042 elog(
ERROR,
"Aggref found in non-Agg plan node");
1049 case T_GroupingFunc:
1056 elog(
ERROR,
"GroupingFunc found in non-Agg plan node");
1060 agg = (
Agg *) (
state->parent->plan);
1076 wfstate->
wfunc = wfunc;
1102 (
errcode(ERRCODE_WINDOWING_ERROR),
1103 errmsg(
"window function calls cannot be nested")));
1108 elog(
ERROR,
"WindowFunc found in non-WindowAgg plan node");
1117 case T_MergeSupportFunc:
1120 if (!
state->parent ||
1123 elog(
ERROR,
"MergeSupportFunc found in non-merge plan node");
1130 case T_SubscriptingRef:
1154 op->
args, op->opfuncid, op->inputcollid,
1160 case T_DistinctExpr:
1165 op->
args, op->opfuncid, op->inputcollid,
1187 op->
args, op->opfuncid, op->inputcollid,
1204 case T_ScalarArrayOpExpr:
1223 cmpfuncid = opexpr->negfuncid;
1226 cmpfuncid = opexpr->opfuncid;
1258 opexpr->inputcollid, NULL, NULL);
1345 foreach(lc, boolexpr->
args)
1353 switch (boolexpr->
boolop)
1360 else if (off + 1 == nargs)
1370 else if (off + 1 == nargs)
1389 state->steps_len - 1);
1394 foreach(lc, adjust_jumps)
1426 elog(
ERROR,
"SubPlan found with no parent plan");
1451 scratch.
d.
fieldselect.resulttype = fselect->resulttype;
1471 ncolumns = tupDesc->
natts;
1476 nulls = (
bool *)
palloc(
sizeof(
bool) * ncolumns);
1499 Datum *save_innermost_caseval;
1500 bool *save_innermost_casenull;
1502 if (fieldnum <= 0 || fieldnum > ncolumns)
1503 elog(
ERROR,
"field number %d is out of range in FieldStore",
1530 save_innermost_caseval =
state->innermost_caseval;
1531 save_innermost_casenull =
state->innermost_casenull;
1533 state->innermost_casenull = &nulls[fieldnum - 1];
1537 &nulls[fieldnum - 1]);
1539 state->innermost_caseval = save_innermost_caseval;
1540 state->innermost_casenull = save_innermost_casenull;
1582 if (
state->escontext == NULL)
1592 &iofunc, &typisvarlena);
1604 &iofunc, &typioparam);
1615 fcinfo_in = scratch.
d.
iocoerce.fcinfo_data_in;
1627 case T_ArrayCoerceExpr:
1639 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1640 errmsg(
"target type is not an array")));
1694 case T_ConvertRowtypeExpr:
1725 Datum *caseval = NULL;
1726 bool *casenull = NULL;
1734 if (caseExpr->
arg != NULL)
1738 casenull =
palloc(
sizeof(
bool));
1768 foreach(lc, caseExpr->
args)
1771 Datum *save_innermost_caseval;
1772 bool *save_innermost_casenull;
1785 save_innermost_caseval =
state->innermost_caseval;
1786 save_innermost_casenull =
state->innermost_casenull;
1787 state->innermost_caseval = caseval;
1788 state->innermost_casenull = casenull;
1793 state->innermost_caseval = save_innermost_caseval;
1794 state->innermost_casenull = save_innermost_casenull;
1798 scratch.
d.
jump.jumpdone = -1;
1800 whenstep =
state->steps_len - 1;
1810 scratch.
d.
jump.jumpdone = -1;
1818 state->steps_len - 1);
1824 state->steps[whenstep].d.jump.jumpdone =
state->steps_len;
1835 foreach(lc, adjust_jumps)
1847 case T_CaseTestExpr:
1882 (
bool *)
palloc(
sizeof(
bool) * nelems);
1886 scratch.
d.
arrayexpr.multidims = arrayexpr->multidims;
1887 scratch.
d.
arrayexpr.elemtype = arrayexpr->element_typeid;
1921 if (rowexpr->row_typeid == RECORDOID)
1944 Assert(nelems <= tupdesc->natts);
1945 nelems =
Max(nelems, tupdesc->
natts);
1952 scratch.
d.
row.tupdesc = tupdesc;
1955 scratch.
d.
row.elemvalues =
1957 scratch.
d.
row.elemnulls =
1958 (
bool *)
palloc(
sizeof(
bool) * nelems);
1960 memset(scratch.
d.
row.elemnulls,
true,
sizeof(
bool) * nelems);
1964 foreach(l, rowexpr->
args)
1969 if (!att->attisdropped)
1979 (
errcode(ERRCODE_DATATYPE_MISMATCH),
1980 errmsg(
"ROW() column has type %s instead of type %s",
1996 &scratch.
d.
row.elemvalues[
i],
1997 &scratch.
d.
row.elemnulls[
i]);
2006 case T_RowCompareExpr:
2029 l_right_expr, rcexpr->
rargs,
2030 l_opno, rcexpr->opnos,
2031 l_opfamily, rcexpr->opfamilies,
2032 l_inputcollid, rcexpr->inputcollids)
2055 elog(
ERROR,
"missing support function %d(%u,%u) in opfamily %u",
2064 inputcollid, NULL, NULL);
2089 state->steps_len - 1);
2110 foreach(lc, adjust_jumps)
2127 case T_CoalesceExpr:
2140 foreach(lc, coalesce->
args)
2149 scratch.
d.
jump.jumpdone = -1;
2153 state->steps_len - 1);
2163 foreach(lc, adjust_jumps)
2190 (
errcode(ERRCODE_UNDEFINED_FUNCTION),
2191 errmsg(
"could not identify a comparison function for type %s",
2207 minmaxexpr->inputcollid, NULL, NULL);
2214 (
bool *)
palloc(
sizeof(
bool) * nelems);
2215 scratch.
d.
minmax.nelems = nelems;
2218 scratch.
d.
minmax.finfo = finfo;
2219 scratch.
d.
minmax.fcinfo_data = fcinfo;
2223 foreach(lc, minmaxexpr->
args)
2228 &scratch.
d.
minmax.values[off],
2229 &scratch.
d.
minmax.nulls[off]);
2238 case T_SQLValueFunction:
2266 (
bool *)
palloc(
sizeof(
bool) * nnamed);
2270 scratch.
d.
xmlexpr.named_argvalue = NULL;
2271 scratch.
d.
xmlexpr.named_argnull = NULL;
2279 (
bool *)
palloc(
sizeof(
bool) * nargs);
2294 &scratch.
d.
xmlexpr.named_argvalue[off],
2295 &scratch.
d.
xmlexpr.named_argnull[off]);
2315 case T_JsonValueExpr:
2324 case T_JsonConstructorExpr:
2355 jcstate->
nargs = nargs;
2368 jcstate->
arg_values[argno] = con->constvalue;
2369 jcstate->
arg_nulls[argno] = con->constisnull;
2389 for (
int i = 0;
i < nargs;
i++)
2396 &category, &outfuncid);
2408 Datum *innermost_caseval =
state->innermost_caseval;
2409 bool *innermost_isnull =
state->innermost_casenull;
2411 state->innermost_caseval = resv;
2412 state->innermost_casenull = resnull;
2416 state->innermost_caseval = innermost_caseval;
2417 state->innermost_casenull = innermost_isnull;
2422 case T_JsonIsPredicate:
2458 if (ntest->argisrow)
2465 if (ntest->argisrow)
2472 elog(
ERROR,
"unrecognized nulltesttype: %d",
2522 elog(
ERROR,
"unrecognized booltesttype: %d",
2530 case T_CoerceToDomain:
2539 case T_CoerceToDomainValue:
2558 case T_CurrentOfExpr:
2565 case T_NextValueExpr:
2578 elog(
ERROR,
"unrecognized node type: %d",
2641 (
errcode(ERRCODE_TOO_MANY_ARGUMENTS),
2642 errmsg_plural(
"cannot pass more than %d argument to a function",
2643 "cannot pass more than %d arguments to a function",
2650 flinfo = scratch->
d.
func.finfo;
2651 fcinfo = scratch->
d.
func.fcinfo_data;
2659 nargs, inputcollid, NULL, NULL);
2663 scratch->
d.
func.nargs = nargs;
2668 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2669 errmsg(
"set-valued function called in context that cannot accept a set"),
2688 fcinfo->
args[argno].
value = con->constvalue;
2689 fcinfo->
args[argno].
isnull = con->constisnull;
2701 if (pgstat_track_functions <= flinfo->fn_stats)
2754 scratch.
d.
fetch.fixed =
false;
2755 scratch.
d.
fetch.kind = NULL;
2756 scratch.
d.
fetch.known_desc = NULL;
2764 scratch.
d.
fetch.fixed =
false;
2765 scratch.
d.
fetch.kind = NULL;
2766 scratch.
d.
fetch.known_desc = NULL;
2774 scratch.
d.
fetch.fixed =
false;
2775 scratch.
d.
fetch.kind = NULL;
2776 scratch.
d.
fetch.known_desc = NULL;
2798 elog(
ERROR,
"SubPlan found with no parent plan");
2890 bool isfixed =
false;
2897 if (op->
d.
fetch.known_desc != NULL)
2899 desc = op->
d.
fetch.known_desc;
2900 tts_ops = op->
d.
fetch.kind;
2901 isfixed = op->
d.
fetch.kind != NULL;
2958 if (isfixed && desc != NULL && tts_ops != NULL)
2960 op->
d.
fetch.fixed =
true;
2961 op->
d.
fetch.kind = tts_ops;
2962 op->
d.
fetch.known_desc = desc;
2966 op->
d.
fetch.fixed =
false;
2968 op->
d.
fetch.known_desc = NULL;
3013 case T_SubqueryScanState:
3016 case T_CteScanState:
3025 bool junk_filter_needed =
false;
3035 junk_filter_needed =
true;
3041 if (junk_filter_needed)
3074 (
errcode(ERRCODE_DATATYPE_MISMATCH),
3075 errmsg(
"cannot subscript type %s because it does not support subscripting",
3083 (nupper + nlower) * (
sizeof(
Datum) +
3093 ptr += nupper *
sizeof(
Datum);
3095 ptr += nlower *
sizeof(
Datum);
3097 ptr += nupper *
sizeof(
bool);
3099 ptr += nlower *
sizeof(
bool);
3101 ptr += nupper *
sizeof(
bool);
3111 memset(&methods, 0,
sizeof(methods));
3112 sbsroutines->
exec_setup(sbsref, sbsrefstate, &methods);
3130 scratch->
d.
jump.jumpdone = -1;
3133 state->steps_len - 1);
3191 state->steps_len - 1);
3196 Datum *save_innermost_caseval;
3197 bool *save_innermost_casenull;
3202 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3203 errmsg(
"type %s does not support subscripted assignment",
3224 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3225 errmsg(
"type %s does not support subscripted assignment",
3229 scratch->
d.
sbsref.state = sbsrefstate;
3234 save_innermost_caseval =
state->innermost_caseval;
3235 save_innermost_casenull =
state->innermost_casenull;
3243 state->innermost_caseval = save_innermost_caseval;
3244 state->innermost_casenull = save_innermost_casenull;
3249 scratch->
d.
sbsref.state = sbsrefstate;
3257 scratch->
d.
sbsref.state = sbsrefstate;
3262 foreach(lc, adjust_jumps)
3339 Datum *domainval = NULL;
3340 bool *domainnull = NULL;
3388 Datum *save_innermost_domainval;
3389 bool *save_innermost_domainnull;
3406 (
bool *)
palloc(
sizeof(
bool));
3413 if (domainval == NULL)
3425 domainnull = (
bool *)
palloc(
sizeof(
bool));
3430 scratch2.
resnull = domainnull;
3439 domainnull = resnull;
3449 save_innermost_domainval =
state->innermost_domainval;
3450 save_innermost_domainnull =
state->innermost_domainnull;
3451 state->innermost_domainval = domainval;
3452 state->innermost_domainnull = domainnull;
3459 state->innermost_domainval = save_innermost_domainval;
3460 state->innermost_domainnull = save_innermost_domainnull;
3468 elog(
ERROR,
"unrecognized constraint type: %d",
3491 bool doSort,
bool doHash,
bool nullcheck)
3500 state->parent = parent;
3509 for (
int transno = 0; transno < aggstate->
numtrans; transno++)
3529 for (
int transno = 0; transno < aggstate->
numtrans; transno++)
3535 bool *strictnulls = NULL;
3552 scratch.
d.
jump.jumpdone = -1;
3555 state->steps_len - 1);
3574 strictargs = trans_fcinfo->
args + 1;
3622 state->steps_len - 1);
3641 strictargs = trans_fcinfo->
args + 1;
3679 strictnulls = &
state->resnull;
3694 strictnulls = nulls;
3701 &
values[argno], &nulls[argno]);
3724 state->steps_len - 1);
3739 state->steps_len - 1);
3749 int processGroupingSets =
Max(phase->
numsets, 1);
3752 for (
int setno = 0; setno < processGroupingSets; setno++)
3755 pertrans, transno, setno, setoff,
false,
3772 for (
int setno = 0; setno < numHashes; setno++)
3775 pertrans, transno, setno, setoff,
true,
3782 foreach(
bail, adjust_bailout)
3832 int transno,
int setno,
int setoff,
bool ishash,
3836 int adjust_jumpnull = -1;
3851 adjust_jumpnull =
state->steps_len - 1;
3920 scratch->
d.
agg_trans.aggcontext = aggcontext;
3924 if (adjust_jumpnull != -1)
3950 const Oid *eqfunctions,
3951 const Oid *collations,
3969 state->parent = parent;
3975 for (
int natt = 0; natt < numCols; natt++)
3977 int attno = keyColIdx[natt];
3986 scratch.
d.
fetch.last_var = maxatt;
3987 scratch.
d.
fetch.fixed =
false;
3988 scratch.
d.
fetch.known_desc = ldesc;
3989 scratch.
d.
fetch.kind = lops;
3994 scratch.
d.
fetch.last_var = maxatt;
3995 scratch.
d.
fetch.fixed =
false;
3996 scratch.
d.
fetch.known_desc = rdesc;
3997 scratch.
d.
fetch.kind = rops;
4005 for (
int natt = numCols; --natt >= 0;)
4007 int attno = keyColIdx[natt];
4010 Oid foid = eqfunctions[natt];
4033 scratch.
d.
var.attnum = attno - 1;
4034 scratch.
d.
var.vartype = latt->atttypid;
4041 scratch.
d.
var.attnum = attno - 1;
4042 scratch.
d.
var.vartype = ratt->atttypid;
4049 scratch.
d.
func.finfo = finfo;
4050 scratch.
d.
func.fcinfo_data = fcinfo;
4052 scratch.
d.
func.nargs = 2;
4064 state->steps_len - 1);
4068 foreach(lc, adjust_jumps)
4106 const Oid *eqfunctions,
4107 const Oid *collations,
4108 const List *param_exprs,
4119 state->parent = parent;
4126 scratch.
d.
fetch.last_var = maxatt;
4127 scratch.
d.
fetch.fixed =
false;
4128 scratch.
d.
fetch.known_desc = desc;
4129 scratch.
d.
fetch.kind = lops;
4134 scratch.
d.
fetch.last_var = maxatt;
4135 scratch.
d.
fetch.fixed =
false;
4136 scratch.
d.
fetch.known_desc = desc;
4137 scratch.
d.
fetch.kind = rops;
4141 for (
int attno = 0; attno < maxatt; attno++)
4144 Oid foid = eqfunctions[attno];
4167 scratch.
d.
var.attnum = attno;
4168 scratch.
d.
var.vartype = att->atttypid;
4175 scratch.
d.
var.attnum = attno;
4176 scratch.
d.
var.vartype = att->atttypid;
4183 scratch.
d.
func.finfo = finfo;
4184 scratch.
d.
func.fcinfo_data = fcinfo;
4186 scratch.
d.
func.nargs = 2;
4198 state->steps_len - 1);
4202 foreach(lc, adjust_jumps)
4226 Datum *resv,
bool *resnull,
4232 List *jumps_return_null =
NIL;
4239 jsestate->
jsexpr = jsexpr;
4253 scratch->
d.
jump.jumpdone = -1;
4268 scratch->
d.
jump.jumpdone = -1;
4293 scratch->
d.
jsonexpr.jsestate = jsestate;
4301 foreach(lc, jumps_return_null)
4323 scratch->
d.
jump.jumpdone =
state->steps_len + 1;
4341 Datum *save_innermost_caseval;
4342 bool *save_innermost_casenull;
4347 save_innermost_caseval =
state->innermost_caseval;
4348 save_innermost_casenull =
state->innermost_casenull;
4349 save_escontext =
state->escontext;
4351 state->innermost_caseval = resv;
4352 state->innermost_casenull = resnull;
4353 state->escontext = escontext;
4357 state->innermost_caseval = save_innermost_caseval;
4358 state->innermost_casenull = save_innermost_casenull;
4359 state->escontext = save_escontext;
4407 scratch->
d.
jsonexpr.jsestate = jsestate;
4428 scratch->
d.
jump.jumpdone = -1;
4433 state, resv, resnull);
4443 scratch->
d.
jump.jumpdone = -1;
4461 scratch->
d.
jump.jumpdone = -1;
4466 state, resv, resnull);
4474 foreach(lc, jumps_to_end)
4491 Datum *resv,
bool *resnull)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode)
#define InvalidAttrNumber
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_add_member(Bitmapset *a, int x)
static Datum values[MAXATTR]
#define Assert(condition)
#define OidIsValid(objectId)
int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
int errdetail(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void ExecReadyInterpretedExpr(ExprState *state)
static void ExecInitJsonCoercion(ExprState *state, JsonReturning *returning, ErrorSaveContext *escontext, Datum *resv, bool *resnull)
static void ExecInitCoerceToDomain(ExprEvalStep *scratch, CoerceToDomain *ctest, ExprState *state, Datum *resv, bool *resnull)
ExprState * ExecPrepareExpr(Expr *node, EState *estate)
bool ExecCheck(ExprState *state, ExprContext *econtext)
static void ExecPushExprSetupSteps(ExprState *state, ExprSetupInfo *info)
static void ExecInitExprRec(Expr *node, ExprState *state, Datum *resv, bool *resnull)
static void ExecBuildAggTransCall(ExprState *state, AggState *aggstate, ExprEvalStep *scratch, FunctionCallInfo fcinfo, AggStatePerTrans pertrans, int transno, int setno, int setoff, bool ishash, bool nullcheck)
ExprState * ExecInitExprWithParams(Expr *node, ParamListInfo ext_params)
static void ExecInitWholeRowVar(ExprEvalStep *scratch, Var *variable, ExprState *state)
List * ExecInitExprList(List *nodes, PlanState *parent)
void ExprEvalPushStep(ExprState *es, const ExprEvalStep *s)
ProjectionInfo * ExecBuildUpdateProjection(List *targetList, bool evalTargetList, List *targetColnos, TupleDesc relDesc, ExprContext *econtext, TupleTableSlot *slot, PlanState *parent)
struct ExprSetupInfo ExprSetupInfo
ExprState * ExecBuildAggTrans(AggState *aggstate, AggStatePerPhase phase, bool doSort, bool doHash, bool nullcheck)
ExprState * ExecInitQual(List *qual, PlanState *parent)
static bool isAssignmentIndirectionExpr(Expr *expr)
static void ExecInitSubscriptingRef(ExprEvalStep *scratch, SubscriptingRef *sbsref, ExprState *state, Datum *resv, bool *resnull)
ExprState * ExecPrepareCheck(List *qual, EState *estate)
static bool expr_setup_walker(Node *node, ExprSetupInfo *info)
ExprState * ExecInitExpr(Expr *node, PlanState *parent)
ExprState * ExecInitCheck(List *qual, PlanState *parent)
static bool ExecComputeSlotInfo(ExprState *state, ExprEvalStep *op)
ExprState * ExecPrepareQual(List *qual, EState *estate)
ProjectionInfo * ExecBuildProjectionInfo(List *targetList, ExprContext *econtext, TupleTableSlot *slot, PlanState *parent, TupleDesc inputDesc)
ExprState * ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc, const TupleTableSlotOps *lops, const TupleTableSlotOps *rops, int numCols, const AttrNumber *keyColIdx, const Oid *eqfunctions, const Oid *collations, PlanState *parent)
List * ExecPrepareExprList(List *nodes, EState *estate)
static void ExecInitFunc(ExprEvalStep *scratch, Expr *node, List *args, Oid funcid, Oid inputcollid, ExprState *state)
static void ExecCreateExprSetupSteps(ExprState *state, Node *node)
static void ExecReadyExpr(ExprState *state)
static void ExecInitJsonExpr(JsonExpr *jsexpr, ExprState *state, Datum *resv, bool *resnull, ExprEvalStep *scratch)
ExprState * ExecBuildParamSetEqual(TupleDesc desc, const TupleTableSlotOps *lops, const TupleTableSlotOps *rops, const Oid *eqfunctions, const Oid *collations, const List *param_exprs, PlanState *parent)
@ EEOP_FUNCEXPR_STRICT_FUSAGE
@ EEOP_JSONEXPR_COERCION_FINISH
@ EEOP_AGG_PLAIN_PERGROUP_NULLCHECK
@ EEOP_AGG_STRICT_DESERIALIZE
@ EEOP_BOOLTEST_IS_NOT_FALSE
@ EEOP_AGG_PLAIN_TRANS_BYREF
@ EEOP_AGG_PRESORTED_DISTINCT_MULTI
@ EEOP_AGG_PLAIN_TRANS_BYVAL
@ EEOP_NULLTEST_ROWISNOTNULL
@ EEOP_ASSIGN_TMP_MAKE_RO
@ EEOP_BOOL_OR_STEP_FIRST
@ EEOP_AGG_STRICT_INPUT_CHECK_NULLS
@ EEOP_AGG_STRICT_INPUT_CHECK_ARGS
@ EEOP_NULLTEST_ROWISNULL
@ EEOP_NULLTEST_ISNOTNULL
@ EEOP_MERGE_SUPPORT_FUNC
@ EEOP_AGG_PRESORTED_DISTINCT_SINGLE
@ EEOP_BOOL_AND_STEP_FIRST
@ EEOP_BOOL_AND_STEP_LAST
@ EEOP_AGG_ORDERED_TRANS_DATUM
@ EEOP_AGG_PLAIN_TRANS_STRICT_BYREF
@ EEOP_BOOLTEST_IS_NOT_TRUE
@ EEOP_AGG_PLAIN_TRANS_INIT_STRICT_BYVAL
@ EEOP_AGG_PLAIN_TRANS_STRICT_BYVAL
@ EEOP_AGG_PLAIN_TRANS_INIT_STRICT_BYREF
@ EEOP_HASHED_SCALARARRAYOP
@ EEOP_AGG_ORDERED_TRANS_TUPLE
JunkFilter * ExecInitJunkFilter(List *targetList, TupleTableSlot *slot)
TupleDesc BlessTupleDesc(TupleDesc tupdesc)
const TupleTableSlotOps TTSOpsVirtual
void ExecTypeSetColNames(TupleDesc typeInfo, List *namesList)
TupleTableSlot * ExecInitExtraTupleSlot(EState *estate, TupleDesc tupledesc, const TupleTableSlotOps *tts_ops)
TupleDesc ExecTypeFromExprList(List *exprList)
TupleDesc ExecGetResultType(PlanState *planstate)
const TupleTableSlotOps * ExecGetResultSlotOps(PlanState *planstate, bool *isfixed)
int executor_errposition(EState *estate, int location)
#define outerPlanState(node)
#define innerPlanState(node)
static Datum ExecEvalExprSwitchContext(ExprState *state, ExprContext *econtext, bool *isNull)
void fmgr_info(Oid functionId, FmgrInfo *finfo)
#define SizeForFunctionCallInfo(nargs)
#define InitFunctionCallInfoData(Fcinfo, Flinfo, Nargs, Collation, Context, Resultinfo)
#define fmgr_info_set_expr(expr, finfo)
if(TABLE==NULL||TABLE_index==NULL)
bool jit_compile_expr(struct ExprState *state)
void json_categorize_type(Oid typoid, bool is_jsonb, JsonTypeCategory *tcategory, Oid *outfuncoid)
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
void get_op_opfamily_properties(Oid opno, Oid opfamily, bool ordering_op, int *strategy, Oid *lefttype, Oid *righttype)
Oid get_element_type(Oid typid)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
void get_typlenbyvalalign(Oid typid, int16 *typlen, bool *typbyval, char *typalign)
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
char * get_func_name(Oid funcid)
int16 get_typlen(Oid typid)
const struct SubscriptRoutines * getSubscriptingRoutines(Oid typid, Oid *typelemp)
Const * makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid)
Expr * make_ands_explicit(List *andclauses)
void * palloc0(Size size)
MemoryContext CurrentMemoryContext
void * repalloc(void *pointer, Size size)
Oid exprType(const Node *expr)
int32 exprTypmod(const Node *expr)
int exprLocation(const Node *expr)
#define expression_tree_walker(n, w, c)
SubPlanState * ExecInitSubPlan(SubPlan *subplan, PlanState *parent)
#define IsA(nodeptr, _type_)
#define DO_AGGSPLIT_COMBINE(as)
#define castNode(_type_, nodeptr)
#define InvokeFunctionExecuteHook(objectId)
FormData_pg_attribute * Form_pg_attribute
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define forboth(cell1, list1, cell2, list2)
#define foreach_ptr(type, var, lst)
#define forfive(cell1, list1, cell2, list2, cell3, list3, cell4, list4, cell5, list5)
#define foreach_int(var, lst)
Expr * expression_planner(Expr *expr)
void check_stack_depth(void)
static bool DatumGetBool(Datum X)
static Datum PointerGetDatum(const void *X)
static Datum ObjectIdGetDatum(Oid X)
static Datum Int32GetDatum(int32 X)
MemoryContextSwitchTo(old_ctx)
TupleTableSlot * sortslot
FunctionCallInfo deserialfn_fcinfo
FunctionCallInfo transfn_fcinfo
AggStatePerTrans pertrans
ExprContext * hashcontext
ExprContext ** aggcontexts
BoolTestType booltesttype
DomainConstraintType constrainttype
MemoryContext es_query_cxt
union ExprEvalStep::@54 d
struct ExprEvalStep::@54::@80 fieldstore
struct ExprEvalStep::@54::@77 rowcompare_final
struct ExprEvalStep::@54::@95 agg_plain_pergroup_nullcheck
struct ExprEvalStep::@54::@60 constval
struct ExprEvalStep::@54::@65 nulltest_row
struct ExprEvalStep::@54::@84 convert_rowtype
struct ExprEvalStep::@54::@71 sqlvaluefunction
struct ExprEvalStep::@54::@100 jsonexpr_coercion
struct ExprEvalStep::@54::@98 is_json
struct ExprEvalStep::@54::@90 grouping_func
struct ExprEvalStep::@54::@72 nextvalueexpr
struct ExprEvalStep::@54::@96 agg_presorted_distinctcheck
struct ExprEvalStep::@54::@91 window_func
struct ExprEvalStep::@54::@92 subplan
struct ExprEvalStep::@54::@70 iocoerce
struct ExprEvalStep::@54::@56 var
struct ExprEvalStep::@54::@82 sbsref
struct ExprEvalStep::@54::@78 minmax
struct ExprEvalStep::@54::@69 make_readonly
struct ExprEvalStep::@54::@57 wholerow
struct ExprEvalStep::@54::@62 boolexpr
struct ExprEvalStep::@54::@94 agg_strict_input_check
struct ExprEvalStep::@54::@64 jump
struct ExprEvalStep::@54::@59 assign_tmp
struct ExprEvalStep::@54::@87 xmlexpr
struct ExprEvalStep::@54::@76 rowcompare_step
struct ExprEvalStep::@54::@75 row
struct ExprEvalStep::@54::@58 assign_var
struct ExprEvalStep::@54::@99 jsonexpr
struct ExprEvalStep::@54::@61 func
struct ExprEvalStep::@54::@88 json_constructor
struct ExprEvalStep::@54::@74 arraycoerce
struct ExprEvalStep::@54::@93 agg_deserialize
struct ExprEvalStep::@54::@63 qualexpr
struct ExprEvalStep::@54::@73 arrayexpr
struct ExprEvalStep::@54::@89 aggref
struct ExprEvalStep::@54::@97 agg_trans
struct ExprEvalStep::@54::@83 domaincheck
struct ExprEvalStep::@54::@79 fieldselect
struct ExprEvalStep::@54::@68 casetest
struct ExprEvalStep::@54::@55 fetch
struct ExprEvalStep::@54::@85 scalararrayop
struct ExprEvalStep::@54::@81 sbsref_subscript
struct ExprEvalStep::@54::@66 param
struct ExprEvalStep::@54::@86 hashedscalararrayop
List * multiexpr_subplans
struct ExprEvalStep * steps
struct PlanState * parent
bool * innermost_casenull
Datum * innermost_caseval
NullableDatum args[FLEXIBLE_ARRAY_MEMBER]
JsonConstructorExpr * constructor
struct JsonConstructorExprState::@101 * arg_type_cache
JsonReturning * returning
FunctionCallInfo input_fcinfo
ErrorSaveContext escontext
NullableDatum formatted_expr
JsonReturning * returning
NullTestType nulltesttype
ParamCompileHook paramCompile
const TupleTableSlotOps * outerops
const TupleTableSlotOps * innerops
const TupleTableSlotOps * scanops
ExprContext * pi_exprContext
ExecEvalSubroutine sbs_fetch_old
ExecEvalBoolSubroutine sbs_check_subscripts
ExecEvalSubroutine sbs_assign
ExecEvalSubroutine sbs_fetch
SubscriptExecSetup exec_setup
#define ReleaseTupleDesc(tupdesc)
#define TupleDescAttr(tupdesc, i)
void InitDomainConstraintRef(Oid type_id, DomainConstraintRef *ref, MemoryContext refctx, bool need_exprstate)
TupleDesc lookup_rowtype_tupdesc(Oid type_id, int32 typmod)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
TupleDesc lookup_rowtype_tupdesc_copy(Oid type_id, int32 typmod)
#define TYPECACHE_CMP_PROC
static void convert(const int32 val, char *const buf)