Skip to content
Snippets Groups Projects
Commit a1dd4090 authored by Bruce Momjian's avatar Bruce Momjian
Browse files

Fix for ORDER BY in UNION.

parent 499b13c9
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.16 1997/12/29 01:12:48 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.17 1997/12/29 04:31:23 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -177,14 +177,12 @@ plan_union_queries(Query *parse)
{
parse->uniqueFlag = "*";
parse->sortClause = transformSortClause(NULL, NIL,
((Plan *) lfirst(union_plans))->targetlist, "*");
parse->sortClause,
parse->targetList, "*");
}
else
{
/* needed so we don't take the flag from the first query */
parse->uniqueFlag = NULL;
parse->sortClause = NIL;
}
parse->havingQual = NULL;
parse->qry_numAgg = 0;
......
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.58 1997/12/29 01:12:55 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.59 1997/12/29 04:31:28 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -828,6 +828,7 @@ transformSelectStmt(ParseState *pstate, RetrieveStmt *stmt)
/* fix order clause */
qry->sortClause = transformSortClause(pstate,
stmt->sortClause,
NIL,
qry->targetList,
qry->uniqueFlag);
......@@ -842,9 +843,6 @@ transformSelectStmt(ParseState *pstate, RetrieveStmt *stmt)
qry->unionall = stmt->unionall; /* in child, so unionClause may be false */
qry->unionClause = transformUnionClause(stmt->unionClause, qry->targetList);
if (qry->unionClause && stmt->sortClause)
elog(WARN, "You can not use ORDER BY with UNION", NULL);
return (Query *) qry;
}
......@@ -918,6 +916,7 @@ transformCursorStmt(ParseState *pstate, CursorStmt *stmt)
/* fix order clause */
qry->sortClause = transformSortClause(pstate,
stmt->sortClause,
NIL,
qry->targetList,
qry->uniqueFlag);
/* fix group by clause */
......
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.5 1997/12/29 02:09:54 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.6 1997/12/29 04:31:31 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -249,10 +249,11 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist)
*/
List *
transformSortClause(ParseState *pstate,
List *orderlist, List *targetlist,
List *orderlist,
List *sortlist,
List *targetlist,
char *uniqueFlag)
{
List *sortlist = NIL;
List *s = NIL;
while (orderlist != NIL)
......@@ -262,6 +263,8 @@ transformSortClause(ParseState *pstate,
TargetEntry *restarget;
Resdom *resdom;
sortlist = NIL; /* we create it on the fly here */
restarget = find_targetlist_entry(pstate, sortby, targetlist);
if (restarget == NULL)
elog(WARN, "The field being ordered by must appear in the target list");
......
......@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: parse_clause.h,v 1.4 1997/12/29 01:13:28 momjian Exp $
* $Id: parse_clause.h,v 1.5 1997/12/29 04:31:50 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -24,8 +24,8 @@ extern Node *transformWhereClause(ParseState *pstate, Node *a_expr);
extern List *transformGroupClause(ParseState *pstate, List *grouplist,
List *targetlist);
extern List *transformSortClause(ParseState *pstate,
List *orderlist, List *targetlist,
char *uniqueFlag);
List *orderlist, List *sortClause,
List *targetlist, char *uniqueFlag);
extern List *transformUnionClause(List *unionClause, List *targetlist);
#endif /* PARSE_CLAUSE_H */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment