mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Implement the FILTER clause for aggregate function calls.
This is SQL-standard with a few extensions, namely support for subqueries and outer references in clause expressions. catversion bump due to change in Aggref and WindowFunc. David Fetter, reviewed by Dean Rasheed.
This commit is contained in:
@ -1570,6 +1570,8 @@ expression_tree_walker(Node *node,
|
||||
if (expression_tree_walker((Node *) expr->aggdistinct,
|
||||
walker, context))
|
||||
return true;
|
||||
if (walker((Node *) expr->aggfilter, context))
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case T_WindowFunc:
|
||||
@ -1580,6 +1582,8 @@ expression_tree_walker(Node *node,
|
||||
if (expression_tree_walker((Node *) expr->args,
|
||||
walker, context))
|
||||
return true;
|
||||
if (walker((Node *) expr->aggfilter, context))
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case T_ArrayRef:
|
||||
@ -2079,6 +2083,7 @@ expression_tree_mutator(Node *node,
|
||||
MUTATE(newnode->args, aggref->args, List *);
|
||||
MUTATE(newnode->aggorder, aggref->aggorder, List *);
|
||||
MUTATE(newnode->aggdistinct, aggref->aggdistinct, List *);
|
||||
MUTATE(newnode->aggfilter, aggref->aggfilter, Expr *);
|
||||
return (Node *) newnode;
|
||||
}
|
||||
break;
|
||||
@ -2089,6 +2094,7 @@ expression_tree_mutator(Node *node,
|
||||
|
||||
FLATCOPY(newnode, wfunc, WindowFunc);
|
||||
MUTATE(newnode->args, wfunc->args, List *);
|
||||
MUTATE(newnode->aggfilter, wfunc->aggfilter, Expr *);
|
||||
return (Node *) newnode;
|
||||
}
|
||||
break;
|
||||
@ -2951,6 +2957,8 @@ raw_expression_tree_walker(Node *node,
|
||||
return true;
|
||||
if (walker(fcall->agg_order, context))
|
||||
return true;
|
||||
if (walker(fcall->agg_filter, context))
|
||||
return true;
|
||||
if (walker(fcall->over, context))
|
||||
return true;
|
||||
/* function name is deemed uninteresting */
|
||||
|
Reference in New Issue
Block a user