50 #include "utils/fmgroids.h"
57 List **same_input_transnos);
60 Oid aggtransfn,
Oid aggtranstype,
61 int transtypeLen,
bool transtypeByVal,
63 Oid aggserialfn,
Oid aggdeserialfn,
127 int32 aggtranstypmod;
132 List *same_input_transnos;
134 bool resulttypeByVal;
137 bool initValueIsNull;
143 Assert(aggref->agglevelsup == 0);
153 elog(
ERROR,
"cache lookup failed for aggregate %u",
156 aggtransfn = aggform->aggtransfn;
157 aggfinalfn = aggform->aggfinalfn;
158 aggcombinefn = aggform->aggcombinefn;
159 aggserialfn = aggform->aggserialfn;
160 aggdeserialfn = aggform->aggdeserialfn;
161 aggtranstype = aggform->aggtranstype;
162 aggtransspace = aggform->aggtransspace;
176 aggref->aggtranstype = aggtranstype;
201 shareable = (aggform->aggfinalmodify != AGGMODIFY_READ_WRITE);
210 Anum_pg_aggregate_agginitval,
262 aggtransfn, aggtranstype,
263 transtypeLen, transtypeByVal,
265 aggserialfn, aggdeserialfn,
267 same_input_transnos);
327 if ((transinfo->
serialfn_oid == F_ARRAY_AGG_SERIALIZE ||
340 aggref->aggno = aggno;
341 aggref->aggtransno = transno;
382 List **same_input_transnos)
387 *same_input_transnos =
NIL;
413 if (newagg->inputcollid != existingRef->inputcollid ||
414 newagg->aggtranstype != existingRef->aggtranstype ||
415 newagg->aggstar != existingRef->aggstar ||
416 newagg->aggvariadic != existingRef->aggvariadic ||
417 newagg->aggkind != existingRef->aggkind ||
426 newagg->aggtype == existingRef->aggtype &&
427 newagg->aggcollid == existingRef->aggcollid &&
431 *same_input_transnos =
NIL;
443 *same_input_transnos =
lappend_int(*same_input_transnos,
460 Oid aggtransfn,
Oid aggtranstype,
461 int transtypeLen,
bool transtypeByVal,
463 Oid aggserialfn,
Oid aggdeserialfn,
473 foreach(lc, transnos)
516 transtypeByVal, transtypeLen))
#define TextDatumGetCString(d)
#define OidIsValid(objectId)
bool contain_volatile_functions(Node *clause)
void cost_qual_eval_node(QualCost *cost, Node *qual, PlannerInfo *root)
bool datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
elog(ERROR, "%s: %s", p2, msg)
bool equal(const void *a, const void *b)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
#define HeapTupleIsValid(tuple)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
void list_free(List *list)
void get_typlenbyval(Oid typid, int16 *typlen, bool *typbyval)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
int32 get_typavgwidth(Oid typid, int32 typmod)
void pfree(void *pointer)
#define ALLOCSET_SMALL_INITSIZE
#define ALLOCSET_DEFAULT_INITSIZE
Oid exprType(const Node *expr)
int32 exprTypmod(const Node *expr)
#define expression_tree_walker(n, w, c)
#define DO_AGGSPLIT_SKIPFINAL(as)
#define IsA(nodeptr, _type_)
#define DO_AGGSPLIT_DESERIALIZE(as)
#define DO_AGGSPLIT_COMBINE(as)
#define DO_AGGSPLIT_SERIALIZE(as)
Oid resolve_aggregate_transtype(Oid aggfuncid, Oid aggtranstype, Oid *inputTypes, int numArguments)
bool agg_args_support_sendreceive(Aggref *aggref)
int get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes)
FormData_pg_aggregate * Form_pg_aggregate
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
#define list_nth_node(type, list, n)
void add_function_cost(PlannerInfo *root, Oid funcid, Node *node, QualCost *cost)
static Datum ObjectIdGetDatum(Oid X)
static bool preprocess_aggrefs_walker(Node *node, PlannerInfo *root)
static Datum GetAggInitVal(Datum textInitVal, Oid transtype)
void get_agg_clause_costs(PlannerInfo *root, AggSplit aggsplit, AggClauseCosts *costs)
static int find_compatible_agg(PlannerInfo *root, Aggref *newagg, List **same_input_transnos)
static int find_compatible_trans(PlannerInfo *root, Aggref *newagg, bool shareable, Oid aggtransfn, Oid aggtranstype, int transtypeLen, bool transtypeByVal, Oid aggcombinefn, Oid aggserialfn, Oid aggdeserialfn, Datum initValue, bool initValueIsNull, List *transnos)
static void preprocess_aggref(Aggref *aggref, PlannerInfo *root)
void preprocess_aggrefs(PlannerInfo *root, Node *clause)
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)