Thread

Commits

  1. Teach eval_const_expressions to constant-fold LEAST/GREATEST expressions.

  1. Optimize constant MinMax expressions

    Vik Fearing <vik.fearing@2ndquadrant.com> — 2018-12-29T21:40:14Z

    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
    
  2. Re: Optimize constant MinMax expressions

    Tom Lane <tgl@sss.pgh.pa.us> — 2018-12-29T23:36:38Z

    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
    
    
    
  3. Re: Optimize constant MinMax expressions

    Vik Fearing <vik.fearing@2ndquadrant.com> — 2018-12-30T08:31:48Z

    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
    
  4. Re: Optimize constant MinMax expressions

    Tom Lane <tgl@sss.pgh.pa.us> — 2018-12-30T18:44:59Z

    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
    
    
    
  5. Re: Optimize constant MinMax expressions

    Vik Fearing <vik.fearing@2ndquadrant.com> — 2018-12-30T19:29:18Z

    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