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

Commit2b189aa

Browse files
author
Thomas G. Lockhart
committed
Improve CASE statement support.
Try to label CASE columns for a SELECT if not specified with an AS clause.
1 parent44cf948 commit2b189aa

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

‎src/backend/parser/parse_expr.c

Lines changed: 10 additions & 13 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_expr.c,v 1.37 1998/12/04 15:34:30 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.38 1998/12/13 23:56:43 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -251,8 +251,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
251251
{
252252

253253
/*
254-
* look for a column name or a relation name (the default
255-
* behavior)
254+
* look for a column name or a relation name (the default behavior)
256255
*/
257256
result=transformIdent(pstate,expr,precedence);
258257
break;
@@ -358,13 +357,6 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
358357
w->expr= (Node*)a;
359358
}
360359
lfirst(args)=transformExpr(pstate, (Node*)w,precedence);
361-
362-
if (w->result==NULL)
363-
{
364-
A_Const*n=makeNode(A_Const);
365-
n->val.type=T_Null;
366-
w->result= (Node*)n;
367-
}
368360
}
369361

370362
if (c->defresult==NULL)
@@ -413,7 +405,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
413405
}
414406
}
415407

416-
/* Convert default clause, if necessary */
408+
/* Convert defaultresultclause, if necessary */
417409
if (c->casetype!=ptype)
418410
{
419411
if (!c->casetype)
@@ -469,8 +461,13 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
469461
elog(ERROR,"WHEN clause must have a boolean result");
470462

471463
/* result is NULL for NULLIF() construct - thomas 1998-11-11 */
472-
if (w->result!=NULL)
473-
w->result=transformExpr(pstate, (Node*)w->result,precedence);
464+
if (w->result==NULL)
465+
{
466+
A_Const*n=makeNode(A_Const);
467+
n->val.type=T_Null;
468+
w->result= (Node*)n;
469+
}
470+
w->result=transformExpr(pstate, (Node*)w->result,precedence);
474471
result=expr;
475472
break;
476473
}

‎src/backend/parser/parse_target.c

Lines changed: 12 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_target.c,v 1.31 1998/12/04 15:34:30 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.32 1998/12/13 23:56:44 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -32,7 +32,7 @@
3232

3333

3434
staticList*ExpandAllTables(ParseState*pstate);
35-
staticchar*FigureColname(Node*expr,Node*resval);
35+
char*FigureColname(Node*expr,Node*resval);
3636

3737
staticNode*SizeTargetExpr(ParseState*pstate,
3838
Node*expr,
@@ -867,7 +867,7 @@ ExpandAllTables(ParseState *pstate)
867867
* list, we have to guess.
868868
*
869869
*/
870-
staticchar*
870+
char*
871871
FigureColname(Node*expr,Node*resval)
872872
{
873873
switch (nodeTag(expr))
@@ -881,6 +881,15 @@ FigureColname(Node *expr, Node *resval)
881881
return ((FuncCall*)resval)->funcname;
882882
}
883883
break;
884+
caseT_CaseExpr:
885+
{
886+
char*name;
887+
name=FigureColname(((CaseExpr*)expr)->defresult,resval);
888+
if (!strcmp(name,"?column?"))
889+
name="case";
890+
returnname;
891+
}
892+
break;
884893
default:
885894
break;
886895
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp