From ab22b34891b9b9002f302710facd110ac4af7657 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Tue, 6 Aug 1996 16:27:59 +0000 Subject: [PATCH] Fixes: While a normal SELECT statement can contain a GROUP BY clause, a cursor declaration cannot. This was not the case in PG-1.0. Was there a good reason why this was changed? Are cursors being phased out? Is there any way to get data with just a SELECT (and without a DECLARE CURSOR ...)? The patch below seems to fix things. If anyone can see a problem with it, please let me know. Thanks. Submitted by: David Smith --- src/backend/nodes/parsenodes.h | 3 ++- src/backend/parser/analyze.c | 6 +++++- src/backend/parser/gram.y | 7 ++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/backend/nodes/parsenodes.h b/src/backend/nodes/parsenodes.h index bc994bb1a0..ff5baea9f1 100644 --- a/src/backend/nodes/parsenodes.h +++ b/src/backend/nodes/parsenodes.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.1.1.1 1996/07/09 06:21:33 scrappy Exp $ + * $Id: parsenodes.h,v 1.2 1996/08/06 16:27:48 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -462,6 +462,7 @@ typedef struct CursorStmt { List *targetList; /* the target list (of ResTarget) */ List *fromClause; /* the from clause */ Node *whereClause; /* qualifications */ + List *groupClause; /* group by clause */ List *orderClause; /* sort clause (a list of SortBy's) */ } CursorStmt; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index cba2e21199..a99bd780fa 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.3 1996/07/20 07:58:04 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.4 1996/08/06 16:27:56 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -509,6 +509,10 @@ transformCursorStmt(ParseState *pstate, CursorStmt *stmt) qry->sortClause = transformSortClause(stmt->orderClause, qry->targetList, qry->uniqueFlag); + /* fix group by clause */ + qry->groupClause = transformGroupClause(pstate, + stmt->groupClause); + qry->rtable = pstate->p_rtable; if (pstate->p_numAgg > 0) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 4fbfbbc8ae..a40a2caff8 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.2 1996/07/23 02:23:33 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.3 1996/08/06 16:27:59 scrappy Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -1349,7 +1349,7 @@ ReplaceStmt: UPDATE relation_name CursorStmt: DECLARE name opt_binary CURSOR FOR SELECT opt_unique res_target_list2 - from_clause where_clause sort_clause + from_clause where_clause group_clause sort_clause { CursorStmt *n = makeNode(CursorStmt); @@ -1370,7 +1370,8 @@ CursorStmt: DECLARE name opt_binary CURSOR FOR n->targetList = $8; n->fromClause = $9; n->whereClause = $10; - n->orderClause = $11; + n->groupClause = $11; + n->orderClause = $12; $$ = (Node *)n; } ; -- 2.40.0