Richard Guo <[email protected]> 于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
