From ad46a2aa79f9ee79aecd889d0ace9ecc08dae984 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Sat, 25 Mar 2017 15:32:01 -0700 Subject: [PATCH] Remove unreachable code in expression evaluation. The previous code still contained expression evaluation time support for CaseExprs without a defresult. But transformCaseExpr() creates a default expression if necessary. Author: Andres Freund Discussion: https://postgr.es/m/4834.1490480275@sss.pgh.pa.us --- src/backend/executor/execExpr.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 766dbbb074..5a84742d14 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -1385,20 +1385,12 @@ ExecInitExprRec(Expr *node, PlanState *parent, ExprState *state, state->steps[whenstep].d.jump.jumpdone = state->steps_len; } - if (caseExpr->defresult) - { - /* evaluate ELSE expr into CASE's result variables */ - ExecInitExprRec(caseExpr->defresult, parent, state, - resv, resnull); - } - else - { - /* default ELSE is to return NULL */ - scratch.opcode = EEOP_CONST; - scratch.d.constval.value = (Datum) 0; - scratch.d.constval.isnull = true; - ExprEvalPushStep(state, &scratch); - } + /* transformCaseExpr always adds a default */ + Assert(caseExpr->defresult); + + /* evaluate ELSE expr into CASE's result variables */ + ExecInitExprRec(caseExpr->defresult, parent, state, + resv, resnull); /* adjust jump targets */ foreach(lc, adjust_jumps)