1 /*-------------------------------------------------------------------------
4 * handle aggregates and window functions in parser
6 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
11 * src/backend/parser/parse_agg.c
13 *-------------------------------------------------------------------------
17 #include "catalog/pg_aggregate.h"
18 #include "catalog/pg_constraint.h"
19 #include "catalog/pg_type.h"
20 #include "nodes/makefuncs.h"
21 #include "nodes/nodeFuncs.h"
22 #include "optimizer/optimizer.h"
23 #include "parser/parse_agg.h"
24 #include "parser/parse_clause.h"
25 #include "parser/parse_coerce.h"
26 #include "parser/parse_expr.h"
27 #include "parser/parsetree.h"
28 #include "rewrite/rewriteManip.h"
29 #include "utils/builtins.h"
30 #include "utils/lsyscache.h"
39 } check_agg_arguments_context
;
47 List
*groupClauseCommonVars
;
48 bool have_non_var_grouping
;
49 List
**func_grouped_rels
;
51 bool in_agg_direct_args
;
52 } check_ungrouped_columns_context
;
54 static int check_agg_arguments(ParseState
*pstate
,
58 static bool check_agg_arguments_walker(Node
*node
,
59 check_agg_arguments_context
*context
);
60 static void check_ungrouped_columns(Node
*node
, ParseState
*pstate
, Query
*qry
,
61 List
*groupClauses
, List
*groupClauseCommonVars
,
62 bool have_non_var_grouping
,
63 List
**func_grouped_rels
);
64 static bool check_ungrouped_columns_walker(Node
*node
,
65 check_ungrouped_columns_context
*context
);
66 static void finalize_grouping_exprs(Node
*node
, ParseState
*pstate
, Query
*qry
,
67 List
*groupClauses
, bool hasJoinRTEs
,
68 bool have_non_var_grouping
);
69 static bool finalize_grouping_exprs_walker(Node
*node
,
70 check_ungrouped_columns_context
*context
);
71 static void check_agglevels_and_constraints(ParseState
*pstate
, Node
*expr
);
72 static List
*expand_groupingset_node(GroupingSet
*gs
);
73 static Node
*make_agg_arg(Oid argtype
, Oid argcollation
);
77 * transformAggregateCall -
78 * Finish initial transformation of an aggregate call
80 * parse_func.c has recognized the function as an aggregate, and has set up
81 * all the fields of the Aggref except aggargtypes, aggdirectargs, args,
82 * aggorder, aggdistinct and agglevelsup. The passed-in args list has been
83 * through standard expression transformation and type coercion to match the
84 * agg's declared arg types, while the passed-in aggorder list hasn't been
87 * Here we separate the args list into direct and aggregated args, storing the
88 * former in agg->aggdirectargs and the latter in agg->args. The regular
89 * args, but not the direct args, are converted into a targetlist by inserting
90 * TargetEntry nodes. We then transform the aggorder and agg_distinct
91 * specifications to produce lists of SortGroupClause nodes for agg->aggorder
92 * and agg->aggdistinct. (For a regular aggregate, this might result in
93 * adding resjunk expressions to the targetlist; but for ordered-set
94 * aggregates the aggorder list will always be one-to-one with the aggregated
97 * We must also determine which query level the aggregate actually belongs to,
98 * set agglevelsup accordingly, and mark p_hasAggs true in the corresponding
102 transformAggregateCall(ParseState
*pstate
, Aggref
*agg
,
103 List
*args
, List
*aggorder
, bool agg_distinct
)
105 List
*argtypes
= NIL
;
108 List
*tdistinct
= NIL
;
109 AttrNumber attno
= 1;
114 * Before separating the args into direct and aggregated args, make a list
115 * of their data type OIDs for use later.
119 Expr
*arg
= (Expr
*) lfirst(lc
);
121 argtypes
= lappend_oid(argtypes
, exprType((Node
*) arg
));
123 agg
->aggargtypes
= argtypes
;
125 if (AGGKIND_IS_ORDERED_SET(agg
->aggkind
))
128 * For an ordered-set agg, the args list includes direct args and
129 * aggregated args; we must split them apart.
131 int numDirectArgs
= list_length(args
) - list_length(aggorder
);
135 Assert(numDirectArgs
>= 0);
137 aargs
= list_copy_tail(args
, numDirectArgs
);
138 agg
->aggdirectargs
= list_truncate(args
, numDirectArgs
);
141 * Build a tlist from the aggregated args, and make a sortlist entry
142 * for each one. Note that the expressions in the SortBy nodes are
143 * ignored (they are the raw versions of the transformed args); we are
144 * just looking at the sort information in the SortBy nodes.
146 forboth(lc
, aargs
, lc2
, aggorder
)
148 Expr
*arg
= (Expr
*) lfirst(lc
);
149 SortBy
*sortby
= (SortBy
*) lfirst(lc2
);
152 /* We don't bother to assign column names to the entries */
153 tle
= makeTargetEntry(arg
, attno
++, NULL
, false);
154 tlist
= lappend(tlist
, tle
);
156 torder
= addTargetToSortList(pstate
, tle
,
157 torder
, tlist
, sortby
);
160 /* Never any DISTINCT in an ordered-set agg */
161 Assert(!agg_distinct
);
165 /* Regular aggregate, so it has no direct args */
166 agg
->aggdirectargs
= NIL
;
169 * Transform the plain list of Exprs into a targetlist.
173 Expr
*arg
= (Expr
*) lfirst(lc
);
176 /* We don't bother to assign column names to the entries */
177 tle
= makeTargetEntry(arg
, attno
++, NULL
, false);
178 tlist
= lappend(tlist
, tle
);
182 * If we have an ORDER BY, transform it. This will add columns to the
183 * tlist if they appear in ORDER BY but weren't already in the arg
184 * list. They will be marked resjunk = true so we can tell them apart
185 * from regular aggregate arguments later.
187 * We need to mess with p_next_resno since it will be used to number
188 * any new targetlist entries.
190 save_next_resno
= pstate
->p_next_resno
;
191 pstate
->p_next_resno
= attno
;
193 torder
= transformSortClause(pstate
,
197 true /* force SQL99 rules */ );
200 * If we have DISTINCT, transform that to produce a distinctList.
204 tdistinct
= transformDistinctClause(pstate
, &tlist
, torder
, true);
207 * Remove this check if executor support for hashed distinct for
208 * aggregates is ever added.
210 foreach(lc
, tdistinct
)
212 SortGroupClause
*sortcl
= (SortGroupClause
*) lfirst(lc
);
214 if (!OidIsValid(sortcl
->sortop
))
216 Node
*expr
= get_sortgroupclause_expr(sortcl
, tlist
);
219 (errcode(ERRCODE_UNDEFINED_FUNCTION
),
220 errmsg("could not identify an ordering operator for type %s",
221 format_type_be(exprType(expr
))),
222 errdetail("Aggregates with DISTINCT must be able to sort their inputs."),
223 parser_errposition(pstate
, exprLocation(expr
))));
228 pstate
->p_next_resno
= save_next_resno
;
231 /* Update the Aggref with the transformation results */
233 agg
->aggorder
= torder
;
234 agg
->aggdistinct
= tdistinct
;
236 check_agglevels_and_constraints(pstate
, (Node
*) agg
);
240 * transformGroupingFunc
241 * Transform a GROUPING expression
243 * GROUPING() behaves very like an aggregate. Processing of levels and nesting
244 * is done as for aggregates. We set p_hasAggs for these expressions too.
247 transformGroupingFunc(ParseState
*pstate
, GroupingFunc
*p
)
250 List
*args
= p
->args
;
251 List
*result_list
= NIL
;
252 GroupingFunc
*result
= makeNode(GroupingFunc
);
254 if (list_length(args
) > 31)
256 (errcode(ERRCODE_TOO_MANY_ARGUMENTS
),
257 errmsg("GROUPING must have fewer than 32 arguments"),
258 parser_errposition(pstate
, p
->location
)));
262 Node
*current_result
;
264 current_result
= transformExpr(pstate
, (Node
*) lfirst(lc
), pstate
->p_expr_kind
);
266 /* acceptability of expressions is checked later */
268 result_list
= lappend(result_list
, current_result
);
271 result
->args
= result_list
;
272 result
->location
= p
->location
;
274 check_agglevels_and_constraints(pstate
, (Node
*) result
);
276 return (Node
*) result
;
280 * Aggregate functions and grouping operations (which are combined in the spec
281 * as <set function specification>) are very similar with regard to level and
282 * nesting restrictions (though we allow a lot more things than the spec does).
283 * Centralise those restrictions here.
286 check_agglevels_and_constraints(ParseState
*pstate
, Node
*expr
)
288 List
*directargs
= NIL
;
296 bool isAgg
= IsA(expr
, Aggref
);
300 Aggref
*agg
= (Aggref
*) expr
;
302 directargs
= agg
->aggdirectargs
;
304 filter
= agg
->aggfilter
;
305 location
= agg
->location
;
306 p_levelsup
= &agg
->agglevelsup
;
310 GroupingFunc
*grp
= (GroupingFunc
*) expr
;
313 location
= grp
->location
;
314 p_levelsup
= &grp
->agglevelsup
;
318 * Check the arguments to compute the aggregate's level and detect
321 min_varlevel
= check_agg_arguments(pstate
,
326 *p_levelsup
= min_varlevel
;
328 /* Mark the correct pstate level as having aggregates */
329 while (min_varlevel
-- > 0)
330 pstate
= pstate
->parentParseState
;
331 pstate
->p_hasAggs
= true;
334 * Check to see if the aggregate function is in an invalid place within
335 * its aggregation query.
337 * For brevity we support two schemes for reporting an error here: set
338 * "err" to a custom message, or set "errkind" true if the error context
339 * is sufficiently identified by what ParseExprKindName will return, *and*
340 * what it will return is just a SQL keyword. (Otherwise, use a custom
341 * message to avoid creating translation problems.)
345 switch (pstate
->p_expr_kind
)
348 Assert(false); /* can't happen */
350 case EXPR_KIND_OTHER
:
353 * Accept aggregate/grouping here; caller must throw error if
357 case EXPR_KIND_JOIN_ON
:
358 case EXPR_KIND_JOIN_USING
:
360 err
= _("aggregate functions are not allowed in JOIN conditions");
362 err
= _("grouping operations are not allowed in JOIN conditions");
365 case EXPR_KIND_FROM_SUBSELECT
:
366 /* Should only be possible in a LATERAL subquery */
367 Assert(pstate
->p_lateral_active
);
370 * Aggregate/grouping scope rules make it worth being explicit
374 err
= _("aggregate functions are not allowed in FROM clause of their own query level");
376 err
= _("grouping operations are not allowed in FROM clause of their own query level");
379 case EXPR_KIND_FROM_FUNCTION
:
381 err
= _("aggregate functions are not allowed in functions in FROM");
383 err
= _("grouping operations are not allowed in functions in FROM");
386 case EXPR_KIND_WHERE
:
389 case EXPR_KIND_POLICY
:
391 err
= _("aggregate functions are not allowed in policy expressions");
393 err
= _("grouping operations are not allowed in policy expressions");
396 case EXPR_KIND_HAVING
:
399 case EXPR_KIND_FILTER
:
402 case EXPR_KIND_WINDOW_PARTITION
:
405 case EXPR_KIND_WINDOW_ORDER
:
408 case EXPR_KIND_WINDOW_FRAME_RANGE
:
410 err
= _("aggregate functions are not allowed in window RANGE");
412 err
= _("grouping operations are not allowed in window RANGE");
415 case EXPR_KIND_WINDOW_FRAME_ROWS
:
417 err
= _("aggregate functions are not allowed in window ROWS");
419 err
= _("grouping operations are not allowed in window ROWS");
422 case EXPR_KIND_WINDOW_FRAME_GROUPS
:
424 err
= _("aggregate functions are not allowed in window GROUPS");
426 err
= _("grouping operations are not allowed in window GROUPS");
429 case EXPR_KIND_SELECT_TARGET
:
432 case EXPR_KIND_INSERT_TARGET
:
433 case EXPR_KIND_UPDATE_SOURCE
:
434 case EXPR_KIND_UPDATE_TARGET
:
437 case EXPR_KIND_GROUP_BY
:
440 case EXPR_KIND_ORDER_BY
:
443 case EXPR_KIND_DISTINCT_ON
:
446 case EXPR_KIND_LIMIT
:
447 case EXPR_KIND_OFFSET
:
450 case EXPR_KIND_RETURNING
:
453 case EXPR_KIND_VALUES
:
454 case EXPR_KIND_VALUES_SINGLE
:
457 case EXPR_KIND_CHECK_CONSTRAINT
:
458 case EXPR_KIND_DOMAIN_CHECK
:
460 err
= _("aggregate functions are not allowed in check constraints");
462 err
= _("grouping operations are not allowed in check constraints");
465 case EXPR_KIND_COLUMN_DEFAULT
:
466 case EXPR_KIND_FUNCTION_DEFAULT
:
469 err
= _("aggregate functions are not allowed in DEFAULT expressions");
471 err
= _("grouping operations are not allowed in DEFAULT expressions");
474 case EXPR_KIND_INDEX_EXPRESSION
:
476 err
= _("aggregate functions are not allowed in index expressions");
478 err
= _("grouping operations are not allowed in index expressions");
481 case EXPR_KIND_INDEX_PREDICATE
:
483 err
= _("aggregate functions are not allowed in index predicates");
485 err
= _("grouping operations are not allowed in index predicates");
488 case EXPR_KIND_STATS_EXPRESSION
:
490 err
= _("aggregate functions are not allowed in statistics expressions");
492 err
= _("grouping operations are not allowed in statistics expressions");
495 case EXPR_KIND_ALTER_COL_TRANSFORM
:
497 err
= _("aggregate functions are not allowed in transform expressions");
499 err
= _("grouping operations are not allowed in transform expressions");
502 case EXPR_KIND_EXECUTE_PARAMETER
:
504 err
= _("aggregate functions are not allowed in EXECUTE parameters");
506 err
= _("grouping operations are not allowed in EXECUTE parameters");
509 case EXPR_KIND_TRIGGER_WHEN
:
511 err
= _("aggregate functions are not allowed in trigger WHEN conditions");
513 err
= _("grouping operations are not allowed in trigger WHEN conditions");
516 case EXPR_KIND_PARTITION_BOUND
:
518 err
= _("aggregate functions are not allowed in partition bound");
520 err
= _("grouping operations are not allowed in partition bound");
523 case EXPR_KIND_PARTITION_EXPRESSION
:
525 err
= _("aggregate functions are not allowed in partition key expressions");
527 err
= _("grouping operations are not allowed in partition key expressions");
530 case EXPR_KIND_GENERATED_COLUMN
:
533 err
= _("aggregate functions are not allowed in column generation expressions");
535 err
= _("grouping operations are not allowed in column generation expressions");
539 case EXPR_KIND_CALL_ARGUMENT
:
541 err
= _("aggregate functions are not allowed in CALL arguments");
543 err
= _("grouping operations are not allowed in CALL arguments");
547 case EXPR_KIND_COPY_WHERE
:
549 err
= _("aggregate functions are not allowed in COPY FROM WHERE conditions");
551 err
= _("grouping operations are not allowed in COPY FROM WHERE conditions");
555 case EXPR_KIND_CYCLE_MARK
:
560 * There is intentionally no default: case here, so that the
561 * compiler will warn if we add a new ParseExprKind without
562 * extending this switch. If we do see an unrecognized value at
563 * runtime, the behavior will be the same as for EXPR_KIND_OTHER,
564 * which is sane anyway.
570 (errcode(ERRCODE_GROUPING_ERROR
),
571 errmsg_internal("%s", err
),
572 parser_errposition(pstate
, location
)));
577 /* translator: %s is name of a SQL construct, eg GROUP BY */
578 err
= _("aggregate functions are not allowed in %s");
580 /* translator: %s is name of a SQL construct, eg GROUP BY */
581 err
= _("grouping operations are not allowed in %s");
584 (errcode(ERRCODE_GROUPING_ERROR
),
586 ParseExprKindName(pstate
->p_expr_kind
)),
587 parser_errposition(pstate
, location
)));
592 * check_agg_arguments
593 * Scan the arguments of an aggregate function to determine the
594 * aggregate's semantic level (zero is the current select's level,
595 * one is its parent, etc).
597 * The aggregate's level is the same as the level of the lowest-level variable
598 * or aggregate in its aggregated arguments (including any ORDER BY columns)
599 * or filter expression; or if it contains no variables at all, we presume it
602 * Vars/Aggs in direct arguments are *not* counted towards determining the
603 * agg's level, as those arguments aren't evaluated per-row but only
604 * per-group, and so in some sense aren't really agg arguments. However,
605 * this can mean that we decide an agg is upper-level even when its direct
606 * args contain lower-level Vars/Aggs, and that case has to be disallowed.
607 * (This is a little strange, but the SQL standard seems pretty definite that
608 * direct args are not to be considered when setting the agg's level.)
610 * We also take this opportunity to detect any aggregates or window functions
611 * nested within the arguments. We can throw error immediately if we find
612 * a window function. Aggregates are a bit trickier because it's only an
613 * error if the inner aggregate is of the same semantic level as the outer,
614 * which we can't know until we finish scanning the arguments.
617 check_agg_arguments(ParseState
*pstate
,
623 check_agg_arguments_context context
;
625 context
.pstate
= pstate
;
626 context
.min_varlevel
= -1; /* signifies nothing found yet */
627 context
.min_agglevel
= -1;
628 context
.sublevels_up
= 0;
630 (void) check_agg_arguments_walker((Node
*) args
, &context
);
631 (void) check_agg_arguments_walker((Node
*) filter
, &context
);
634 * If we found no vars nor aggs at all, it's a level-zero aggregate;
635 * otherwise, its level is the minimum of vars or aggs.
637 if (context
.min_varlevel
< 0)
639 if (context
.min_agglevel
< 0)
642 agglevel
= context
.min_agglevel
;
644 else if (context
.min_agglevel
< 0)
645 agglevel
= context
.min_varlevel
;
647 agglevel
= Min(context
.min_varlevel
, context
.min_agglevel
);
650 * If there's a nested aggregate of the same semantic level, complain.
652 if (agglevel
== context
.min_agglevel
)
656 aggloc
= locate_agg_of_level((Node
*) args
, agglevel
);
658 aggloc
= locate_agg_of_level((Node
*) filter
, agglevel
);
660 (errcode(ERRCODE_GROUPING_ERROR
),
661 errmsg("aggregate function calls cannot be nested"),
662 parser_errposition(pstate
, aggloc
)));
666 * Now check for vars/aggs in the direct arguments, and throw error if
667 * needed. Note that we allow a Var of the agg's semantic level, but not
668 * an Agg of that level. In principle such Aggs could probably be
669 * supported, but it would create an ordering dependency among the
670 * aggregates at execution time. Since the case appears neither to be
671 * required by spec nor particularly useful, we just treat it as a
672 * nested-aggregate situation.
676 context
.min_varlevel
= -1;
677 context
.min_agglevel
= -1;
678 (void) check_agg_arguments_walker((Node
*) directargs
, &context
);
679 if (context
.min_varlevel
>= 0 && context
.min_varlevel
< agglevel
)
681 (errcode(ERRCODE_GROUPING_ERROR
),
682 errmsg("outer-level aggregate cannot contain a lower-level variable in its direct arguments"),
683 parser_errposition(pstate
,
684 locate_var_of_level((Node
*) directargs
,
685 context
.min_varlevel
))));
686 if (context
.min_agglevel
>= 0 && context
.min_agglevel
<= agglevel
)
688 (errcode(ERRCODE_GROUPING_ERROR
),
689 errmsg("aggregate function calls cannot be nested"),
690 parser_errposition(pstate
,
691 locate_agg_of_level((Node
*) directargs
,
692 context
.min_agglevel
))));
698 check_agg_arguments_walker(Node
*node
,
699 check_agg_arguments_context
*context
)
705 int varlevelsup
= ((Var
*) node
)->varlevelsup
;
707 /* convert levelsup to frame of reference of original query */
708 varlevelsup
-= context
->sublevels_up
;
709 /* ignore local vars of subqueries */
710 if (varlevelsup
>= 0)
712 if (context
->min_varlevel
< 0 ||
713 context
->min_varlevel
> varlevelsup
)
714 context
->min_varlevel
= varlevelsup
;
718 if (IsA(node
, Aggref
))
720 int agglevelsup
= ((Aggref
*) node
)->agglevelsup
;
722 /* convert levelsup to frame of reference of original query */
723 agglevelsup
-= context
->sublevels_up
;
724 /* ignore local aggs of subqueries */
725 if (agglevelsup
>= 0)
727 if (context
->min_agglevel
< 0 ||
728 context
->min_agglevel
> agglevelsup
)
729 context
->min_agglevel
= agglevelsup
;
731 /* no need to examine args of the inner aggregate */
734 if (IsA(node
, GroupingFunc
))
736 int agglevelsup
= ((GroupingFunc
*) node
)->agglevelsup
;
738 /* convert levelsup to frame of reference of original query */
739 agglevelsup
-= context
->sublevels_up
;
740 /* ignore local aggs of subqueries */
741 if (agglevelsup
>= 0)
743 if (context
->min_agglevel
< 0 ||
744 context
->min_agglevel
> agglevelsup
)
745 context
->min_agglevel
= agglevelsup
;
747 /* Continue and descend into subtree */
751 * SRFs and window functions can be rejected immediately, unless we are
752 * within a sub-select within the aggregate's arguments; in that case
755 if (context
->sublevels_up
== 0)
757 if ((IsA(node
, FuncExpr
) && ((FuncExpr
*) node
)->funcretset
) ||
758 (IsA(node
, OpExpr
) && ((OpExpr
*) node
)->opretset
))
760 (errcode(ERRCODE_FEATURE_NOT_SUPPORTED
),
761 errmsg("aggregate function calls cannot contain set-returning function calls"),
762 errhint("You might be able to move the set-returning function into a LATERAL FROM item."),
763 parser_errposition(context
->pstate
, exprLocation(node
))));
764 if (IsA(node
, WindowFunc
))
766 (errcode(ERRCODE_GROUPING_ERROR
),
767 errmsg("aggregate function calls cannot contain window function calls"),
768 parser_errposition(context
->pstate
,
769 ((WindowFunc
*) node
)->location
)));
771 if (IsA(node
, Query
))
773 /* Recurse into subselects */
776 context
->sublevels_up
++;
777 result
= query_tree_walker((Query
*) node
,
778 check_agg_arguments_walker
,
781 context
->sublevels_up
--;
785 return expression_tree_walker(node
,
786 check_agg_arguments_walker
,
791 * transformWindowFuncCall -
792 * Finish initial transformation of a window function call
794 * parse_func.c has recognized the function as a window function, and has set
795 * up all the fields of the WindowFunc except winref. Here we must (1) add
796 * the WindowDef to the pstate (if not a duplicate of one already present) and
797 * set winref to link to it; and (2) mark p_hasWindowFuncs true in the pstate.
798 * Unlike aggregates, only the most closely nested pstate level need be
799 * considered --- there are no "outer window functions" per SQL spec.
802 transformWindowFuncCall(ParseState
*pstate
, WindowFunc
*wfunc
,
809 * A window function call can't contain another one (but aggs are OK). XXX
810 * is this required by spec, or just an unimplemented feature?
812 * Note: we don't need to check the filter expression here, because the
813 * context checks done below and in transformAggregateCall would have
814 * already rejected any window funcs or aggs within the filter.
816 if (pstate
->p_hasWindowFuncs
&&
817 contain_windowfuncs((Node
*) wfunc
->args
))
819 (errcode(ERRCODE_WINDOWING_ERROR
),
820 errmsg("window function calls cannot be nested"),
821 parser_errposition(pstate
,
822 locate_windowfunc((Node
*) wfunc
->args
))));
825 * Check to see if the window function is in an invalid place within the
828 * For brevity we support two schemes for reporting an error here: set
829 * "err" to a custom message, or set "errkind" true if the error context
830 * is sufficiently identified by what ParseExprKindName will return, *and*
831 * what it will return is just a SQL keyword. (Otherwise, use a custom
832 * message to avoid creating translation problems.)
836 switch (pstate
->p_expr_kind
)
839 Assert(false); /* can't happen */
841 case EXPR_KIND_OTHER
:
842 /* Accept window func here; caller must throw error if wanted */
844 case EXPR_KIND_JOIN_ON
:
845 case EXPR_KIND_JOIN_USING
:
846 err
= _("window functions are not allowed in JOIN conditions");
848 case EXPR_KIND_FROM_SUBSELECT
:
849 /* can't get here, but just in case, throw an error */
852 case EXPR_KIND_FROM_FUNCTION
:
853 err
= _("window functions are not allowed in functions in FROM");
855 case EXPR_KIND_WHERE
:
858 case EXPR_KIND_POLICY
:
859 err
= _("window functions are not allowed in policy expressions");
861 case EXPR_KIND_HAVING
:
864 case EXPR_KIND_FILTER
:
867 case EXPR_KIND_WINDOW_PARTITION
:
868 case EXPR_KIND_WINDOW_ORDER
:
869 case EXPR_KIND_WINDOW_FRAME_RANGE
:
870 case EXPR_KIND_WINDOW_FRAME_ROWS
:
871 case EXPR_KIND_WINDOW_FRAME_GROUPS
:
872 err
= _("window functions are not allowed in window definitions");
874 case EXPR_KIND_SELECT_TARGET
:
877 case EXPR_KIND_INSERT_TARGET
:
878 case EXPR_KIND_UPDATE_SOURCE
:
879 case EXPR_KIND_UPDATE_TARGET
:
882 case EXPR_KIND_GROUP_BY
:
885 case EXPR_KIND_ORDER_BY
:
888 case EXPR_KIND_DISTINCT_ON
:
891 case EXPR_KIND_LIMIT
:
892 case EXPR_KIND_OFFSET
:
895 case EXPR_KIND_RETURNING
:
898 case EXPR_KIND_VALUES
:
899 case EXPR_KIND_VALUES_SINGLE
:
902 case EXPR_KIND_CHECK_CONSTRAINT
:
903 case EXPR_KIND_DOMAIN_CHECK
:
904 err
= _("window functions are not allowed in check constraints");
906 case EXPR_KIND_COLUMN_DEFAULT
:
907 case EXPR_KIND_FUNCTION_DEFAULT
:
908 err
= _("window functions are not allowed in DEFAULT expressions");
910 case EXPR_KIND_INDEX_EXPRESSION
:
911 err
= _("window functions are not allowed in index expressions");
913 case EXPR_KIND_STATS_EXPRESSION
:
914 err
= _("window functions are not allowed in statistics expressions");
916 case EXPR_KIND_INDEX_PREDICATE
:
917 err
= _("window functions are not allowed in index predicates");
919 case EXPR_KIND_ALTER_COL_TRANSFORM
:
920 err
= _("window functions are not allowed in transform expressions");
922 case EXPR_KIND_EXECUTE_PARAMETER
:
923 err
= _("window functions are not allowed in EXECUTE parameters");
925 case EXPR_KIND_TRIGGER_WHEN
:
926 err
= _("window functions are not allowed in trigger WHEN conditions");
928 case EXPR_KIND_PARTITION_BOUND
:
929 err
= _("window functions are not allowed in partition bound");
931 case EXPR_KIND_PARTITION_EXPRESSION
:
932 err
= _("window functions are not allowed in partition key expressions");
934 case EXPR_KIND_CALL_ARGUMENT
:
935 err
= _("window functions are not allowed in CALL arguments");
937 case EXPR_KIND_COPY_WHERE
:
938 err
= _("window functions are not allowed in COPY FROM WHERE conditions");
940 case EXPR_KIND_GENERATED_COLUMN
:
941 err
= _("window functions are not allowed in column generation expressions");
943 case EXPR_KIND_CYCLE_MARK
:
948 * There is intentionally no default: case here, so that the
949 * compiler will warn if we add a new ParseExprKind without
950 * extending this switch. If we do see an unrecognized value at
951 * runtime, the behavior will be the same as for EXPR_KIND_OTHER,
952 * which is sane anyway.
957 (errcode(ERRCODE_WINDOWING_ERROR
),
958 errmsg_internal("%s", err
),
959 parser_errposition(pstate
, wfunc
->location
)));
962 (errcode(ERRCODE_WINDOWING_ERROR
),
963 /* translator: %s is name of a SQL construct, eg GROUP BY */
964 errmsg("window functions are not allowed in %s",
965 ParseExprKindName(pstate
->p_expr_kind
)),
966 parser_errposition(pstate
, wfunc
->location
)));
969 * If the OVER clause just specifies a window name, find that WINDOW
970 * clause (which had better be present). Otherwise, try to match all the
971 * properties of the OVER clause, and make a new entry in the p_windowdefs
979 Assert(windef
->refname
== NULL
&&
980 windef
->partitionClause
== NIL
&&
981 windef
->orderClause
== NIL
&&
982 windef
->frameOptions
== FRAMEOPTION_DEFAULTS
);
984 foreach(lc
, pstate
->p_windowdefs
)
986 WindowDef
*refwin
= (WindowDef
*) lfirst(lc
);
989 if (refwin
->name
&& strcmp(refwin
->name
, windef
->name
) == 0)
991 wfunc
->winref
= winref
;
995 if (lc
== NULL
) /* didn't find it? */
997 (errcode(ERRCODE_UNDEFINED_OBJECT
),
998 errmsg("window \"%s\" does not exist", windef
->name
),
999 parser_errposition(pstate
, windef
->location
)));
1006 foreach(lc
, pstate
->p_windowdefs
)
1008 WindowDef
*refwin
= (WindowDef
*) lfirst(lc
);
1011 if (refwin
->refname
&& windef
->refname
&&
1012 strcmp(refwin
->refname
, windef
->refname
) == 0)
1013 /* matched on refname */ ;
1014 else if (!refwin
->refname
&& !windef
->refname
)
1015 /* matched, no refname */ ;
1018 if (equal(refwin
->partitionClause
, windef
->partitionClause
) &&
1019 equal(refwin
->orderClause
, windef
->orderClause
) &&
1020 refwin
->frameOptions
== windef
->frameOptions
&&
1021 equal(refwin
->startOffset
, windef
->startOffset
) &&
1022 equal(refwin
->endOffset
, windef
->endOffset
))
1024 /* found a duplicate window specification */
1025 wfunc
->winref
= winref
;
1029 if (lc
== NULL
) /* didn't find it? */
1031 pstate
->p_windowdefs
= lappend(pstate
->p_windowdefs
, windef
);
1032 wfunc
->winref
= list_length(pstate
->p_windowdefs
);
1036 pstate
->p_hasWindowFuncs
= true;
1040 * parseCheckAggregates
1041 * Check for aggregates where they shouldn't be and improper grouping.
1042 * This function should be called after the target list and qualifications
1045 * Misplaced aggregates are now mostly detected in transformAggregateCall,
1046 * but it seems more robust to check for aggregates in recursive queries
1047 * only after everything is finalized. In any case it's hard to detect
1048 * improper grouping on-the-fly, so we have to make another pass over the
1052 parseCheckAggregates(ParseState
*pstate
, Query
*qry
)
1054 List
*gset_common
= NIL
;
1055 List
*groupClauses
= NIL
;
1056 List
*groupClauseCommonVars
= NIL
;
1057 bool have_non_var_grouping
;
1058 List
*func_grouped_rels
= NIL
;
1061 bool hasSelfRefRTEs
;
1064 /* This should only be called if we found aggregates or grouping */
1065 Assert(pstate
->p_hasAggs
|| qry
->groupClause
|| qry
->havingQual
|| qry
->groupingSets
);
1068 * If we have grouping sets, expand them and find the intersection of all
1071 if (qry
->groupingSets
)
1074 * The limit of 4096 is arbitrary and exists simply to avoid resource
1075 * issues from pathological constructs.
1077 List
*gsets
= expand_grouping_sets(qry
->groupingSets
, qry
->groupDistinct
, 4096);
1081 (errcode(ERRCODE_STATEMENT_TOO_COMPLEX
),
1082 errmsg("too many grouping sets present (maximum 4096)"),
1083 parser_errposition(pstate
,
1085 ? exprLocation((Node
*) qry
->groupClause
)
1086 : exprLocation((Node
*) qry
->groupingSets
))));
1089 * The intersection will often be empty, so help things along by
1090 * seeding the intersect with the smallest set.
1092 gset_common
= linitial(gsets
);
1096 for_each_from(l
, gsets
, 1)
1098 gset_common
= list_intersection_int(gset_common
, lfirst(l
));
1105 * If there was only one grouping set in the expansion, AND if the
1106 * groupClause is non-empty (meaning that the grouping set is not
1107 * empty either), then we can ditch the grouping set and pretend we
1108 * just had a normal GROUP BY.
1110 if (list_length(gsets
) == 1 && qry
->groupClause
)
1111 qry
->groupingSets
= NIL
;
1115 * Scan the range table to see if there are JOIN or self-reference CTE
1116 * entries. We'll need this info below.
1118 hasJoinRTEs
= hasSelfRefRTEs
= false;
1119 foreach(l
, pstate
->p_rtable
)
1121 RangeTblEntry
*rte
= (RangeTblEntry
*) lfirst(l
);
1123 if (rte
->rtekind
== RTE_JOIN
)
1125 else if (rte
->rtekind
== RTE_CTE
&& rte
->self_reference
)
1126 hasSelfRefRTEs
= true;
1130 * Build a list of the acceptable GROUP BY expressions for use by
1131 * check_ungrouped_columns().
1133 * We get the TLE, not just the expr, because GROUPING wants to know the
1136 foreach(l
, qry
->groupClause
)
1138 SortGroupClause
*grpcl
= (SortGroupClause
*) lfirst(l
);
1141 expr
= get_sortgroupclause_tle(grpcl
, qry
->targetList
);
1143 continue; /* probably cannot happen */
1145 groupClauses
= lappend(groupClauses
, expr
);
1149 * If there are join alias vars involved, we have to flatten them to the
1150 * underlying vars, so that aliased and unaliased vars will be correctly
1151 * taken as equal. We can skip the expense of doing this if no rangetable
1152 * entries are RTE_JOIN kind.
1155 groupClauses
= (List
*) flatten_join_alias_vars(qry
,
1156 (Node
*) groupClauses
);
1159 * Detect whether any of the grouping expressions aren't simple Vars; if
1160 * they're all Vars then we don't have to work so hard in the recursive
1161 * scans. (Note we have to flatten aliases before this.)
1163 * Track Vars that are included in all grouping sets separately in
1164 * groupClauseCommonVars, since these are the only ones we can use to
1165 * check for functional dependencies.
1167 have_non_var_grouping
= false;
1168 foreach(l
, groupClauses
)
1170 TargetEntry
*tle
= lfirst(l
);
1172 if (!IsA(tle
->expr
, Var
))
1174 have_non_var_grouping
= true;
1176 else if (!qry
->groupingSets
||
1177 list_member_int(gset_common
, tle
->ressortgroupref
))
1179 groupClauseCommonVars
= lappend(groupClauseCommonVars
, tle
->expr
);
1184 * Check the targetlist and HAVING clause for ungrouped variables.
1186 * Note: because we check resjunk tlist elements as well as regular ones,
1187 * this will also find ungrouped variables that came from ORDER BY and
1188 * WINDOW clauses. For that matter, it's also going to examine the
1189 * grouping expressions themselves --- but they'll all pass the test ...
1191 * We also finalize GROUPING expressions, but for that we need to traverse
1192 * the original (unflattened) clause in order to modify nodes.
1194 clause
= (Node
*) qry
->targetList
;
1195 finalize_grouping_exprs(clause
, pstate
, qry
,
1196 groupClauses
, hasJoinRTEs
,
1197 have_non_var_grouping
);
1199 clause
= flatten_join_alias_vars(qry
, clause
);
1200 check_ungrouped_columns(clause
, pstate
, qry
,
1201 groupClauses
, groupClauseCommonVars
,
1202 have_non_var_grouping
,
1203 &func_grouped_rels
);
1205 clause
= (Node
*) qry
->havingQual
;
1206 finalize_grouping_exprs(clause
, pstate
, qry
,
1207 groupClauses
, hasJoinRTEs
,
1208 have_non_var_grouping
);
1210 clause
= flatten_join_alias_vars(qry
, clause
);
1211 check_ungrouped_columns(clause
, pstate
, qry
,
1212 groupClauses
, groupClauseCommonVars
,
1213 have_non_var_grouping
,
1214 &func_grouped_rels
);
1217 * Per spec, aggregates can't appear in a recursive term.
1219 if (pstate
->p_hasAggs
&& hasSelfRefRTEs
)
1221 (errcode(ERRCODE_INVALID_RECURSION
),
1222 errmsg("aggregate functions are not allowed in a recursive query's recursive term"),
1223 parser_errposition(pstate
,
1224 locate_agg_of_level((Node
*) qry
, 0))));
1228 * check_ungrouped_columns -
1229 * Scan the given expression tree for ungrouped variables (variables
1230 * that are not listed in the groupClauses list and are not within
1231 * the arguments of aggregate functions). Emit a suitable error message
1234 * NOTE: we assume that the given clause has been transformed suitably for
1235 * parser output. This means we can use expression_tree_walker.
1237 * NOTE: we recognize grouping expressions in the main query, but only
1238 * grouping Vars in subqueries. For example, this will be rejected,
1239 * although it could be allowed:
1241 * (SELECT x FROM bar where y = (foo.a + foo.b))
1244 * The difficulty is the need to account for different sublevels_up.
1245 * This appears to require a whole custom version of equal(), which is
1246 * way more pain than the feature seems worth.
1249 check_ungrouped_columns(Node
*node
, ParseState
*pstate
, Query
*qry
,
1250 List
*groupClauses
, List
*groupClauseCommonVars
,
1251 bool have_non_var_grouping
,
1252 List
**func_grouped_rels
)
1254 check_ungrouped_columns_context context
;
1256 context
.pstate
= pstate
;
1258 context
.hasJoinRTEs
= false; /* assume caller flattened join Vars */
1259 context
.groupClauses
= groupClauses
;
1260 context
.groupClauseCommonVars
= groupClauseCommonVars
;
1261 context
.have_non_var_grouping
= have_non_var_grouping
;
1262 context
.func_grouped_rels
= func_grouped_rels
;
1263 context
.sublevels_up
= 0;
1264 context
.in_agg_direct_args
= false;
1265 check_ungrouped_columns_walker(node
, &context
);
1269 check_ungrouped_columns_walker(Node
*node
,
1270 check_ungrouped_columns_context
*context
)
1276 if (IsA(node
, Const
) ||
1278 return false; /* constants are always acceptable */
1280 if (IsA(node
, Aggref
))
1282 Aggref
*agg
= (Aggref
*) node
;
1284 if ((int) agg
->agglevelsup
== context
->sublevels_up
)
1287 * If we find an aggregate call of the original level, do not
1288 * recurse into its normal arguments, ORDER BY arguments, or
1289 * filter; ungrouped vars there are not an error. But we should
1290 * check direct arguments as though they weren't in an aggregate.
1291 * We set a special flag in the context to help produce a useful
1292 * error message for ungrouped vars in direct arguments.
1296 Assert(!context
->in_agg_direct_args
);
1297 context
->in_agg_direct_args
= true;
1298 result
= check_ungrouped_columns_walker((Node
*) agg
->aggdirectargs
,
1300 context
->in_agg_direct_args
= false;
1305 * We can skip recursing into aggregates of higher levels altogether,
1306 * since they could not possibly contain Vars of concern to us (see
1307 * transformAggregateCall). We do need to look at aggregates of lower
1310 if ((int) agg
->agglevelsup
> context
->sublevels_up
)
1314 if (IsA(node
, GroupingFunc
))
1316 GroupingFunc
*grp
= (GroupingFunc
*) node
;
1318 /* handled GroupingFunc separately, no need to recheck at this level */
1320 if ((int) grp
->agglevelsup
>= context
->sublevels_up
)
1325 * If we have any GROUP BY items that are not simple Vars, check to see if
1326 * subexpression as a whole matches any GROUP BY item. We need to do this
1327 * at every recursion level so that we recognize GROUPed-BY expressions
1328 * before reaching variables within them. But this only works at the outer
1329 * query level, as noted above.
1331 if (context
->have_non_var_grouping
&& context
->sublevels_up
== 0)
1333 foreach(gl
, context
->groupClauses
)
1335 TargetEntry
*tle
= lfirst(gl
);
1337 if (equal(node
, tle
->expr
))
1338 return false; /* acceptable, do not descend more */
1343 * If we have an ungrouped Var of the original query level, we have a
1344 * failure. Vars below the original query level are not a problem, and
1345 * neither are Vars from above it. (If such Vars are ungrouped as far as
1346 * their own query level is concerned, that's someone else's problem...)
1350 Var
*var
= (Var
*) node
;
1354 if (var
->varlevelsup
!= context
->sublevels_up
)
1355 return false; /* it's not local to my query, ignore */
1358 * Check for a match, if we didn't do it above.
1360 if (!context
->have_non_var_grouping
|| context
->sublevels_up
!= 0)
1362 foreach(gl
, context
->groupClauses
)
1364 Var
*gvar
= (Var
*) ((TargetEntry
*) lfirst(gl
))->expr
;
1366 if (IsA(gvar
, Var
) &&
1367 gvar
->varno
== var
->varno
&&
1368 gvar
->varattno
== var
->varattno
&&
1369 gvar
->varlevelsup
== 0)
1370 return false; /* acceptable, we're okay */
1375 * Check whether the Var is known functionally dependent on the GROUP
1376 * BY columns. If so, we can allow the Var to be used, because the
1377 * grouping is really a no-op for this table. However, this deduction
1378 * depends on one or more constraints of the table, so we have to add
1379 * those constraints to the query's constraintDeps list, because it's
1380 * not semantically valid anymore if the constraint(s) get dropped.
1381 * (Therefore, this check must be the last-ditch effort before raising
1382 * error: we don't want to add dependencies unnecessarily.)
1384 * Because this is a pretty expensive check, and will have the same
1385 * outcome for all columns of a table, we remember which RTEs we've
1386 * already proven functional dependency for in the func_grouped_rels
1387 * list. This test also prevents us from adding duplicate entries to
1388 * the constraintDeps list.
1390 if (list_member_int(*context
->func_grouped_rels
, var
->varno
))
1391 return false; /* previously proven acceptable */
1393 Assert(var
->varno
> 0 &&
1394 (int) var
->varno
<= list_length(context
->pstate
->p_rtable
));
1395 rte
= rt_fetch(var
->varno
, context
->pstate
->p_rtable
);
1396 if (rte
->rtekind
== RTE_RELATION
)
1398 if (check_functional_grouping(rte
->relid
,
1401 context
->groupClauseCommonVars
,
1402 &context
->qry
->constraintDeps
))
1404 *context
->func_grouped_rels
=
1405 lappend_int(*context
->func_grouped_rels
, var
->varno
);
1406 return false; /* acceptable */
1410 /* Found an ungrouped local variable; generate error message */
1411 attname
= get_rte_attribute_name(rte
, var
->varattno
);
1412 if (context
->sublevels_up
== 0)
1414 (errcode(ERRCODE_GROUPING_ERROR
),
1415 errmsg("column \"%s.%s\" must appear in the GROUP BY clause or be used in an aggregate function",
1416 rte
->eref
->aliasname
, attname
),
1417 context
->in_agg_direct_args
?
1418 errdetail("Direct arguments of an ordered-set aggregate must use only grouped columns.") : 0,
1419 parser_errposition(context
->pstate
, var
->location
)));
1422 (errcode(ERRCODE_GROUPING_ERROR
),
1423 errmsg("subquery uses ungrouped column \"%s.%s\" from outer query",
1424 rte
->eref
->aliasname
, attname
),
1425 parser_errposition(context
->pstate
, var
->location
)));
1428 if (IsA(node
, Query
))
1430 /* Recurse into subselects */
1433 context
->sublevels_up
++;
1434 result
= query_tree_walker((Query
*) node
,
1435 check_ungrouped_columns_walker
,
1438 context
->sublevels_up
--;
1441 return expression_tree_walker(node
, check_ungrouped_columns_walker
,
1446 * finalize_grouping_exprs -
1447 * Scan the given expression tree for GROUPING() and related calls,
1448 * and validate and process their arguments.
1450 * This is split out from check_ungrouped_columns above because it needs
1451 * to modify the nodes (which it does in-place, not via a mutator) while
1452 * check_ungrouped_columns may see only a copy of the original thanks to
1453 * flattening of join alias vars. So here, we flatten each individual
1454 * GROUPING argument as we see it before comparing it.
1457 finalize_grouping_exprs(Node
*node
, ParseState
*pstate
, Query
*qry
,
1458 List
*groupClauses
, bool hasJoinRTEs
,
1459 bool have_non_var_grouping
)
1461 check_ungrouped_columns_context context
;
1463 context
.pstate
= pstate
;
1465 context
.hasJoinRTEs
= hasJoinRTEs
;
1466 context
.groupClauses
= groupClauses
;
1467 context
.groupClauseCommonVars
= NIL
;
1468 context
.have_non_var_grouping
= have_non_var_grouping
;
1469 context
.func_grouped_rels
= NULL
;
1470 context
.sublevels_up
= 0;
1471 context
.in_agg_direct_args
= false;
1472 finalize_grouping_exprs_walker(node
, &context
);
1476 finalize_grouping_exprs_walker(Node
*node
,
1477 check_ungrouped_columns_context
*context
)
1483 if (IsA(node
, Const
) ||
1485 return false; /* constants are always acceptable */
1487 if (IsA(node
, Aggref
))
1489 Aggref
*agg
= (Aggref
*) node
;
1491 if ((int) agg
->agglevelsup
== context
->sublevels_up
)
1494 * If we find an aggregate call of the original level, do not
1495 * recurse into its normal arguments, ORDER BY arguments, or
1496 * filter; GROUPING exprs of this level are not allowed there. But
1497 * check direct arguments as though they weren't in an aggregate.
1501 Assert(!context
->in_agg_direct_args
);
1502 context
->in_agg_direct_args
= true;
1503 result
= finalize_grouping_exprs_walker((Node
*) agg
->aggdirectargs
,
1505 context
->in_agg_direct_args
= false;
1510 * We can skip recursing into aggregates of higher levels altogether,
1511 * since they could not possibly contain exprs of concern to us (see
1512 * transformAggregateCall). We do need to look at aggregates of lower
1515 if ((int) agg
->agglevelsup
> context
->sublevels_up
)
1519 if (IsA(node
, GroupingFunc
))
1521 GroupingFunc
*grp
= (GroupingFunc
*) node
;
1524 * We only need to check GroupingFunc nodes at the exact level to
1525 * which they belong, since they cannot mix levels in arguments.
1528 if ((int) grp
->agglevelsup
== context
->sublevels_up
)
1531 List
*ref_list
= NIL
;
1533 foreach(lc
, grp
->args
)
1535 Node
*expr
= lfirst(lc
);
1538 if (context
->hasJoinRTEs
)
1539 expr
= flatten_join_alias_vars(context
->qry
, expr
);
1542 * Each expression must match a grouping entry at the current
1543 * query level. Unlike the general expression case, we don't
1544 * allow functional dependencies or outer references.
1549 Var
*var
= (Var
*) expr
;
1551 if (var
->varlevelsup
== context
->sublevels_up
)
1553 foreach(gl
, context
->groupClauses
)
1555 TargetEntry
*tle
= lfirst(gl
);
1556 Var
*gvar
= (Var
*) tle
->expr
;
1558 if (IsA(gvar
, Var
) &&
1559 gvar
->varno
== var
->varno
&&
1560 gvar
->varattno
== var
->varattno
&&
1561 gvar
->varlevelsup
== 0)
1563 ref
= tle
->ressortgroupref
;
1569 else if (context
->have_non_var_grouping
&&
1570 context
->sublevels_up
== 0)
1572 foreach(gl
, context
->groupClauses
)
1574 TargetEntry
*tle
= lfirst(gl
);
1576 if (equal(expr
, tle
->expr
))
1578 ref
= tle
->ressortgroupref
;
1586 (errcode(ERRCODE_GROUPING_ERROR
),
1587 errmsg("arguments to GROUPING must be grouping expressions of the associated query level"),
1588 parser_errposition(context
->pstate
,
1589 exprLocation(expr
))));
1591 ref_list
= lappend_int(ref_list
, ref
);
1594 grp
->refs
= ref_list
;
1597 if ((int) grp
->agglevelsup
> context
->sublevels_up
)
1601 if (IsA(node
, Query
))
1603 /* Recurse into subselects */
1606 context
->sublevels_up
++;
1607 result
= query_tree_walker((Query
*) node
,
1608 finalize_grouping_exprs_walker
,
1611 context
->sublevels_up
--;
1614 return expression_tree_walker(node
, finalize_grouping_exprs_walker
,
1620 * Given a GroupingSet node, expand it and return a list of lists.
1622 * For EMPTY nodes, return a list of one empty list.
1624 * For SIMPLE nodes, return a list of one list, which is the node content.
1626 * For CUBE and ROLLUP nodes, return a list of the expansions.
1628 * For SET nodes, recursively expand contained CUBE and ROLLUP.
1631 expand_groupingset_node(GroupingSet
*gs
)
1637 case GROUPING_SET_EMPTY
:
1638 result
= list_make1(NIL
);
1641 case GROUPING_SET_SIMPLE
:
1642 result
= list_make1(gs
->content
);
1645 case GROUPING_SET_ROLLUP
:
1647 List
*rollup_val
= gs
->content
;
1649 int curgroup_size
= list_length(gs
->content
);
1651 while (curgroup_size
> 0)
1653 List
*current_result
= NIL
;
1654 int i
= curgroup_size
;
1656 foreach(lc
, rollup_val
)
1658 GroupingSet
*gs_current
= (GroupingSet
*) lfirst(lc
);
1660 Assert(gs_current
->kind
== GROUPING_SET_SIMPLE
);
1662 current_result
= list_concat(current_result
,
1663 gs_current
->content
);
1665 /* If we are done with making the current group, break */
1670 result
= lappend(result
, current_result
);
1674 result
= lappend(result
, NIL
);
1678 case GROUPING_SET_CUBE
:
1680 List
*cube_list
= gs
->content
;
1681 int number_bits
= list_length(cube_list
);
1685 /* parser should cap this much lower */
1686 Assert(number_bits
< 31);
1688 num_sets
= (1U << number_bits
);
1690 for (i
= 0; i
< num_sets
; i
++)
1692 List
*current_result
= NIL
;
1696 foreach(lc
, cube_list
)
1698 GroupingSet
*gs_current
= (GroupingSet
*) lfirst(lc
);
1700 Assert(gs_current
->kind
== GROUPING_SET_SIMPLE
);
1703 current_result
= list_concat(current_result
,
1704 gs_current
->content
);
1709 result
= lappend(result
, current_result
);
1714 case GROUPING_SET_SETS
:
1718 foreach(lc
, gs
->content
)
1720 List
*current_result
= expand_groupingset_node(lfirst(lc
));
1722 result
= list_concat(result
, current_result
);
1731 /* list_sort comparator to sort sub-lists by length */
1733 cmp_list_len_asc(const ListCell
*a
, const ListCell
*b
)
1735 int la
= list_length((const List
*) lfirst(a
));
1736 int lb
= list_length((const List
*) lfirst(b
));
1738 return (la
> lb
) ? 1 : (la
== lb
) ? 0 : -1;
1741 /* list_sort comparator to sort sub-lists by length and contents */
1743 cmp_list_len_contents_asc(const ListCell
*a
, const ListCell
*b
)
1745 int res
= cmp_list_len_asc(a
, b
);
1749 List
*la
= (List
*) lfirst(a
);
1750 List
*lb
= (List
*) lfirst(b
);
1754 forboth(lca
, la
, lcb
, lb
)
1756 int va
= lfirst_int(lca
);
1757 int vb
= lfirst_int(lcb
);
1770 * Expand a groupingSets clause to a flat list of grouping sets.
1771 * The returned list is sorted by length, shortest sets first.
1773 * This is mainly for the planner, but we use it here too to do
1774 * some consistency checks.
1777 expand_grouping_sets(List
*groupingSets
, bool groupDistinct
, int limit
)
1779 List
*expanded_groups
= NIL
;
1784 if (groupingSets
== NIL
)
1787 foreach(lc
, groupingSets
)
1789 List
*current_result
= NIL
;
1790 GroupingSet
*gs
= lfirst(lc
);
1792 current_result
= expand_groupingset_node(gs
);
1794 Assert(current_result
!= NIL
);
1796 numsets
*= list_length(current_result
);
1798 if (limit
>= 0 && numsets
> limit
)
1801 expanded_groups
= lappend(expanded_groups
, current_result
);
1805 * Do cartesian product between sublists of expanded_groups. While at it,
1806 * remove any duplicate elements from individual grouping sets (we must
1807 * NOT change the number of sets though)
1810 foreach(lc
, (List
*) linitial(expanded_groups
))
1812 result
= lappend(result
, list_union_int(NIL
, (List
*) lfirst(lc
)));
1815 for_each_from(lc
, expanded_groups
, 1)
1817 List
*p
= lfirst(lc
);
1818 List
*new_result
= NIL
;
1821 foreach(lc2
, result
)
1823 List
*q
= lfirst(lc2
);
1828 new_result
= lappend(new_result
,
1829 list_union_int(q
, (List
*) lfirst(lc3
)));
1832 result
= new_result
;
1835 /* Now sort the lists by length and deduplicate if necessary */
1836 if (!groupDistinct
|| list_length(result
) < 2)
1837 list_sort(result
, cmp_list_len_asc
);
1843 /* Sort each groupset individually */
1844 foreach(cell
, result
)
1845 list_sort(lfirst(cell
), list_int_cmp
);
1847 /* Now sort the list of groupsets by length and contents */
1848 list_sort(result
, cmp_list_len_contents_asc
);
1850 /* Finally, remove duplicates */
1851 prev
= linitial(result
);
1852 for_each_from(cell
, result
, 1)
1854 if (equal(lfirst(cell
), prev
))
1855 result
= foreach_delete_current(result
, cell
);
1857 prev
= lfirst(cell
);
1865 * get_aggregate_argtypes
1866 * Identify the specific datatypes passed to an aggregate call.
1868 * Given an Aggref, extract the actual datatypes of the input arguments.
1869 * The input datatypes are reported in a way that matches up with the
1870 * aggregate's declaration, ie, any ORDER BY columns attached to a plain
1871 * aggregate are ignored, but we report both direct and aggregated args of
1872 * an ordered-set aggregate.
1874 * Datatypes are returned into inputTypes[], which must reference an array
1875 * of length FUNC_MAX_ARGS.
1877 * The function result is the number of actual arguments.
1880 get_aggregate_argtypes(Aggref
*aggref
, Oid
*inputTypes
)
1882 int numArguments
= 0;
1885 Assert(list_length(aggref
->aggargtypes
) <= FUNC_MAX_ARGS
);
1887 foreach(lc
, aggref
->aggargtypes
)
1889 inputTypes
[numArguments
++] = lfirst_oid(lc
);
1892 return numArguments
;
1896 * resolve_aggregate_transtype
1897 * Identify the transition state value's datatype for an aggregate call.
1899 * This function resolves a polymorphic aggregate's state datatype.
1900 * It must be passed the aggtranstype from the aggregate's catalog entry,
1901 * as well as the actual argument types extracted by get_aggregate_argtypes.
1902 * (We could fetch pg_aggregate.aggtranstype internally, but all existing
1903 * callers already have the value at hand, so we make them pass it.)
1906 resolve_aggregate_transtype(Oid aggfuncid
,
1911 /* resolve actual type of transition state, if polymorphic */
1912 if (IsPolymorphicType(aggtranstype
))
1914 /* have to fetch the agg's declared input types... */
1915 Oid
*declaredArgTypes
;
1918 (void) get_func_signature(aggfuncid
, &declaredArgTypes
, &agg_nargs
);
1921 * VARIADIC ANY aggs could have more actual than declared args, but
1922 * such extra args can't affect polymorphic type resolution.
1924 Assert(agg_nargs
<= numArguments
);
1926 aggtranstype
= enforce_generic_type_consistency(inputTypes
,
1931 pfree(declaredArgTypes
);
1933 return aggtranstype
;
1937 * Create an expression tree for the transition function of an aggregate.
1938 * This is needed so that polymorphic functions can be used within an
1939 * aggregate --- without the expression tree, such functions would not know
1940 * the datatypes they are supposed to use. (The trees will never actually
1941 * be executed, however, so we can skimp a bit on correctness.)
1943 * agg_input_types and agg_state_type identifies the input types of the
1944 * aggregate. These should be resolved to actual types (ie, none should
1945 * ever be ANYELEMENT etc).
1946 * agg_input_collation is the aggregate function's input collation.
1948 * For an ordered-set aggregate, remember that agg_input_types describes
1949 * the direct arguments followed by the aggregated arguments.
1951 * transfn_oid and invtransfn_oid identify the funcs to be called; the
1952 * latter may be InvalidOid, however if invtransfn_oid is set then
1953 * transfn_oid must also be set.
1955 * transfn_oid may also be passed as the aggcombinefn when the *transfnexpr is
1956 * to be used for a combine aggregate phase. We expect invtransfn_oid to be
1957 * InvalidOid in this case since there is no such thing as an inverse
1960 * Pointers to the constructed trees are returned into *transfnexpr,
1961 * *invtransfnexpr. If there is no invtransfn, the respective pointer is set
1962 * to NULL. Since use of the invtransfn is optional, NULL may be passed for
1966 build_aggregate_transfn_expr(Oid
*agg_input_types
,
1968 int agg_num_direct_inputs
,
1971 Oid agg_input_collation
,
1975 Expr
**invtransfnexpr
)
1982 * Build arg list to use in the transfn FuncExpr node.
1984 args
= list_make1(make_agg_arg(agg_state_type
, agg_input_collation
));
1986 for (i
= agg_num_direct_inputs
; i
< agg_num_inputs
; i
++)
1988 args
= lappend(args
,
1989 make_agg_arg(agg_input_types
[i
], agg_input_collation
));
1992 fexpr
= makeFuncExpr(transfn_oid
,
1996 agg_input_collation
,
1997 COERCE_EXPLICIT_CALL
);
1998 fexpr
->funcvariadic
= agg_variadic
;
1999 *transfnexpr
= (Expr
*) fexpr
;
2002 * Build invtransfn expression if requested, with same args as transfn
2004 if (invtransfnexpr
!= NULL
)
2006 if (OidIsValid(invtransfn_oid
))
2008 fexpr
= makeFuncExpr(invtransfn_oid
,
2012 agg_input_collation
,
2013 COERCE_EXPLICIT_CALL
);
2014 fexpr
->funcvariadic
= agg_variadic
;
2015 *invtransfnexpr
= (Expr
*) fexpr
;
2018 *invtransfnexpr
= NULL
;
2023 * Like build_aggregate_transfn_expr, but creates an expression tree for the
2024 * serialization function of an aggregate.
2027 build_aggregate_serialfn_expr(Oid serialfn_oid
,
2028 Expr
**serialfnexpr
)
2033 /* serialfn always takes INTERNAL and returns BYTEA */
2034 args
= list_make1(make_agg_arg(INTERNALOID
, InvalidOid
));
2036 fexpr
= makeFuncExpr(serialfn_oid
,
2041 COERCE_EXPLICIT_CALL
);
2042 *serialfnexpr
= (Expr
*) fexpr
;
2046 * Like build_aggregate_transfn_expr, but creates an expression tree for the
2047 * deserialization function of an aggregate.
2050 build_aggregate_deserialfn_expr(Oid deserialfn_oid
,
2051 Expr
**deserialfnexpr
)
2056 /* deserialfn always takes BYTEA, INTERNAL and returns INTERNAL */
2057 args
= list_make2(make_agg_arg(BYTEAOID
, InvalidOid
),
2058 make_agg_arg(INTERNALOID
, InvalidOid
));
2060 fexpr
= makeFuncExpr(deserialfn_oid
,
2065 COERCE_EXPLICIT_CALL
);
2066 *deserialfnexpr
= (Expr
*) fexpr
;
2070 * Like build_aggregate_transfn_expr, but creates an expression tree for the
2071 * final function of an aggregate, rather than the transition function.
2074 build_aggregate_finalfn_expr(Oid
*agg_input_types
,
2075 int num_finalfn_inputs
,
2077 Oid agg_result_type
,
2078 Oid agg_input_collation
,
2086 * Build expr tree for final function
2088 args
= list_make1(make_agg_arg(agg_state_type
, agg_input_collation
));
2090 /* finalfn may take additional args, which match agg's input types */
2091 for (i
= 0; i
< num_finalfn_inputs
- 1; i
++)
2093 args
= lappend(args
,
2094 make_agg_arg(agg_input_types
[i
], agg_input_collation
));
2097 *finalfnexpr
= (Expr
*) makeFuncExpr(finalfn_oid
,
2101 agg_input_collation
,
2102 COERCE_EXPLICIT_CALL
);
2103 /* finalfn is currently never treated as variadic */
2107 * Convenience function to build dummy argument expressions for aggregates.
2109 * We really only care that an aggregate support function can discover its
2110 * actual argument types at runtime using get_fn_expr_argtype(), so it's okay
2111 * to use Param nodes that don't correspond to any real Param.
2114 make_agg_arg(Oid argtype
, Oid argcollation
)
2116 Param
*argp
= makeNode(Param
);
2118 argp
->paramkind
= PARAM_EXEC
;
2120 argp
->paramtype
= argtype
;
2121 argp
->paramtypmod
= -1;
2122 argp
->paramcollid
= argcollation
;
2123 argp
->location
= -1;
2124 return (Node
*) argp
;