diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-01-10 04:30:11 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-01-10 04:30:11 +0000 |
commit | e6c714bf30a28cb790c7b99712486bcecefda679 (patch) | |
tree | 60ccbca159d19b6e566a788afdd569f402b6eb2c /src/backend | |
parent | e7b205b486cbf164362f53ea0c99e01fbdb4f483 (diff) | |
download | postgresql-e6c714bf30a28cb790c7b99712486bcecefda679.tar.gz postgresql-e6c714bf30a28cb790c7b99712486bcecefda679.zip |
Bye CursorStmt, now use SelectStmt.
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/parser/analyze.c | 56 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 15 |
2 files changed, 22 insertions, 49 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 8aea3569277..d806ec2059c 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.62 1998/01/09 20:05:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.63 1998/01/10 04:29:47 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -39,7 +39,7 @@ static Query *transformExtendStmt(ParseState *pstate, ExtendStmt *stmt); static Query *transformRuleStmt(ParseState *query, RuleStmt *stmt); static Query *transformSelectStmt(ParseState *pstate, SelectStmt *stmt); static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); -static Query *transformCursorStmt(ParseState *pstate, CursorStmt *stmt); +static Query *transformCursorStmt(ParseState *pstate, SelectStmt *stmt); static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt); List *extras = NIL; @@ -175,12 +175,11 @@ transformStmt(ParseState *pstate, Node *parseTree) result = transformUpdateStmt(pstate, (UpdateStmt *) parseTree); break; - case T_CursorStmt: - result = transformCursorStmt(pstate, (CursorStmt *) parseTree); - break; - case T_SelectStmt: - result = transformSelectStmt(pstate, (SelectStmt *) parseTree); + if (!((SelectStmt *)parseTree)->portalname) + result = transformSelectStmt(pstate, (SelectStmt *) parseTree); + else + result = transformCursorStmt(pstate, (SelectStmt *) parseTree); break; default: @@ -873,6 +872,9 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate->p_rtable, stmt->relname); + if (pstate->p_numAgg > 0) + finalizeAggregates(pstate, qry); + /* make sure we don't have aggregates in the where clause */ if (pstate->p_numAgg > 0) parseCheckAggregates(pstate, qry); @@ -886,47 +888,15 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) * */ static Query * -transformCursorStmt(ParseState *pstate, CursorStmt *stmt) +transformCursorStmt(ParseState *pstate, SelectStmt *stmt) { - Query *qry = makeNode(Query); - - /* - * in the old days, a cursor statement is a 'retrieve into portal'; If - * you change the following, make sure you also go through the code in - * various places that tests the kind of operation. - */ - qry->commandType = CMD_SELECT; + Query *qry; - /* set up a range table */ - makeRangeTable(pstate, NULL, stmt->fromClause); - - qry->uniqueFlag = stmt->unique; + qry = transformSelectStmt(pstate, stmt); qry->into = stmt->portalname; qry->isPortal = TRUE; qry->isBinary = stmt->binary; /* internal portal */ - /* fix the target list */ - qry->targetList = transformTargetList(pstate, stmt->targetList); - - /* fix where clause */ - qry->qual = transformWhereClause(pstate, stmt->whereClause); - - /* fix order clause */ - qry->sortClause = transformSortClause(pstate, - stmt->sortClause, - NIL, - qry->targetList, - qry->uniqueFlag); - /* fix group by clause */ - qry->groupClause = transformGroupClause(pstate, - stmt->groupClause, - qry->targetList); - - qry->rtable = pstate->p_rtable; - - if (pstate->p_numAgg > 0) - finalizeAggregates(pstate, qry); - - return (Query *) qry; + return qry; } diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 1d9d59e95b2..d79fa91bd42 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.87 1998/01/09 21:26:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.88 1998/01/10 04:29:50 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -2226,12 +2226,13 @@ UpdateStmt: UPDATE relation_name * CURSOR STATEMENTS * *****************************************************************************/ - CursorStmt: DECLARE name opt_binary CURSOR FOR - SELECT opt_unique res_target_list2 - from_clause where_clause group_clause sort_clause + SELECT opt_unique res_target_list2 + from_clause where_clause + group_clause having_clause + union_clause sort_clause { - CursorStmt *n = makeNode(CursorStmt); + SelectStmt *n = makeNode(SelectStmt); /* from PORTAL name */ /* @@ -2251,7 +2252,9 @@ CursorStmt: DECLARE name opt_binary CURSOR FOR n->fromClause = $9; n->whereClause = $10; n->groupClause = $11; - n->sortClause = $12; + n->havingClause = $12; + n->unionClause = $13; + n->sortClause = $14; $$ = (Node *)n; } ; |