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

Commit7ecc40c

Browse files
committed
Another go-round with FigureColname, to produce less surprising results
for nested typecasts. It now produces a column header of 'timestamptz'for 'SELECT CURRENT_TIMESTAMP', rather than 'text' as it was doing forawhile there.
1 parent71f2993 commit7ecc40c

File tree

1 file changed

+45
-22
lines changed

1 file changed

+45
-22
lines changed

‎src/backend/parser/parse_target.c

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.73 2001/09/28 08:09:09 thomas Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.74 2001/10/08 21:48:51 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -27,6 +27,7 @@
2727

2828
staticList*ExpandAllTables(ParseState*pstate);
2929
staticchar*FigureColname(Node*node);
30+
staticintFigureColnameInternal(Node*node,char**name);
3031

3132

3233
/*
@@ -460,15 +461,28 @@ ExpandAllTables(ParseState *pstate)
460461
staticchar*
461462
FigureColname(Node*node)
462463
{
464+
char*name=NULL;
465+
466+
FigureColnameInternal(node,&name);
467+
if (name!=NULL)
468+
returnname;
469+
/* default result if we can't guess anything */
470+
return"?column?";
471+
}
472+
473+
staticint
474+
FigureColnameInternal(Node*node,char**name)
475+
{
476+
intstrength=0;
477+
463478
if (node==NULL)
464-
return"?column?";
479+
returnstrength;
465480

466481
switch (nodeTag(node))
467482
{
468483
caseT_Ident:
469-
return ((Ident*)node)->name;
470-
caseT_A_Const:
471-
return (FigureColname((Node*)((A_Const*)node)->typename));
484+
*name= ((Ident*)node)->name;
485+
return2;
472486
caseT_Attr:
473487
{
474488
List*attrs= ((Attr*)node)->attrs;
@@ -477,36 +491,45 @@ FigureColname(Node *node)
477491
{
478492
while (lnext(attrs)!=NIL)
479493
attrs=lnext(attrs);
480-
returnstrVal(lfirst(attrs));
494+
*name=strVal(lfirst(attrs));
495+
return2;
481496
}
482497
}
483498
break;
484499
caseT_FuncCall:
485-
return ((FuncCall*)node)->funcname;
500+
*name= ((FuncCall*)node)->funcname;
501+
return2;
502+
caseT_A_Const:
503+
if (((A_Const*)node)->typename!=NULL)
504+
{
505+
*name= ((A_Const*)node)->typename->name;
506+
return1;
507+
}
508+
break;
486509
caseT_TypeCast:
510+
strength=FigureColnameInternal(((TypeCast*)node)->arg,
511+
name);
512+
if (strength <=1)
487513
{
488-
char*name;
489-
490-
name=FigureColname(((TypeCast*)node)->arg);
491-
if (strcmp(name,"?column?")==0)
492-
name=FigureColname((Node*)((TypeCast*)node)->typename);
493-
returnname;
514+
if (((TypeCast*)node)->typename!=NULL)
515+
{
516+
*name= ((TypeCast*)node)->typename->name;
517+
return1;
518+
}
494519
}
495520
break;
496521
caseT_CaseExpr:
522+
strength=FigureColnameInternal(((CaseExpr*)node)->defresult,
523+
name);
524+
if (strength <=1)
497525
{
498-
char*name;
499-
500-
name=FigureColname(((CaseExpr*)node)->defresult);
501-
if (strcmp(name,"?column?")==0)
502-
name="case";
503-
returnname;
526+
*name="case";
527+
return1;
504528
}
505529
break;
506-
caseT_TypeName:
507-
return ((TypeName*)node)->name;
508530
default:
509531
break;
510532
}
511-
return"?column?";
533+
534+
returnstrength;
512535
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp