aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/parse_agg.c18
-rw-r--r--src/backend/parser/parse_func.c9
-rw-r--r--src/include/parser/parse_agg.h3
3 files changed, 15 insertions, 15 deletions
diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c
index d30d01261f7..c36c5fb08c6 100644
--- a/src/backend/parser/parse_agg.c
+++ b/src/backend/parser/parse_agg.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_agg.c,v 1.92 2010/02/26 02:00:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_agg.c,v 1.93 2010/03/17 16:52:38 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -44,10 +44,11 @@ static bool check_ungrouped_columns_walker(Node *node,
* transformAggregateCall -
* Finish initial transformation of an aggregate call
*
- * parse_func.c has recognized the function as an aggregate, and has set
- * up all the fields of the Aggref except aggdistinct and agglevelsup.
- * However, the args list is just bare expressions, and the aggorder list
- * hasn't been transformed at all.
+ * parse_func.c has recognized the function as an aggregate, and has set up
+ * all the fields of the Aggref except args, aggorder, aggdistinct and
+ * agglevelsup. The passed-in args list has been through standard expression
+ * transformation, while the passed-in aggorder list hasn't been transformed
+ * at all.
*
* Here we convert the args list into a targetlist by inserting TargetEntry
* nodes, and then transform the aggorder and agg_distinct specifications to
@@ -59,7 +60,8 @@ static bool check_ungrouped_columns_walker(Node *node,
* pstate level.
*/
void
-transformAggregateCall(ParseState *pstate, Aggref *agg, bool agg_distinct)
+transformAggregateCall(ParseState *pstate, Aggref *agg,
+ List *args, List *aggorder, bool agg_distinct)
{
List *tlist;
List *torder;
@@ -75,7 +77,7 @@ transformAggregateCall(ParseState *pstate, Aggref *agg, bool agg_distinct)
*/
tlist = NIL;
attno = 1;
- foreach(lc, agg->args)
+ foreach(lc, args)
{
Expr *arg = (Expr *) lfirst(lc);
TargetEntry *tle = makeTargetEntry(arg, attno++, NULL, false);
@@ -96,7 +98,7 @@ transformAggregateCall(ParseState *pstate, Aggref *agg, bool agg_distinct)
pstate->p_next_resno = attno;
torder = transformSortClause(pstate,
- agg->aggorder,
+ aggorder,
&tlist,
true /* fix unknowns */ ,
true /* force SQL99 rules */ );
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index dffc24c09e3..8a2663c232c 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_func.c,v 1.222 2010/02/26 02:00:52 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_func.c,v 1.223 2010/03/17 16:52:38 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -381,10 +381,7 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
aggref->aggfnoid = funcid;
aggref->aggtype = rettype;
- /* args and aggorder will be modified by transformAggregateCall */
- aggref->args = fargs;
- aggref->aggorder = agg_order;
- /* aggdistinct will be set by transformAggregateCall */
+ /* args, aggorder, aggdistinct will be set by transformAggregateCall */
aggref->aggstar = agg_star;
/* agglevelsup will be set by transformAggregateCall */
aggref->location = location;
@@ -419,7 +416,7 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
parser_errposition(pstate, location)));
/* parse_agg.c does additional aggregate-specific processing */
- transformAggregateCall(pstate, aggref, agg_distinct);
+ transformAggregateCall(pstate, aggref, fargs, agg_order, agg_distinct);
retval = (Node *) aggref;
}
diff --git a/src/include/parser/parse_agg.h b/src/include/parser/parse_agg.h
index 8da37ef3077..5dc0da2f9b5 100644
--- a/src/include/parser/parse_agg.h
+++ b/src/include/parser/parse_agg.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/parser/parse_agg.h,v 1.42 2010/02/26 02:01:26 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/parser/parse_agg.h,v 1.43 2010/03/17 16:52:38 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -16,6 +16,7 @@
#include "parser/parse_node.h"
extern void transformAggregateCall(ParseState *pstate, Aggref *agg,
+ List *args, List *aggorder,
bool agg_distinct);
extern void transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
WindowDef *windef);