summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1997-12-29 04:31:50 +0000
committerBruce Momjian <bruce@momjian.us>1997-12-29 04:31:50 +0000
commita1dd40905304bacfaf4a1bad6a45114e8ccc9e8d (patch)
treee15b1cc8204aff1506df1cb0b3ec6f5e6b1b2596 /src/backend/parser
parent499b13c99403a37ceec69d9cc4faec1c86b34e3c (diff)
downloadpostgresql-a1dd40905304bacfaf4a1bad6a45114e8ccc9e8d.tar.gz
Fix for ORDER BY in UNION.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/analyze.c7
-rw-r--r--src/backend/parser/parse_clause.c9
2 files changed, 9 insertions, 7 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 0d1d3dcb24..5837fa8fb7 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.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 */
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 8028329b43..204f45bb59 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -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");