pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tatsuo Ishii <ishii@postgresql.org>
Subject: [PATCH v1] Fix to not allow null treatment to non window functions.
Date: Tue, 16 Jun 2026 20:51:59 +0900

The null treatment clause (RESPECT NULLS/IGNORE NULLS) are only
allowed to window functions per spec. Previously the check was only
applied to aggregates in window clause. Other type of functions were
allowed to use the clause, which was plain wrong.

To fix this, ParseFuncOrColumn() now checks whether other than window
functions are used with the null treatment clause. If so, error out.

Also remove the unnecessary test for "aggregate functions do not
accept RESPECT/IGNORE NULLS" because it is now checked in the
early-stage new check. The window regression test expected file is
changed accordingly.

Discussion: https://postgr.es/m/CACJufxFnm%2BAj2Jyhyd58PtW8e1vTZDKimkZE%2BMashCPSDKw56Q%40mail.gmail.com
---
 src/backend/parser/parse_func.c      | 16 +++++++++-------
 src/test/regress/expected/window.out |  4 ++--
 2 files changed, 11 insertions(+), 9 deletions(-)

inline patch 1: src/backend/parser/parse_func.c, src/test/regress/expected/window.out (+11/-9 lines) download inline-1.patchdiff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 2e4cc1de50d..6717ddc6881 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -353,6 +353,15 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, parser_errposition(pstate, location))); } + /* + * NULL TREATEMENT is only allowed for window functions per spec. + */ + if (fdresult != FUNCDETAIL_WINDOWFUNC && ignore_nulls != NO_NULLTREATMENT) + ereport(ERROR, + errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("Only window functions accept RESPECT/IGNORE NULLS"), + parser_errposition(pstate, location)); + /* * So far so good, so do some fdresult-type-specific processing. */ @@ -519,13 +528,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, errmsg("%s is not an ordered-set aggregate, so it cannot have WITHIN GROUP", NameListToString(funcname)), parser_errposition(pstate, location))); - - /* It also can't treat nulls as a window function */ - if (ignore_nulls != NO_NULLTREATMENT) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("aggregate functions do not accept RESPECT/IGNORE NULLS"), - parser_errposition(pstate, location))); } } else if (fdresult == FUNCDETAIL_WINDOWFUNC) diff --git a/src/test/regress/expected/window.out b/src/test/regress/expected/window.out index de0e14a686e..891b0153004 100644 --- a/src/test/regress/expected/window.out +++ b/src/test/regress/expected/window.out @@ -5764,11 +5764,11 @@ SELECT sum(orbit) OVER () FROM planets; -- succeeds (10 rows) SELECT sum(orbit) RESPECT NULLS OVER () FROM planets; -- fails -ERROR: aggregate functions do not accept RESPECT/IGNORE NULLS +ERROR: Only window functions accept RESPECT/IGNORE NULLS LINE 1: SELECT sum(orbit) RESPECT NULLS OVER () FROM planets; ^ SELECT sum(orbit) IGNORE NULLS OVER () FROM planets; -- fails -ERROR: aggregate functions do not accept RESPECT/IGNORE NULLS +ERROR: Only window functions accept RESPECT/IGNORE NULLS LINE 1: SELECT sum(orbit) IGNORE NULLS OVER () FROM planets; ^ SELECT row_number() OVER () FROM planets; -- succeeds -- 2.43.0
----Next_Part(Tue_Jun_16_20_59_13_2026_886)----

Message-ID: <no-message-id-1282350@localhost>
Permalink:  ../no-message-id-1282350@localhost/
Also on:    postgresql.org/message-id/no-message-id-1282350@localhost

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: ishii@postgresql.org
  Subject: Re: [PATCH v1] Fix to not allow null treatment to non window functions.
  In-Reply-To: <no-message-id-1282350@localhost>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox