postgres.git / summary / log / commit / refs

commit    4e20511d5b8ba427730e09be45f9458f667f9c1e
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Tue Nov 29 00:08:38 2016 +0000

    Fix estimate_expression_value to constant-fold SQLValueFunction nodes.
    
    Oversight in my commit 0bb51aa96.  Noted while poking at a recent
    bug report --- HEAD's estimates for a query using CURRENT_DATE
    were unexpectedly much worse than 9.6's.


src/backend/optimizer/util/clauses.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 9598f28bab3..9af29dd5b12 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -3346,6 +3346,23 @@ eval_const_expressions_mutator(Node *node, newcoalesce->location = coalesceexpr->location; return (Node *) newcoalesce; } + case T_SQLValueFunction: + { + /* + * All variants of SQLValueFunction are stable, so if we are + * estimating the expression's value, we should evaluate the + * current function value. Otherwise just copy. + */ + SQLValueFunction *svf = (SQLValueFunction *) node; + + if (context->estimate) + return (Node *) evaluate_expr((Expr *) svf, + svf->type, + svf->typmod, + InvalidOid); + else + return copyObject((Node *) svf); + } case T_FieldSelect: { /* [parent: eb6814168862]