Commit e6c714bf authored by Bruce Momjian's avatar Bruce Momjian

Bye CursorStmt, now use SelectStmt.

parent e7b205b4
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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); ...@@ -39,7 +39,7 @@ static Query *transformExtendStmt(ParseState *pstate, ExtendStmt *stmt);
static Query *transformRuleStmt(ParseState *query, RuleStmt *stmt); static Query *transformRuleStmt(ParseState *query, RuleStmt *stmt);
static Query *transformSelectStmt(ParseState *pstate, SelectStmt *stmt); static Query *transformSelectStmt(ParseState *pstate, SelectStmt *stmt);
static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *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); static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt);
List *extras = NIL; List *extras = NIL;
...@@ -175,12 +175,11 @@ transformStmt(ParseState *pstate, Node *parseTree) ...@@ -175,12 +175,11 @@ transformStmt(ParseState *pstate, Node *parseTree)
result = transformUpdateStmt(pstate, (UpdateStmt *) parseTree); result = transformUpdateStmt(pstate, (UpdateStmt *) parseTree);
break; break;
case T_CursorStmt:
result = transformCursorStmt(pstate, (CursorStmt *) parseTree);
break;
case T_SelectStmt: case T_SelectStmt:
result = transformSelectStmt(pstate, (SelectStmt *) parseTree); if (!((SelectStmt *)parseTree)->portalname)
result = transformSelectStmt(pstate, (SelectStmt *) parseTree);
else
result = transformCursorStmt(pstate, (SelectStmt *) parseTree);
break; break;
default: default:
...@@ -873,6 +872,9 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) ...@@ -873,6 +872,9 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
qry->rtable = pstate->p_rtable; qry->rtable = pstate->p_rtable;
qry->resultRelation = refnameRangeTablePosn(pstate->p_rtable, stmt->relname); 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 */ /* make sure we don't have aggregates in the where clause */
if (pstate->p_numAgg > 0) if (pstate->p_numAgg > 0)
parseCheckAggregates(pstate, qry); parseCheckAggregates(pstate, qry);
...@@ -886,47 +888,15 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) ...@@ -886,47 +888,15 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
* *
*/ */
static Query * static Query *
transformCursorStmt(ParseState *pstate, CursorStmt *stmt) transformCursorStmt(ParseState *pstate, SelectStmt *stmt)
{ {
Query *qry = makeNode(Query); Query *qry;
/*
* 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;
/* set up a range table */ qry = transformSelectStmt(pstate, stmt);
makeRangeTable(pstate, NULL, stmt->fromClause);
qry->uniqueFlag = stmt->unique;
qry->into = stmt->portalname; qry->into = stmt->portalname;
qry->isPortal = TRUE; qry->isPortal = TRUE;
qry->isBinary = stmt->binary; /* internal portal */ qry->isBinary = stmt->binary; /* internal portal */
/* fix the target list */ return qry;
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;
} }
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * 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 * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -2226,12 +2226,13 @@ UpdateStmt: UPDATE relation_name ...@@ -2226,12 +2226,13 @@ UpdateStmt: UPDATE relation_name
* CURSOR STATEMENTS * CURSOR STATEMENTS
* *
*****************************************************************************/ *****************************************************************************/
CursorStmt: DECLARE name opt_binary CURSOR FOR CursorStmt: DECLARE name opt_binary CURSOR FOR
SELECT opt_unique res_target_list2 SELECT opt_unique res_target_list2
from_clause where_clause group_clause sort_clause from_clause where_clause
group_clause having_clause
union_clause sort_clause
{ {
CursorStmt *n = makeNode(CursorStmt); SelectStmt *n = makeNode(SelectStmt);
/* from PORTAL name */ /* from PORTAL name */
/* /*
...@@ -2251,7 +2252,9 @@ CursorStmt: DECLARE name opt_binary CURSOR FOR ...@@ -2251,7 +2252,9 @@ CursorStmt: DECLARE name opt_binary CURSOR FOR
n->fromClause = $9; n->fromClause = $9;
n->whereClause = $10; n->whereClause = $10;
n->groupClause = $11; n->groupClause = $11;
n->sortClause = $12; n->havingClause = $12;
n->unionClause = $13;
n->sortClause = $14;
$$ = (Node *)n; $$ = (Node *)n;
} }
; ;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: nodes.h,v 1.21 1998/01/09 21:13:43 momjian Exp $ * $Id: nodes.h,v 1.22 1998/01/10 04:30:08 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -145,7 +145,6 @@ typedef enum NodeTag ...@@ -145,7 +145,6 @@ typedef enum NodeTag
T_InsertStmt, T_InsertStmt,
T_DeleteStmt, T_DeleteStmt,
T_UpdateStmt, T_UpdateStmt,
T_CursorStmt,
T_SelectStmt, T_SelectStmt,
T_AddAttrStmt, T_AddAttrStmt,
T_AggregateStmt, T_AggregateStmt,
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: parsenodes.h,v 1.41 1998/01/09 20:06:08 momjian Exp $ * $Id: parsenodes.h,v 1.42 1998/01/10 04:30:11 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -604,23 +604,6 @@ typedef struct UpdateStmt ...@@ -604,23 +604,6 @@ typedef struct UpdateStmt
List *fromClause; /* the from clause */ List *fromClause; /* the from clause */
} UpdateStmt; } UpdateStmt;
/* ----------------------
* Create Cursor Statement
* ----------------------
*/
typedef struct CursorStmt
{
NodeTag type;
char *portalname; /* the portal (cursor) to create */
bool binary; /* a binary (internal) portal? */
char *unique; /* NULL, "*", or unique attribute name */
List *targetList; /* the target list (of ResTarget) */
List *fromClause; /* the from clause */
Node *whereClause; /* qualifications */
List *groupClause; /* group by clause */
List *sortClause; /* sort clause (a list of SortGroupBy's) */
} CursorStmt;
/* ---------------------- /* ----------------------
* Select Statement * Select Statement
* ---------------------- * ----------------------
...@@ -637,6 +620,8 @@ typedef struct SelectStmt ...@@ -637,6 +620,8 @@ typedef struct SelectStmt
Node *havingClause; /* having conditional-expression */ Node *havingClause; /* having conditional-expression */
List *unionClause; /* union subselect parameters */ List *unionClause; /* union subselect parameters */
List *sortClause; /* sort clause (a list of SortGroupBy's) */ List *sortClause; /* sort clause (a list of SortGroupBy's) */
char *portalname; /* the portal (cursor) to create */
bool binary; /* a binary (internal) portal? */
bool unionall; /* union without unique sort */ bool unionall; /* union without unique sort */
} SelectStmt; } SelectStmt;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment