Commit 6f19a8c4 authored by Tom Lane's avatar Tom Lane

Teach eval_const_expressions to constant-fold LEAST/GREATEST expressions.

Doing this requires an assumption that the invoked btree comparison
function is immutable.  We could check that explicitly, but in other
places such as contain_mutable_functions we just assume that it's true,
so we may as well do likewise here.  (If the comparison function's
behavior isn't immutable, the sort order in indexes built with it would
be unstable, so it seems certainly wrong for it not to be so.)

Vik Fearing

Discussion: https://postgr.es/m/c6e8504c-4c43-35fa-6c8f-3c0b80a912cc@2ndquadrant.com
parent e0ef136d
...@@ -3378,11 +3378,16 @@ eval_const_expressions_mutator(Node *node, ...@@ -3378,11 +3378,16 @@ eval_const_expressions_mutator(Node *node,
case T_ArrayRef: case T_ArrayRef:
case T_ArrayExpr: case T_ArrayExpr:
case T_RowExpr: case T_RowExpr:
case T_MinMaxExpr:
{ {
/* /*
* Generic handling for node types whose own processing is * Generic handling for node types whose own processing is
* known to be immutable, and for which we need no smarts * known to be immutable, and for which we need no smarts
* beyond "simplify if all inputs are constants". * beyond "simplify if all inputs are constants".
*
* Treating MinMaxExpr this way amounts to assuming that the
* btree comparison function it calls is immutable; see the
* reasoning in contain_mutable_functions_walker.
*/ */
/* Copy the node and const-simplify its arguments */ /* Copy the node and const-simplify its arguments */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment