|
PostgreSQL Source Code git master
|
#include "postgres.h"#include "access/htup_details.h"#include "catalog/pg_aggregate.h"#include "catalog/pg_constraint.h"#include "catalog/pg_type.h"#include "common/int.h"#include "nodes/makefuncs.h"#include "nodes/nodeFuncs.h"#include "optimizer/optimizer.h"#include "parser/parse_agg.h"#include "parser/parse_clause.h"#include "parser/parse_coerce.h"#include "parser/parse_expr.h"#include "parser/parse_relation.h"#include "parser/parsetree.h"#include "rewrite/rewriteManip.h"#include "utils/builtins.h"#include "utils/lsyscache.h"#include "utils/syscache.h"
Go to the source code of this file.
Data Structures | |
| struct | check_agg_arguments_context |
| struct | substitute_grouped_columns_context |
Definition at line 2112 of file parse_agg.c.
References Aggref::args, elog, ERROR, exprType(), fb(), GETSTRUCT(), HeapTupleIsValid, lfirst, ObjectIdGetDatum(), OidIsValid, ReleaseSysCache(), SearchSysCache1(), and type.
Referenced by preprocess_aggref().
Definition at line 2263 of file parse_agg.c.
References COERCE_EXPLICIT_CALL, fb(), InvalidOid, list_make2, make_agg_arg(), and makeFuncExpr().
Referenced by build_pertrans_for_aggref().
| void build_aggregate_finalfn_expr | ( | Oid * | agg_input_types, |
| int | num_finalfn_inputs, | ||
| Oid | agg_state_type, | ||
| Oid | agg_result_type, | ||
| Oid | agg_input_collation, | ||
| Oid | finalfn_oid, | ||
| Expr ** | finalfnexpr | ||
| ) |
Definition at line 2287 of file parse_agg.c.
References COERCE_EXPLICIT_CALL, fb(), i, InvalidOid, lappend(), list_make1, make_agg_arg(), and makeFuncExpr().
Referenced by ExecInitAgg(), and initialize_peragg().
Definition at line 2240 of file parse_agg.c.
References COERCE_EXPLICIT_CALL, fb(), InvalidOid, list_make1, make_agg_arg(), and makeFuncExpr().
Referenced by build_pertrans_for_aggref().
| void build_aggregate_transfn_expr | ( | Oid * | agg_input_types, |
| int | agg_num_inputs, | ||
| int | agg_num_direct_inputs, | ||
| bool | agg_variadic, | ||
| Oid | agg_state_type, | ||
| Oid | agg_input_collation, | ||
| Oid | transfn_oid, | ||
| Oid | invtransfn_oid, | ||
| Expr ** | transfnexpr, | ||
| Expr ** | invtransfnexpr | ||
| ) |
Definition at line 2179 of file parse_agg.c.
References COERCE_EXPLICIT_CALL, fb(), i, InvalidOid, lappend(), list_make1, make_agg_arg(), makeFuncExpr(), and OidIsValid.
Referenced by build_pertrans_for_aggref(), and initialize_peragg().
|
static |
Definition at line 1761 of file parse_agg.c.
References Assert, attnum, bms_add_member(), fb(), Query::groupingSets, substitute_grouped_columns_context::gset_common, list_member_int(), makeVar(), ParseState::p_grouping_nsitem, substitute_grouped_columns_context::pstate, substitute_grouped_columns_context::qry, and substitute_grouped_columns_context::sublevels_up.
Referenced by substitute_grouped_columns_mutator().
|
static |
Definition at line 645 of file parse_agg.c.
References check_agg_arguments_walker(), ereport, errcode(), errdetail(), errmsg(), ERROR, fb(), locate_agg_of_level(), locate_var_of_level(), Min, check_agg_arguments_context::min_agglevel, check_agg_arguments_context::min_cte, check_agg_arguments_context::min_ctelevel, check_agg_arguments_context::min_varlevel, parser_errposition(), check_agg_arguments_context::pstate, and check_agg_arguments_context::sublevels_up.
Referenced by check_agglevels_and_constraints().
|
static |
Definition at line 751 of file parse_agg.c.
References check_agg_arguments_walker(), ereport, errcode(), errhint(), errmsg(), ERROR, expression_tree_walker, exprLocation(), fb(), IsA, check_agg_arguments_context::min_agglevel, check_agg_arguments_context::min_cte, check_agg_arguments_context::min_ctelevel, check_agg_arguments_context::min_varlevel, parser_errposition(), check_agg_arguments_context::pstate, QTW_EXAMINE_RTES_BEFORE, query_tree_walker, RTE_CTE, and check_agg_arguments_context::sublevels_up.
Referenced by check_agg_arguments(), and check_agg_arguments_walker().
|
static |
Definition at line 307 of file parse_agg.c.
References _, Assert, check_agg_arguments(), ereport, err(), errcode(), errmsg_internal(), ERROR, EXPR_KIND_ALTER_COL_TRANSFORM, EXPR_KIND_CALL_ARGUMENT, EXPR_KIND_CHECK_CONSTRAINT, EXPR_KIND_COLUMN_DEFAULT, EXPR_KIND_COPY_WHERE, EXPR_KIND_CYCLE_MARK, EXPR_KIND_DISTINCT_ON, EXPR_KIND_DOMAIN_CHECK, EXPR_KIND_EXECUTE_PARAMETER, EXPR_KIND_FILTER, EXPR_KIND_FROM_FUNCTION, EXPR_KIND_FROM_SUBSELECT, EXPR_KIND_FUNCTION_DEFAULT, EXPR_KIND_GENERATED_COLUMN, EXPR_KIND_GROUP_BY, EXPR_KIND_HAVING, EXPR_KIND_INDEX_EXPRESSION, EXPR_KIND_INDEX_PREDICATE, EXPR_KIND_INSERT_TARGET, EXPR_KIND_JOIN_ON, EXPR_KIND_JOIN_USING, EXPR_KIND_LIMIT, EXPR_KIND_MERGE_RETURNING, EXPR_KIND_MERGE_WHEN, EXPR_KIND_NONE, EXPR_KIND_OFFSET, EXPR_KIND_ORDER_BY, EXPR_KIND_OTHER, EXPR_KIND_PARTITION_BOUND, EXPR_KIND_PARTITION_EXPRESSION, EXPR_KIND_POLICY, EXPR_KIND_RETURNING, EXPR_KIND_SELECT_TARGET, EXPR_KIND_STATS_EXPRESSION, EXPR_KIND_TRIGGER_WHEN, EXPR_KIND_UPDATE_SOURCE, EXPR_KIND_UPDATE_TARGET, EXPR_KIND_VALUES, EXPR_KIND_VALUES_SINGLE, EXPR_KIND_WHERE, EXPR_KIND_WINDOW_FRAME_GROUPS, EXPR_KIND_WINDOW_FRAME_RANGE, EXPR_KIND_WINDOW_FRAME_ROWS, EXPR_KIND_WINDOW_ORDER, EXPR_KIND_WINDOW_PARTITION, fb(), IsA, NIL, ParseState::p_expr_kind, ParseState::p_hasAggs, ParseState::parentParseState, ParseExprKindName(), and parser_errposition().
Referenced by transformAggregateCall(), and transformGroupingFunc().
Definition at line 1903 of file parse_agg.c.
References a, b, fb(), lfirst, list_length(), and pg_cmp_s32().
Referenced by cmp_list_len_contents_asc(), and expand_grouping_sets().
Definition at line 1913 of file parse_agg.c.
References a, b, cmp_list_len_asc(), fb(), forboth, lca(), lfirst, and lfirst_int.
Referenced by expand_grouping_sets().
Definition at line 1947 of file parse_agg.c.
References Assert, cmp_list_len_asc(), cmp_list_len_contents_asc(), equal(), expand_groupingset_node(), fb(), for_each_from, foreach_delete_current, lappend(), lfirst, linitial, list_int_cmp(), list_length(), list_sort(), list_union_int(), and NIL.
Referenced by parseCheckAggregates(), query_is_distinct_for(), and subquery_planner().
|
static |
Definition at line 1801 of file parse_agg.c.
References Assert, expand_groupingset_node(), fb(), GROUPING_SET_CUBE, GROUPING_SET_EMPTY, GROUPING_SET_ROLLUP, GROUPING_SET_SETS, GROUPING_SET_SIMPLE, i, lappend(), lfirst, list_concat(), list_length(), list_make1, and NIL.
Referenced by expand_grouping_sets(), and expand_groupingset_node().
|
static |
Definition at line 1594 of file parse_agg.c.
References fb(), finalize_grouping_exprs_walker(), substitute_grouped_columns_context::func_grouped_rels, substitute_grouped_columns_context::groupClauseCommonVars, substitute_grouped_columns_context::groupClauses, substitute_grouped_columns_context::gset_common, substitute_grouped_columns_context::hasJoinRTEs, substitute_grouped_columns_context::have_non_var_grouping, substitute_grouped_columns_context::in_agg_direct_args, NIL, substitute_grouped_columns_context::pstate, substitute_grouped_columns_context::qry, and substitute_grouped_columns_context::sublevels_up.
Referenced by parseCheckAggregates().
|
static |
Definition at line 1614 of file parse_agg.c.
References Assert, equal(), ereport, errcode(), errmsg(), ERROR, expression_tree_walker, exprLocation(), fb(), finalize_grouping_exprs_walker(), flatten_join_alias_vars(), substitute_grouped_columns_context::groupClauses, substitute_grouped_columns_context::hasJoinRTEs, substitute_grouped_columns_context::have_non_var_grouping, substitute_grouped_columns_context::in_agg_direct_args, IsA, lappend_int(), lfirst, NIL, parser_errposition(), substitute_grouped_columns_context::pstate, substitute_grouped_columns_context::qry, query_tree_walker, substitute_grouped_columns_context::sublevels_up, Var::varattno, Var::varlevelsup, and Var::varno.
Referenced by finalize_grouping_exprs(), and finalize_grouping_exprs_walker().
Definition at line 2050 of file parse_agg.c.
References Assert, fb(), FUNC_MAX_ARGS, lfirst_oid, and list_length().
Referenced by ExecInitAgg(), get_agg_expr_helper(), and preprocess_aggref().
Definition at line 2327 of file parse_agg.c.
References fb(), makeNode, and PARAM_EXEC.
Referenced by build_aggregate_deserialfn_expr(), build_aggregate_finalfn_expr(), build_aggregate_serialfn_expr(), and build_aggregate_transfn_expr().
| void parseCheckAggregates | ( | ParseState * | pstate, |
| Query * | qry | ||
| ) |
Definition at line 1138 of file parse_agg.c.
References addRangeTableEntryForGroup(), Assert, ereport, errcode(), errmsg(), ERROR, expand_grouping_sets(), exprLocation(), fb(), finalize_grouping_exprs(), flatten_join_alias_vars(), for_each_from, get_sortgroupclause_tle(), Query::groupClause, Query::groupDistinct, Query::groupingSets, Query::havingQual, IsA, lappend(), lfirst, linitial, list_intersection_int(), list_length(), list_member_int(), locate_agg_of_level(), NIL, ParseState::p_grouping_nsitem, ParseState::p_hasAggs, ParseState::p_rtable, parser_errposition(), Query::rtable, RTE_CTE, RTE_JOIN, substitute_grouped_columns(), and Query::targetList.
Referenced by transformDeleteStmt(), transformSelectStmt(), and transformSetOperationStmt().
| Oid resolve_aggregate_transtype | ( | Oid | aggfuncid, |
| Oid | aggtranstype, | ||
| Oid * | inputTypes, | ||
| int | numArguments | ||
| ) |
Definition at line 2076 of file parse_agg.c.
References Assert, enforce_generic_type_consistency(), fb(), get_func_signature(), and pfree().
Referenced by initialize_peragg(), and preprocess_aggref().
|
static |
Definition at line 1358 of file parse_agg.c.
References substitute_grouped_columns_context::func_grouped_rels, substitute_grouped_columns_context::groupClauseCommonVars, substitute_grouped_columns_context::groupClauses, substitute_grouped_columns_context::gset_common, substitute_grouped_columns_context::hasJoinRTEs, substitute_grouped_columns_context::have_non_var_grouping, substitute_grouped_columns_context::in_agg_direct_args, substitute_grouped_columns_context::pstate, substitute_grouped_columns_context::qry, substitute_grouped_columns_context::sublevels_up, and substitute_grouped_columns_mutator().
Referenced by parseCheckAggregates().
|
static |
Definition at line 1380 of file parse_agg.c.
References Assert, attname, attnum, buildGroupedVar(), check_functional_grouping(), copyObject, equal(), ereport, errcode(), errdetail(), errmsg(), ERROR, expression_tree_mutator, fb(), substitute_grouped_columns_context::func_grouped_rels, get_rte_attribute_name(), substitute_grouped_columns_context::groupClauseCommonVars, substitute_grouped_columns_context::groupClauses, substitute_grouped_columns_context::have_non_var_grouping, substitute_grouped_columns_context::in_agg_direct_args, IsA, lappend_int(), lfirst, list_length(), list_member_int(), Var::location, ParseState::p_rtable, parser_errposition(), substitute_grouped_columns_context::pstate, substitute_grouped_columns_context::qry, query_tree_mutator, rt_fetch, RTE_RELATION, substitute_grouped_columns_context::sublevels_up, substitute_grouped_columns_mutator(), Var::varattno, Var::varlevelsup, and Var::varno.
Referenced by substitute_grouped_columns(), and substitute_grouped_columns_mutator().
| void transformAggregateCall | ( | ParseState * | pstate, |
| Aggref * | agg, | ||
| List * | args, | ||
| List * | aggorder, | ||
| bool | agg_distinct | ||
| ) |
Definition at line 112 of file parse_agg.c.
References addTargetToSortList(), arg, Assert, check_agglevels_and_constraints(), ereport, errcode(), errdetail(), errmsg(), ERROR, EXPR_KIND_ORDER_BY, exprLocation(), exprType(), fb(), forboth, format_type_be(), get_sortgroupclause_expr(), lappend(), lappend_oid(), lfirst, list_copy_tail(), list_length(), list_truncate(), makeTargetEntry(), NIL, OidIsValid, ParseState::p_next_resno, parser_errposition(), transformDistinctClause(), and transformSortClause().
Referenced by ParseFuncOrColumn(), and transformJsonAggConstructor().
| Node * transformGroupingFunc | ( | ParseState * | pstate, |
| GroupingFunc * | p | ||
| ) |
Definition at line 268 of file parse_agg.c.
References check_agglevels_and_constraints(), ereport, errcode(), errmsg(), ERROR, fb(), lappend(), lfirst, list_length(), GroupingFunc::location, makeNode, NIL, ParseState::p_expr_kind, parser_errposition(), and transformExpr().
Referenced by transformExprRecurse().
| void transformWindowFuncCall | ( | ParseState * | pstate, |
| WindowFunc * | wfunc, | ||
| WindowDef * | windef | ||
| ) |
Definition at line 878 of file parse_agg.c.
References _, WindowFunc::args, Assert, contain_windowfuncs(), equal(), ereport, err(), errcode(), errmsg(), errmsg_internal(), ERROR, EXPR_KIND_ALTER_COL_TRANSFORM, EXPR_KIND_CALL_ARGUMENT, EXPR_KIND_CHECK_CONSTRAINT, EXPR_KIND_COLUMN_DEFAULT, EXPR_KIND_COPY_WHERE, EXPR_KIND_CYCLE_MARK, EXPR_KIND_DISTINCT_ON, EXPR_KIND_DOMAIN_CHECK, EXPR_KIND_EXECUTE_PARAMETER, EXPR_KIND_FILTER, EXPR_KIND_FROM_FUNCTION, EXPR_KIND_FROM_SUBSELECT, EXPR_KIND_FUNCTION_DEFAULT, EXPR_KIND_GENERATED_COLUMN, EXPR_KIND_GROUP_BY, EXPR_KIND_HAVING, EXPR_KIND_INDEX_EXPRESSION, EXPR_KIND_INDEX_PREDICATE, EXPR_KIND_INSERT_TARGET, EXPR_KIND_JOIN_ON, EXPR_KIND_JOIN_USING, EXPR_KIND_LIMIT, EXPR_KIND_MERGE_RETURNING, EXPR_KIND_MERGE_WHEN, EXPR_KIND_NONE, EXPR_KIND_OFFSET, EXPR_KIND_ORDER_BY, EXPR_KIND_OTHER, EXPR_KIND_PARTITION_BOUND, EXPR_KIND_PARTITION_EXPRESSION, EXPR_KIND_POLICY, EXPR_KIND_RETURNING, EXPR_KIND_SELECT_TARGET, EXPR_KIND_STATS_EXPRESSION, EXPR_KIND_TRIGGER_WHEN, EXPR_KIND_UPDATE_SOURCE, EXPR_KIND_UPDATE_TARGET, EXPR_KIND_VALUES, EXPR_KIND_VALUES_SINGLE, EXPR_KIND_WHERE, EXPR_KIND_WINDOW_FRAME_GROUPS, EXPR_KIND_WINDOW_FRAME_RANGE, EXPR_KIND_WINDOW_FRAME_ROWS, EXPR_KIND_WINDOW_ORDER, EXPR_KIND_WINDOW_PARTITION, fb(), FRAMEOPTION_DEFAULTS, lappend(), lfirst, list_length(), locate_windowfunc(), WindowFunc::location, NIL, ParseState::p_expr_kind, ParseState::p_hasWindowFuncs, ParseState::p_windowdefs, ParseExprKindName(), parser_errposition(), and WindowFunc::winref.
Referenced by ParseFuncOrColumn(), and transformJsonAggConstructor().