*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
{
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;
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
/* fix order clause */
qry->sortClause = transformSortClause(pstate,
stmt->sortClause,
+ NIL,
qry->targetList,
qry->uniqueFlag);
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;
}
/* fix order clause */
qry->sortClause = transformSortClause(pstate,
stmt->sortClause,
+ NIL,
qry->targetList,
qry->uniqueFlag);
/* fix group by clause */
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
*/
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)
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");
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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 */