mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
As someone asked for this feature - patch for 1.09 follows.
Now You can do queries like select sum(some_func(x)) from ... select min(table1.x + table2.y) from table1, table2 where ... and so on. Vadim
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.12 1996/11/25 03:03:48 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.13 1996/11/30 17:49:02 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -434,13 +434,16 @@ ParseAgg(char *aggname, Oid basetype, Node *target)
|
||||
fintype = aggform->aggfinaltype;
|
||||
xfn1 = aggform->aggtransfn1;
|
||||
|
||||
if (nodeTag(target) != T_Var)
|
||||
elog(WARN, "parser: aggregate can only be applied on an attribute");
|
||||
if (nodeTag(target) != T_Var && nodeTag(target) != T_Expr)
|
||||
elog(WARN, "parser: aggregate can only be applied on an attribute or expression");
|
||||
|
||||
/* only aggregates with transfn1 need a base type */
|
||||
if (OidIsValid(xfn1)) {
|
||||
basetype = aggform->aggbasetype;
|
||||
vartype = ((Var*)target)->vartype;
|
||||
if (nodeTag(target) == T_Var)
|
||||
vartype = ((Var*)target)->vartype;
|
||||
else
|
||||
vartype = ((Expr*)target)->typeOid;
|
||||
|
||||
if (basetype != vartype) {
|
||||
Type tp1, tp2, get_id_type();
|
||||
|
Reference in New Issue
Block a user