Thread

  1. Re: Some optimizations for COALESCE expressions during constant folding

    Tender Wang <tndrwang@gmail.com> — 2025-11-25T12:07:17Z

    Richard Guo <guofenglinux@gmail.com> 于2025年11月25日周二 18:51写道:
    
    > Currently, we perform some simplification for Const arguments of a
    > COALESCE expression.  For instance, if the first argument is a
    > non-null constant, we use that constant as the result for the entire
    > expression.  If a subsequent argument is a non-null constant, all
    > following arguments are dropped since they will never be reached.
    >
    > We can extend this simplification to Var arguments since the NOT NULL
    > attribute information is now available during constant folding.  0001
    > implements this.
    >
    
    I took a quick look at the 0001. It seems correct to me.
    One thing I want to confirm is that if var_is_nonnullable() returns true,
    we can make sure that
    the Var is 100% nonnullable, no matter what kind of join reorder happens.
    
    
    > Another optimization that can be done for a COALESCE expression is
    > when it is used in a NullTest.  We can determine that a COALESCE
    > expression is non-nullable by checking if at least one of its
    > arguments is proven non-null.  This information can then be used to
    > reduce the NullTest qual to a constant true or false.  0002 implements
    > this.  (I'm wondering whether it'd be better to consolidate the
    > non-null check for Const, Var, and CoalesceExpr into one helper
    > function to simplify the code in eval_const_expressions.)
    >
    
    I have no objections to the 0002 code logic.
    But I wonder how often users write "COALECE()  is not null" in their query.
    Before this patch, I didn't find the case in the regression test cases.
    
    
    -- 
    Thanks,
    Tender Wang