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

Commit2e61593

Browse files
committed
I made several adjustments to my earlier patch to handle the
condition where the target label is ambiguous.
1 parenta576a60 commit2e61593

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

‎src/backend/parser/parse_clause.c

Lines changed: 23 additions & 8 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.17 1998/05/29 14:00:19 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.18 1998/06/05 03:49:18 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -194,17 +194,32 @@ find_targetlist_entry(ParseState *pstate, SortGroupBy *sortgroupby, List *tlist)
194194
* it will not be projected into the final tuple.
195195
* daveh@insightdist.com 5/20/98
196196
*/
197-
if ( !target_result) {
197+
if ( !target_result&&sortgroupby->name) {
198198
List*p_target=tlist;
199-
Ident*missingTargetId= (Ident*)makeNode(Ident);
200199
TargetEntry*tent=makeNode(TargetEntry);
201200

202-
/* Fill in the constructed Ident node */
203-
missingTargetId->type=T_Ident;
204-
missingTargetId->name=palloc(strlen(sortgroupby->name)+1);
205-
strcpy(missingTargetId->name,sortgroupby->name);
206201

207-
transformTargetId(pstate,missingTargetId,tent,missingTargetId->name, TRUE);
202+
if (sortgroupby->range) {
203+
Attr*missingTarget= (Attr*)makeNode(Attr);
204+
missingTarget->type=T_Attr;
205+
206+
missingTarget->relname=palloc(strlen(sortgroupby->range)+1);
207+
strcpy(missingTarget->relname,sortgroupby->range);
208+
209+
missingTarget->attrs=lcons(makeString(sortgroupby->name),NIL);
210+
211+
transformTargetId(pstate, (Node*)missingTarget,tent,sortgroupby->name, TRUE);
212+
}
213+
else {
214+
Ident*missingTarget= (Ident*)makeNode(Ident);
215+
missingTarget->type=T_Ident;
216+
217+
missingTarget->name=palloc(strlen(sortgroupby->name)+1);
218+
strcpy(missingTarget->name,sortgroupby->name);
219+
220+
transformTargetId(pstate, (Node*)missingTarget,tent,sortgroupby->name, TRUE);
221+
}
222+
208223

209224
/* Add to the end of the target list */
210225
while (lnext(p_target)!=NIL) {

‎src/backend/parser/parse_target.c

Lines changed: 4 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/parse_target.c,v 1.14 1998/05/29 14:00:23 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.15 1998/06/05 03:49:18 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -54,7 +54,7 @@ size_target_expr(ParseState *pstate,
5454
*/
5555
void
5656
transformTargetId(ParseState*pstate,
57-
Ident*ident,
57+
Node*node,
5858
TargetEntry*tent,
5959
char*resname,
6060
int16resjunk)
@@ -68,7 +68,7 @@ transformTargetId(ParseState *pstate,
6868
* relation names (even though they can be stored in
6969
* Ident nodes, too)
7070
*/
71-
expr=transformIdent(pstate,(Node*)ident,EXPR_COLUMN_FIRST);
71+
expr=transformExpr(pstate,node,EXPR_COLUMN_FIRST);
7272
type_id=exprType(expr);
7373
if (nodeTag(expr)==T_Var)
7474
type_mod= ((Var*)expr)->vartypmod;
@@ -113,7 +113,7 @@ transformTargetList(ParseState *pstate, List *targetlist)
113113
identname= ((Ident*)res->val)->name;
114114
handleTargetColname(pstate,&res->name,NULL,identname);
115115
resname= (res->name) ?res->name :identname;
116-
transformTargetId(pstate, (Ident*)res->val,tent,resname, FALSE);
116+
transformTargetId(pstate, (Node*)res->val,tent,resname, FALSE);
117117
break;
118118
}
119119
caseT_ParamNo:

‎src/include/parser/parse_target.h

Lines changed: 3 additions & 4 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_target.h,v 1.6 1998/05/29 14:07:50 thomas Exp $
9+
* $Id: parse_target.h,v 1.7 1998/06/05 03:49:19 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -24,9 +24,8 @@
2424

2525
externList*transformTargetList(ParseState*pstate,List*targetlist);
2626
externList*makeTargetNames(ParseState*pstate,List*cols);
27-
externvoidtransformTargetId(ParseState*pstate,Ident*ident,
28-
TargetEntry*tent,char*resname,
29-
int16resjunk);
27+
externvoidtransformTargetId(ParseState*pstate,Node*node,
28+
TargetEntry*tent,char*resname,int16resjunk);
3029
externNode*coerce_target_expr(ParseState*pstate,Node*expr,
3130
Oidtype_id,Oidattrtype);
3231

‎src/test/regress/sql/tests

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,4 @@ hash_index
5858
select_views
5959
alter_table
6060
portals_p2
61+
junkfilter

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp