Обсуждение: Optimize constant MinMax expressions

Поиск
Список
Период
Сортировка

Optimize constant MinMax expressions

От
Vik Fearing
Дата:
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.

I don't think this needs any documentation and I didn't see where we
have any existing tests for eval_const_expressions so I didn't create
any either.

Thoughts?
-- 
Vik Fearing                                          +33 6 46 75 15 36
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support

Вложения

Re: Optimize constant MinMax expressions

От
Tom Lane
Дата:
Vik Fearing <vik.fearing@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.

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.

            regards, tom lane


Re: Optimize constant MinMax expressions

От
Vik Fearing
Дата:
On 30/12/2018 00:36, Tom Lane wrote:
> Vik Fearing <vik.fearing@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

Вложения

Re: Optimize constant MinMax expressions

От
Tom Lane
Дата:
Vik Fearing <vik.fearing@2ndquadrant.com> writes:
> On 30/12/2018 00:36, Tom Lane wrote:
>> 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?

Pushed with a bit of wordsmithing on the comment.

>> 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?

I'd been thinking that we might just add a similar comment there, but
on reflection that doesn't seem like the right thing, so I started a
separate thread about it.

            regards, tom lane


Re: Optimize constant MinMax expressions

От
Vik Fearing
Дата:
On 30/12/2018 19:44, Tom Lane wrote:
> Vik Fearing <vik.fearing@2ndquadrant.com> writes:
>> On 30/12/2018 00:36, Tom Lane wrote:
>>> 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?
> 
> Pushed with a bit of wordsmithing on the comment.

Thanks!  I've updated the commitfest entry to reflect that.
-- 
Vik Fearing                                          +33 6 46 75 15 36
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support