Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita1dd409

Browse files
committed
Fix for ORDER BY in UNION.
1 parent499b13c commita1dd409

File tree

4 files changed

+15
-15
lines changed

4 files changed

+15
-15
lines changed

‎src/backend/optimizer/prep/prepunion.c‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.16 1997/12/2901:12:48 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.17 1997/12/2904:31:23 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -177,14 +177,12 @@ plan_union_queries(Query *parse)
177177
{
178178
parse->uniqueFlag="*";
179179
parse->sortClause=transformSortClause(NULL,NIL,
180-
((Plan*)lfirst(union_plans))->targetlist,"*");
180+
parse->sortClause,
181+
parse->targetList,"*");
181182
}
182183
else
183-
{
184184
/* needed so we don't take the flag from the first query */
185185
parse->uniqueFlag=NULL;
186-
parse->sortClause=NIL;
187-
}
188186

189187
parse->havingQual=NULL;
190188
parse->qry_numAgg=0;

‎src/backend/parser/analyze.c‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.58 1997/12/2901:12:55 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.59 1997/12/2904:31:28 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -828,6 +828,7 @@ transformSelectStmt(ParseState *pstate, RetrieveStmt *stmt)
828828
/* fix order clause */
829829
qry->sortClause=transformSortClause(pstate,
830830
stmt->sortClause,
831+
NIL,
831832
qry->targetList,
832833
qry->uniqueFlag);
833834

@@ -842,9 +843,6 @@ transformSelectStmt(ParseState *pstate, RetrieveStmt *stmt)
842843
qry->unionall=stmt->unionall;/* in child, so unionClause may be false */
843844
qry->unionClause=transformUnionClause(stmt->unionClause,qry->targetList);
844845

845-
if (qry->unionClause&&stmt->sortClause)
846-
elog(WARN,"You can not use ORDER BY with UNION",NULL);
847-
848846
return (Query*)qry;
849847
}
850848

@@ -918,6 +916,7 @@ transformCursorStmt(ParseState *pstate, CursorStmt *stmt)
918916
/* fix order clause */
919917
qry->sortClause=transformSortClause(pstate,
920918
stmt->sortClause,
919+
NIL,
921920
qry->targetList,
922921
qry->uniqueFlag);
923922
/* fix group by clause */

‎src/backend/parser/parse_clause.c‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.5 1997/12/2902:09:54 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.6 1997/12/2904:31:31 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -249,10 +249,11 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist)
249249
*/
250250
List*
251251
transformSortClause(ParseState*pstate,
252-
List*orderlist,List*targetlist,
252+
List*orderlist,
253+
List*sortlist,
254+
List*targetlist,
253255
char*uniqueFlag)
254256
{
255-
List*sortlist=NIL;
256257
List*s=NIL;
257258

258259
while (orderlist!=NIL)
@@ -262,6 +263,8 @@ transformSortClause(ParseState *pstate,
262263
TargetEntry*restarget;
263264
Resdom*resdom;
264265

266+
sortlist=NIL;/* we create it on the fly here */
267+
265268
restarget=find_targetlist_entry(pstate,sortby,targetlist);
266269
if (restarget==NULL)
267270
elog(WARN,"The field being ordered by must appear in the target list");

‎src/include/parser/parse_clause.h‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: parse_clause.h,v 1.4 1997/12/2901:13:28 momjian Exp $
9+
* $Id: parse_clause.h,v 1.5 1997/12/2904:31:50 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -24,8 +24,8 @@ extern Node *transformWhereClause(ParseState *pstate, Node *a_expr);
2424
externList*transformGroupClause(ParseState*pstate,List*grouplist,
2525
List*targetlist);
2626
externList*transformSortClause(ParseState*pstate,
27-
List*orderlist,List*targetlist,
28-
char*uniqueFlag);
27+
List*orderlist,List*sortClause,
28+
List*targetlist,char*uniqueFlag);
2929
externList*transformUnionClause(List*unionClause,List*targetlist);
3030

3131
#endif/* PARSE_CLAUSE_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp