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;
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;
201 shareable = (aggform->aggfinalmodify != AGGMODIFY_READ_WRITE);
210 Anum_pg_aggregate_agginitval,
261 aggtransfn, aggtranstype,
262 transtypeLen, transtypeByVal,
264 aggserialfn, aggdeserialfn,
266 same_input_transnos);
319 aggref->
aggno = aggno;
361 List **same_input_transnos)
366 *same_input_transnos =
NIL;
410 *same_input_transnos =
NIL;
422 *same_input_transnos =
lappend_int(*same_input_transnos,
439 Oid aggtransfn,
Oid aggtranstype,
440 int transtypeLen,
bool transtypeByVal,
442 Oid aggserialfn,
Oid aggdeserialfn,
452 foreach(lc, transnos)
493 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)
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)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
#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)
int get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes)
FormData_pg_aggregate * Form_pg_aggregate
static int list_length(const List *l)
static void * list_nth(const List *list, int n)
void add_function_cost(PlannerInfo *root, Oid funcid, Node *node, QualCost *cost)
#define ObjectIdGetDatum(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)
Aggref * representative_aggref
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)