51 Oid eqop,
Oid sortop,
bool reverse_sort,
101 parse->hasWindowFuncs)
121 jtnode =
parse->jointree;
153 foreach(lc, aggs_list)
165 elog(
ERROR,
"could not find equality operator for ordering operator %u",
194 foreach(lc, aggs_list)
223 root->processed_tlist),
245 foreach(lc,
root->agginfos)
253 Assert(aggref->agglevelsup == 0);
298 mminfo->subroot = NULL;
301 mminfo->
param = NULL;
303 *context =
lappend(*context, mminfo);
318 Oid eqop,
Oid sortop,
bool reverse_sort,
bool nulls_first)
329 double path_fraction;
341 subroot->parent_root =
root;
379 parse->havingQual = NULL;
382 parse->hasDistinctOn =
false;
383 parse->hasAggs =
false;
390 ntest->argisrow =
false;
405 sortcl->hashable =
false;
409 parse->limitOffset = NULL;
437 if (final_rel->
rows > 1.0)
438 path_fraction = 1.0 / final_rel->
rows;
469 mminfo->subroot = subroot;
470 mminfo->
path = sorted_path;
486 root->sort_pathkeys =
488 root->parse->sortClause,
489 root->parse->targetList);
491 root->query_pathkeys =
root->sort_pathkeys;
510 aggsortop = aggform->aggsortop;
#define Assert(condition)
#define OidIsValid(objectId)
bool contain_mutable_functions(Node *clause)
Datum Int64GetDatum(int64 X)
#define HeapTupleIsValid(tuple)
List * lappend(List *list, void *datum)
List * lcons(void *datum, List *list)
bool list_member(const List *list, const void *datum)
bool type_is_rowtype(Oid typid)
Oid get_equality_op_for_ordering_op(Oid opno, bool *reverse)
TargetEntry * makeTargetEntry(Expr *expr, AttrNumber resno, char *resname, bool resjunk)
Const * makeConst(Oid consttype, int32 consttypmod, Oid constcollid, int constlen, Datum constvalue, bool constisnull, bool constbyval)
char * pstrdup(const char *in)
Oid exprType(const Node *expr)
Oid exprCollation(const Node *expr)
#define IsA(nodeptr, _type_)
Index assignSortGroupRef(TargetEntry *tle, List *tlist)
Path * get_cheapest_fractional_path_for_pathkeys(List *paths, List *pathkeys, Relids required_outer, double fraction)
List * make_pathkeys_for_sortclauses(PlannerInfo *root, List *sortclauses, List *tlist)
MinMaxAggPath * create_minmaxagg_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, List *mmaggregates, List *quals)
Path * apply_projection_to_path(PlannerInfo *root, RelOptInfo *rel, Path *path, PathTarget *target)
void add_path(RelOptInfo *parent_rel, Path *new_path)
#define planner_rt_fetch(rti, root)
FormData_pg_aggregate * Form_pg_aggregate
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
static Oid fetch_agg_sort_op(Oid aggfnoid)
void preprocess_minmax_aggregates(PlannerInfo *root)
static bool can_minmax_aggs(PlannerInfo *root, List **context)
static void minmax_qp_callback(PlannerInfo *root, void *extra)
static bool build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, Oid eqop, Oid sortop, bool reverse_sort, bool nulls_first)
RelOptInfo * query_planner(PlannerInfo *root, query_pathkeys_callback qp_callback, void *qp_extra)
static Datum ObjectIdGetDatum(Oid X)
static struct subre * parse(struct vars *v, int stopper, int type, struct state *init, struct state *final)
RelOptInfo * fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind, Relids relids)
void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up, int min_sublevels_up)
NullTestType nulltesttype
Selectivity tuple_fraction
void SS_identify_outer_params(PlannerInfo *root)
void SS_charge_for_initplans(PlannerInfo *root, RelOptInfo *final_rel)
Param * SS_make_initplan_output_param(PlannerInfo *root, Oid resulttype, int32 resulttypmod, Oid resultcollation)
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
#define create_pathtarget(root, tlist)