diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-11-28 19:08:38 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-11-28 19:08:45 -0500 |
commit | 4e20511d5b8ba427730e09be45f9458f667f9c1e (patch) | |
tree | 322b27c239eda78b19a69a5ac33dea3a9b8c4334 | |
parent | eb6814168862ef0ff44716467aacdebcef87415a (diff) |
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.
-rw-r--r-- | src/backend/optimizer/util/clauses.c | 17 |
1 files changed, 17 insertions, 0 deletions
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: { /* |