On 11/09/2026 05:54, Jeevan Chalke wrote:


On Fri, Sep 11, 2026 at 8:01 AM Tom Lane <[email protected]> wrote:

    Jeevan Chalke <[email protected]> writes:
    > In my currently proposed patch (
    >
    
https://www.postgresql.org/message-id/CAM2+6=VS=fSKxfimW6Th9iu_xjbxOEAKg4eYwaa=smg3x8p...@mail.gmail.com),
    > the ON EMPTY value is strictly returned only when there are zero
    input
    > rows. Rows containing NULL are treated as valid rows and do not
    trigger the ON
    > EMPTY clause.

    [ ... not having read the patch ... ]  There is a critical distinction
    here between strict and non-strict aggregates.  My interpretation of
    how this should work is that ON EMPTY should trigger if zero rows were
    fed to the aggregate's transition function.  A row containing NULL is
    valid input if the transition function is non-strict, otherwise it is
    not.

    What I gather from Vik's comments is that the SQL committee only
    formalized the behavior for strict aggregates (since both PRODUCT
    and SUM ignore nulls).  So we're somewhat out on a limb here for
    the non-strict case, but I think we have to define that one as
    being "null inputs count as inputs".


Agree with the strict/non-strict point. But the SQL standard text for this is not available yet, so I am not sure what exact behaviour we should follow here.

Do you or Vik have more details on what the committee is going with? That will
help us decide the correct semantics instead of guessing.


Its definition in the standard is exactly:


PRODUCT(SQ VE, 1 ON EMPTY) => COALESCE(PRODUCT(SQ VE), 1)


where SQ is ALL/DISTINCT and VE is the value expression.

--

Vik Fearing

Reply via email to