mirror of
https://github.com/postgres/postgres.git
synced 2025-05-06 19:59:18 +03:00
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
This commit is contained in:
parent
e0ef136d52
commit
6f19a8c41f
@ -3378,11 +3378,16 @@ 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".
|
||||
*
|
||||
* 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 */
|
||||
@ -3783,7 +3788,7 @@ eval_const_expressions_mutator(Node *node,
|
||||
case T_ConvertRowtypeExpr:
|
||||
{
|
||||
ConvertRowtypeExpr *cre = castNode(ConvertRowtypeExpr, node);
|
||||
Node *arg;
|
||||
Node *arg;
|
||||
ConvertRowtypeExpr *newcre;
|
||||
|
||||
arg = eval_const_expressions_mutator((Node *) cre->arg,
|
||||
|
Loading…
x
Reference in New Issue
Block a user