On 30/12/2018 00:36, Tom Lane wrote:
> Vik Fearing <vik.fear...@2ndquadrant.com> writes:
>> I was working on a little thing where I needed to simulate BETWEEN
>> SYMMETRIC so naturally I used least() and greatest().  I was a little
>> surprised to see that my expressions were not folded into straight
>> constants and the estimates were way off as a consequence.
> 
>> I came up with the attached patch to fix it, but it's so ridiculously
>> small that I fear I'm missing something.
> 
> Well, the question this is begging is in the adjacent comment:
> 
>                  * Generic handling for node types whose own processing is
>                  * known to be immutable, and for which we need no smarts
> 
> Can we assume that the underlying datatype comparison function is
> immutable?  I guess so, since we assume that in nearby code such as
> contain_mutable_functions_walker, but I don't think it should be done
> without at least a comment.

Adding a comment is easy enough.  How is the attached?

> BTW, poking around for other code involving MinMaxExpr, I notice that
> contain_leaked_vars_walker is effectively assuming that all datatype
> comparison functions are leakproof, an assumption I find a bit debatable.
> Maybe it's all right, but again, it should certainly not have gone without
> a comment.

Surely this is out of scope for my patch?
-- 
Vik Fearing                                          +33 6 46 75 15 36
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c
index f4446169f5..ee8ed870fa 100644
--- a/src/backend/optimizer/util/clauses.c
+++ b/src/backend/optimizer/util/clauses.c
@@ -3378,11 +3378,15 @@ eval_const_expressions_mutator(Node *node,
 		case T_ArrayRef:
 		case T_ArrayExpr:
 		case T_RowExpr:
+		case T_MinMaxExpr:
 			{
 				/*
 				 * Generic handling for node types whose own processing is
 				 * known to be immutable, and for which we need no smarts
 				 * beyond "simplify if all inputs are constants".
+				 *
+				 * For MinMaxExpr, we assume btree comparison functions are
+				 * immutable.  See comment in contain_mutable_functions_walker.
 				 */
 
 				/* Copy the node and const-simplify its arguments */

Reply via email to