7
7
*
8
8
*
9
9
* IDENTIFICATION
10
- * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.62 1998/01/09 20:05:49 momjian Exp $
10
+ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.63 1998/01/10 04:29:47 momjian Exp $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
@@ -39,7 +39,7 @@ static Query *transformExtendStmt(ParseState *pstate, ExtendStmt *stmt);
39
39
static Query * transformRuleStmt (ParseState * query , RuleStmt * stmt );
40
40
static Query * transformSelectStmt (ParseState * pstate , SelectStmt * stmt );
41
41
static Query * transformUpdateStmt (ParseState * pstate , UpdateStmt * stmt );
42
- static Query * transformCursorStmt (ParseState * pstate , CursorStmt * stmt );
42
+ static Query * transformCursorStmt (ParseState * pstate , SelectStmt * stmt );
43
43
static Query * transformCreateStmt (ParseState * pstate , CreateStmt * stmt );
44
44
45
45
List * extras = NIL ;
@@ -175,12 +175,11 @@ transformStmt(ParseState *pstate, Node *parseTree)
175
175
result = transformUpdateStmt (pstate , (UpdateStmt * ) parseTree );
176
176
break ;
177
177
178
- case T_CursorStmt :
179
- result = transformCursorStmt (pstate , (CursorStmt * ) parseTree );
180
- break ;
181
-
182
178
case T_SelectStmt :
183
- result = transformSelectStmt (pstate , (SelectStmt * ) parseTree );
179
+ if (!((SelectStmt * )parseTree )-> portalname )
180
+ result = transformSelectStmt (pstate , (SelectStmt * ) parseTree );
181
+ else
182
+ result = transformCursorStmt (pstate , (SelectStmt * ) parseTree );
184
183
break ;
185
184
186
185
default :
@@ -873,6 +872,9 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
873
872
qry -> rtable = pstate -> p_rtable ;
874
873
qry -> resultRelation = refnameRangeTablePosn (pstate -> p_rtable , stmt -> relname );
875
874
875
+ if (pstate -> p_numAgg > 0 )
876
+ finalizeAggregates (pstate , qry );
877
+
876
878
/* make sure we don't have aggregates in the where clause */
877
879
if (pstate -> p_numAgg > 0 )
878
880
parseCheckAggregates (pstate , qry );
@@ -886,47 +888,15 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
886
888
*
887
889
*/
888
890
static Query *
889
- transformCursorStmt (ParseState * pstate , CursorStmt * stmt )
891
+ transformCursorStmt (ParseState * pstate , SelectStmt * stmt )
890
892
{
891
- Query * qry = makeNode (Query );
892
-
893
- /*
894
- * in the old days, a cursor statement is a 'retrieve into portal'; If
895
- * you change the following, make sure you also go through the code in
896
- * various places that tests the kind of operation.
897
- */
898
- qry -> commandType = CMD_SELECT ;
893
+ Query * qry ;
899
894
900
- /* set up a range table */
901
- makeRangeTable (pstate , NULL , stmt -> fromClause );
902
-
903
- qry -> uniqueFlag = stmt -> unique ;
895
+ qry = transformSelectStmt (pstate , stmt );
904
896
905
897
qry -> into = stmt -> portalname ;
906
898
qry -> isPortal = TRUE;
907
899
qry -> isBinary = stmt -> binary ; /* internal portal */
908
900
909
- /* fix the target list */
910
- qry -> targetList = transformTargetList (pstate , stmt -> targetList );
911
-
912
- /* fix where clause */
913
- qry -> qual = transformWhereClause (pstate , stmt -> whereClause );
914
-
915
- /* fix order clause */
916
- qry -> sortClause = transformSortClause (pstate ,
917
- stmt -> sortClause ,
918
- NIL ,
919
- qry -> targetList ,
920
- qry -> uniqueFlag );
921
- /* fix group by clause */
922
- qry -> groupClause = transformGroupClause (pstate ,
923
- stmt -> groupClause ,
924
- qry -> targetList );
925
-
926
- qry -> rtable = pstate -> p_rtable ;
927
-
928
- if (pstate -> p_numAgg > 0 )
929
- finalizeAggregates (pstate , qry );
930
-
931
- return (Query * ) qry ;
901
+ return qry ;
932
902
}
0 commit comments